WinSxS: คืนพื้นที่ไดรฟ์ C เต็มบน Windows Server อย่างปลอดภัย

ไดรฟ์ C เต็มบน Windows Server เพราะ WinSxS ใหญ่ขึ้นเรื่อย ๆ วัดขนาดจริงด้วย DISM ล้าง component store อย่างถูกวิธี ล้าง cache อัปเดตและ log โดยไม่ลบไฟล์ระบบ

โดย ทีมงาน THAI DATA CLOUD อ่าน 13 นาที

แชร์FacebookXLINELinkedIn
WinSxS — WinSxS: คืนพื้นที่ไดรฟ์ C เต็มบน Windows Server อย่างปลอดภัย
WinSxS: คืนพื้นที่ไดรฟ์ C เต็มบน Windows Server อย่างปลอดภัย

คำตอบสั้น ๆ: ไดรฟ์ C เต็มบน Windows Server เพราะ WinSxS ใหญ่ขึ้นเรื่อย ๆ วัดขนาดจริงด้วย DISM ล้าง component store อย่างถูกวิธี ล้าง cache อัปเดตและ log โดยไม่ลบไฟล์ระบบ

คู่มือนี้อธิบาย WinSxS ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

WinSxS (C:\Windows\WinSxS) คือ component store ของ Windows ที่เก็บไฟล์ของระบบทุกเวอร์ชันที่ติดตั้งผ่านอัปเดต เพื่อให้ Windows ซ่อมไฟล์ที่เสีย เปิดฟีเจอร์เพิ่ม และถอนอัปเดตได้ บน Windows Server ที่เปิดมาหลายปี โฟลเดอร์ WinSxS จะดูใหญ่ขึ้นทุกเดือนจนไดรฟ์ C เหลือที่ว่างไม่กี่ GB ผู้ดูแลจำนวนมากจึงคิดจะลบไฟล์ในโฟลเดอร์นี้เอง ซึ่งเป็นสิ่งที่ห้ามทำเด็ดขาด เพราะเครื่องอาจบูตไม่ขึ้นหรืออัปเดตไม่ได้อีกเลย

คู่มือนี้เหมาะกับผู้ดูแล Windows Server 2016, 2019, 2022 และ 2025 บนคลาวด์ที่ไดรฟ์ C ใกล้เต็ม หรือเจอการแจ้งเตือนพื้นที่ต่ำ เมื่อทำครบ คุณจะรู้ว่าพื้นที่หายไปที่ไหนจริง ล้าง WinSxS ด้วยเครื่องมือของ Microsoft ล้าง cache อัปเดต log และไฟล์ชั่วคราวอย่างปลอดภัย และตัดสินใจได้ว่าควรล้างต่อหรือควรขยายดิสก์

สิ่งที่ต้องเตรียม

  • บัญชีในกลุ่ม Administrators และ PowerShell แบบ Run as administrator
  • snapshot ของเครื่องหรือการสำรองข้อมูลล่าสุดที่กู้คืนได้ ก่อนลบไฟล์ใด ๆ บนไดรฟ์ระบบ
  • ช่วงเวลาที่ไม่มีการติดตั้งอัปเดตค้างอยู่ ถ้า Windows Update ขึ้นว่า Restart required ให้รีสตาร์ตให้เสร็จก่อน เพราะ DISM จะล้างได้น้อยลงเมื่อมีงานอัปเดตค้าง
  • พื้นที่ว่างบนไดรฟ์ C อย่างน้อย 1 ถึง 2 GB เพื่อให้ DISM ทำงานได้ ถ้าเหลือน้อยกว่านี้ ให้ทำขั้นตอนที่ 4 และ 5 ก่อน
ตารางเปรียบเทียบวิธีคืนพื้นที่ไดรฟ์ C บน Windows Server ตั้งแต่ล้าง WinSxS ด้วย DISM ล้าง cache อัปเดต จนถึงการลบไฟล์เองที่ห้ามทำ
ใช้เครื่องมือของระบบก่อนเสมอ การลบไฟล์ระบบด้วยมือคือทางเดียวที่เสี่ยงทำเครื่องบูตไม่ขึ้น

ขั้นตอนที่ 1: หาว่าอะไรกินพื้นที่ไดรฟ์ C จริง

อย่าเพิ่งโทษ WinSxS จนกว่าจะเห็นตัวเลข ตรวจพื้นที่ว่างและโฟลเดอร์ระดับบนที่ใหญ่ที่สุดด้วยคำสั่งนี้ คำสั่งอาจใช้เวลาหลายนาทีบนดิสก์ที่มีไฟล์มาก

Get-PSDrive C | Select-Object Used, Free
Get-ChildItem C:\ -Directory -Force -ErrorAction SilentlyContinue | ForEach-Object {
  $sum = (Get-ChildItem $_.FullName -Recurse -File -Force -ErrorAction SilentlyContinue | Measure-Object Length -Sum).Sum
  [pscustomobject]@{ Folder = $_.FullName; GB = [math]::Round($sum / 1GB, 2) }
} | Sort-Object GB -Descending | Select-Object -First 10

ผลที่เจอบ่อยบนเซิร์ฟเวอร์จริงคือ C:\Windows ใหญ่ที่สุด ตามด้วย C:\inetpub ของเว็บเซิร์ฟเวอร์ที่ log สะสม โฟลเดอร์ของ SQL Server ที่เก็บไฟล์ backup ไว้บนไดรฟ์ C และ C:\Users ที่มีไฟล์ดาวน์โหลดของผู้ดูแล ถ้าโฟลเดอร์ใหญ่ที่สุดไม่ใช่ C:\Windows ให้แก้ที่ต้นเหตุนั้นก่อน การล้าง WinSxS อย่างเดียวจะไม่พอ

ตัวเลขของ C:\Windows ที่ได้จากคำสั่งด้านบนหรือจาก File Explorer จะสูงกว่าความจริง เพราะไฟล์ใน WinSxS ส่วนใหญ่เป็น hard link ที่ใช้ร่วมกับ C:\Windows\System32 ไฟล์ชุดเดียวถูกนับสองครั้ง ขนาดจริงต้องวัดด้วย DISM ในขั้นตอนถัดไป

ขั้นตอนที่ 2: วัดขนาดจริงของ WinSxS ด้วย DISM

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
ผลคำสั่ง DISM AnalyzeComponentStore แสดงขนาดจริงของ WinSxS ส่วนที่แชร์กับ Windows และส่วนที่ล้างได้
ดูที่ Backups and Disabled Features และ Cleanup Recommended ไม่ใช่ขนาดที่ Explorer แสดง

อ่านผลทีละบรรทัด

  • Actual Size of Component Store คือขนาดจริงของ WinSxS หลังหักไฟล์ที่ใช้ร่วมกัน
  • Shared with Windows คือไฟล์ที่ระบบใช้อยู่ ล้างไม่ได้และไม่ควรพยายามล้าง
  • Backups and Disabled Features คือไฟล์เวอร์ชันเก่าที่ถูกแทนที่ด้วยอัปเดตใหม่ และ payload ของฟีเจอร์ที่ไม่ได้เปิด ส่วนนี้คือส่วนที่ล้างได้
  • Component Store Cleanup Recommended ถ้าเป็น Yes แปลว่าล้างแล้วจะได้พื้นที่คืนจริง ถ้าเป็น No การล้างจะได้คืนน้อยมาก

ขั้นตอนที่ 3: ล้าง WinSxS ด้วย StartComponentCleanup

คำสั่งนี้ลบเวอร์ชันเก่าของ component ที่ถูกแทนที่แล้ว เป็นวิธีที่ Microsoft แนะนำ ใช้เวลาตั้งแต่ไม่กี่นาทีจนถึงชั่วโมงกว่าบนเครื่องที่ไม่เคยล้าง อย่าปิดหน้าต่างหรือรีสตาร์ตระหว่างทำงาน แม้แถบความคืบหน้าจะค้างที่ตัวเลขเดิมนาน

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

Windows มีงานตั้งเวลาชื่อ StartComponentCleanup ที่ล้าง WinSxS ให้เองตอนเครื่องว่าง แต่งานนี้รอให้อัปเดตติดตั้งมาแล้วอย่างน้อย 30 วันก่อนจึงลบเวอร์ชันเก่า และหยุดเมื่อครบเวลาที่กำหนด เครื่องที่ทำงานตลอดเวลาจึงล้างไม่ทันการสะสม ถ้าต้องการสั่งงานเดียวกันนี้ทันที

schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"

เมื่อไรควรใช้ /ResetBase

การเติม /ResetBase จะลบเวอร์ชันเก่าของทุก component ที่ถูกแทนที่ทันที ได้พื้นที่คืนมากขึ้น แต่หลังจากนั้นจะถอนอัปเดตที่ติดตั้งไปแล้วไม่ได้ ใช้เฉพาะเมื่อเครื่องทำงานกับอัปเดตล่าสุดได้ปกติมาหลายสัปดาห์แล้ว และมี snapshot ที่ถอยกลับได้

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

หลังล้างเสร็จ ให้รัน AnalyzeComponentStore อีกครั้ง ค่า Backups and Disabled Features ควรลดลงอย่างเห็นได้ชัด และ Cleanup Recommended ควรเป็น No

ขั้นตอนที่ 4: ล้าง cache ของ Windows Update และไฟล์ชั่วคราว

ไฟล์อัปเดตที่ดาวน์โหลดมาแล้วค้างอยู่ใน C:\Windows\SoftwareDistribution\Download ไม่ใช่ส่วนของ WinSxS และลบได้อย่างปลอดภัยเมื่อไม่มีอัปเดตกำลังติดตั้ง ถ้ายังต้องใช้ Windows Update จะดาวน์โหลดใหม่เอง

Stop-Service wuauserv, bits -Force
Remove-Item C:\Windows\SoftwareDistribution\Download\* -Recurse -Force
Start-Service wuauserv, bits

ต่อด้วยไฟล์ชั่วคราวของระบบที่เก่ากว่า 7 วัน ไฟล์ที่โปรแกรมเปิดใช้อยู่จะลบไม่ได้และถูกข้ามไปเอง

Get-ChildItem C:\Windows\Temp -Recurse -File -Force -ErrorAction SilentlyContinue |
  Where-Object LastWriteTime -lt (Get-Date).AddDays(-7) |
  Remove-Item -Force -ErrorAction SilentlyContinue

อีกเครื่องมือที่ปลอดภัยคือ Disk Cleanup พิมพ์ cleanmgr เลือกไดรฟ์ C คลิก Clean up system files แล้วติ๊ก Windows Update Cleanup, Temporary files และ System error memory dump files ถ้าเครื่องเพิ่งอัปเกรด Windows Server จะมีรายการ Previous Windows installation(s) ซึ่งคือโฟลเดอร์ Windows.old ที่มักใหญ่หลายสิบ GB ลบได้เมื่อมั่นใจว่าระบบใหม่ทำงานปกติแล้ว

ขั้นตอนที่ 5: จัดการ log และ dump ที่สะสม

ไฟล์เหล่านี้ไม่ใช่ WinSxS แต่เป็นสาเหตุที่ไดรฟ์ C เต็มบ่อยพอกัน

  • log ของ IIS ที่ C:\inetpub\logs\LogFiles เว็บที่มีผู้ใช้มากสร้าง log หลาย GB ต่อเดือน ตั้งให้ IIS เขียน log ไปไดรฟ์ข้อมูลแทน และลบไฟล์ที่เก่ากว่ากำหนด
  • log ของ CBS ที่ C:\Windows\Logs\CBS ไฟล์ CbsPersist ที่เก่าลบได้ แต่ห้ามลบ CBS.log ที่ระบบเขียนอยู่
  • memory dump ที่ C:\Windows\MEMORY.DMP และ C:\Windows\Minidump เกิดหลังเครื่องค้างแบบจอฟ้า ถ้าวิเคราะห์สาเหตุเสร็จแล้วลบได้
  • Shadow copies ของไดรฟ์ C ถ้าเคยเปิดไว้ ตรวจขนาดด้วย vssadmin list shadowstorage และจำกัดขนาดตามคู่มือ Shadow Copies

ตัวอย่างลบ log ของ IIS ที่เก่ากว่า 30 วัน ก่อนรันให้ย้ายหรือสำรอง log ที่ต้องเก็บไว้ไปที่อื่นก่อน ถ้าบริษัทมีหน้าที่เก็บข้อมูลจราจรคอมพิวเตอร์ตาม พ.ร.บ.คอมพิวเตอร์ หรือมีนโยบายเก็บ log ของตัวเอง ให้ยืนยันระยะเวลาที่ต้องเก็บกับฝ่ายกฎหมายหรือที่ปรึกษากฎหมายก่อนลบ

Get-ChildItem C:\inetpub\logs\LogFiles -Recurse -File -Filter *.log |
  Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) |
  Remove-Item -WhatIf

คำสั่งนี้ใส่ -WhatIf ไว้ จึงแค่แสดงรายการที่จะถูกลบ ตรวจรายการแล้วจึงลบ -WhatIf ออกเพื่อลบจริง

ขั้นตอนที่ 6: ย้ายข้อมูลออกหรือขยายดิสก์เมื่อล้างแล้วยังไม่พอ

ถ้าล้าง WinSxS และไฟล์ทั้งหมดแล้วพื้นที่ยังเหลือน้อยกว่า 15 ถึง 20 เปอร์เซ็นต์ แปลว่าไดรฟ์ C เล็กเกินไปสำหรับงานของเครื่อง การล้างซ้ำทุกเดือนไม่ใช่ทางแก้ระยะยาว ทางเลือกที่ดีกว่าคือ

  • เพิ่ม data disk แล้วย้ายเว็บ ฐานข้อมูล ไฟล์ backup และ log ของแอปไปไว้ที่ไดรฟ์ D ให้ไดรฟ์ C มีแค่ระบบปฏิบัติการและโปรแกรม
  • ขยายขนาดดิสก์ระบบจากพอร์ทัลของคลาวด์ แล้วขยาย partition ใน Windows ตามคู่มือขยายพื้นที่ดิสก์บน Windows Server ซึ่งทำได้โดยไม่ต้องปิดเครื่อง
  • ถ้าไฟล์ pagefile.sys ใหญ่ ให้ย้ายไปไดรฟ์อื่นที่ System Properties > Advanced > Performance Settings > Advanced > Virtual memory > Change แล้วรีสตาร์ต ห้ามลบไฟล์นี้ตรง ๆ

สิ่งที่ห้ามลบแม้ไดรฟ์ C จะเต็มมาก

Microsoft ระบุชัดว่าการลบไฟล์ใน WinSxS หรือลบทั้งโฟลเดอร์อาจทำให้เครื่องบูตไม่ขึ้นและอัปเดตไม่ได้ เครื่องมือ cleaner ของผู้ผลิตรายอื่นที่อ้างว่าลบ WinSxS ได้ก็เสี่ยงแบบเดียวกัน กลุ่มอื่นที่ห้ามลบเองคือ C:\Windows\Installer ซึ่งเป็น cache ของไฟล์ติดตั้ง MSI ที่ต้องใช้ตอนอัปเดตและถอนโปรแกรม และ C:\Windows\System32\DriverStore ที่เก็บไดรเวอร์ของอุปกรณ์ อ่านรายละเอียดเพิ่มเติมได้จากเอกสาร Clean up the WinSxS folder ของ Microsoft

รายการสิ่งที่ห้ามลบเองเมื่อไดรฟ์ C เต็มบน Windows Server เช่น โฟลเดอร์ WinSxS, Installer, DriverStore และ pagefile
ทุกข้อสีแดงมีเครื่องมือของระบบที่ล้างได้อย่างปลอดภัยกว่า

ปัญหาที่พบบ่อยเกี่ยวกับ WinSxS

ลบไฟล์ในโฟลเดอร์ WinSxS เองได้หรือไม่ ถ้าเลือกเฉพาะไฟล์เก่า?

ไม่ได้ ไฟล์ใน WinSxS ถูกอ้างอิงด้วย hard link และฐานข้อมูลของ component store การลบไฟล์เองทำให้ข้อมูลไม่ตรงกัน ผลที่ตามมาคืออัปเดตล้มเหลว เปิดฟีเจอร์ไม่ได้ หรือบูตไม่ขึ้น ใช้ DISM /StartComponentCleanup เท่านั้น

DISM ค้างที่ 10 หรือ 20 เปอร์เซ็นต์นานมาก ควรยกเลิกหรือไม่?

ไม่ควรยกเลิก การล้าง WinSxS ครั้งแรกบนเครื่องที่ไม่เคยล้างมาหลายปีอาจใช้เวลาเป็นชั่วโมง และแถบความคืบหน้าไม่ขยับตามเวลาจริง ดูความคืบหน้าได้จากไฟล์ C:\Windows\Logs\DISM\dism.log ถ้าขนาดไฟล์ยังเพิ่มขึ้นแปลว่ายังทำงานอยู่

DISM แจ้ง error 0x800f0806 หรือบอกว่ามีงานค้าง ต้องทำอย่างไร?

มักแปลว่ามีอัปเดตที่รอรีสตาร์ตให้เสร็จ ให้รีสตาร์ตเครื่องในเวลาที่เหมาะสม แล้วรันคำสั่งล้างอีกครั้ง ถ้ายังล้มเหลว ให้ตรวจความสมบูรณ์ของ component store ด้วย Dism.exe /Online /Cleanup-Image /ScanHealth ก่อนทำอย่างอื่น

ล้าง WinSxS แล้วได้พื้นที่คืนน้อย ทำไม?

ส่วนใหญ่เพราะ WinSxS ไม่ใช่ต้นเหตุตั้งแต่แรก ขนาดที่ File Explorer แสดงรวมไฟล์ที่แชร์กับระบบไว้ด้วย ถ้า Backups and Disabled Features เหลือไม่มาก พื้นที่ที่หายไปอยู่ที่อื่น ให้กลับไปดูผลของขั้นตอนที่ 1 อีกครั้ง

ถ้าไดรฟ์ C เต็มบ่อยจนกระทบระบบ หรืออยากให้ช่วยวางขนาดดิสก์ใหม่ให้เหมาะกับงาน ติดต่อทีมงาน THAI DATA CLOUD ได้ ดูตัวเลือกเครื่องและดิสก์ได้ที่ Cloud Windows Server

อ่านเพิ่มเติมเกี่ยวกับ WinSxS

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน