Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีทำความสะอาดและบีบอัดโฟลเดอร์ WinSxS บน Windows 10/Windows Server

ในบทความนี้เราจะพูดถึงโฟลเดอร์ WinSxS ใน Windows สาเหตุของการเติบโตต่อเนื่องและวิธีทำความสะอาด ไดเรกทอรี C:\Windows\WinSxS เป็นที่เก็บ Components ของ Windows ไดเรกทอรีนี้มี DLLs, ไฟล์ Binary และ XML ที่จำเป็นสำหรับการติดตั้งและการทำงานของ Windows Roles หรือ Features ต่างๆ เมื่อติดตั้ง Windows Updates (ปกติเกิดขึ้นทุกเดือน) เวอร์ชันใหม่ของ Component ที่อัปเดตจะถูกติดตั้งบนระบบ ในขณะที่เวอร์ชันเก่าถูกเก็บไว้ในโฟลเดอร์ WinSxS (จำเป็นสำหรับความเข้ากันได้และทำให้สามารถ Rollback กลับไปเวอร์ชันก่อนหน้าของ Components เมื่อ Uninstall Windows Update)

ไดเรกทอรี WinSxS โตขึ้นในขนาดตามเวลา นอกจากนี้ ขนาดของมันไม่ถูกจำกัดโดยอะไร (แม้ในทางปฏิบัติ ขนาดโฟลเดอร์ WinSxS ใน Windows 10 นادرๆ ที่เกิน 15-20 GB)

วิธีตรวจสอบขนาดจริงของโฟลเดอร์ WinSxS บน Windows 10

วิธีง่ายที่สุดได้ขนาดปัจจุบันของโฟลเดอร์ WinSxS บน Windows คือเปิด Properties ของโฟลเดอร์ %windir%\WinSxS ใน File Explorer (หรือใช้สคริปต์ PowerShell) แต่โปรดทราบว่า File Managers ส่วนใหญ่ (รวมถึง File Explorer) แสดงขนาดโฟลเดอร์ WinSxS ใหญ่กว่าที่ใช้จริงบนดิสก์เล็กน้อย

เหตุผลคือ ไดเรกทอรี WinSxS มี Hard Links (Symbolic Links) จำนวนมากไปยัง System Files ในโฟลเดอร์อื่น File Managers ตอนคำนวณขนาดโฟลเดอร์ WinSxS นำขนาดไฟล์ที่ Hard Links อ้างอิงมาคำนวณรวม แต่สิ่งนี้ไม่ถูกต้อง

สามารถหาขนาดจริงของโฟลเดอร์ WinSxS บนดิสก์ได้โดยใช้เครื่องมือ du จาก Sysinternals:
du -v c:\windows\winSXS

ยังสามารถวิเคราะห์ขนาด Component Store (โฟลเดอร์ WinSxS) โดยใช้คำสั่ง DISM:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Deployment Image Servicing and Management tool
Component Store (WinSxS) information:
Windows Explorer Reported Size of Component Store : 8.44 GB
Actual Size of Component Store : 8.15 GB
Shared with Windows : 5.74 GB
Backups and Disabled Features : 1.97 GB
Cache and Temporary Data : 438.31 MB
Date of Last Cleanup : 2021-02-22 20:37:29
Number of Reclaimable Packages : 1
Component Store Cleanup Recommended : Yes
The operation completed successfully.

ตามที่เห็น ในกรณีนี้ สามารถลดขนาดโฟลเดอร์ WinSxS ได้ (1.97 + 0.44) GB

คำสั่ง DISM ยังช่วยตรวจสอบและซ่อมแซม Windows Image:

DISM /Online /Cleanup-Image /RestoreHealth

วิธีทำความสะอาด Component Store (โฟลเดอร์ WinSxS) บน Windows

วิธีเร็วที่สุดและง่ายที่สุดในการล้าง Windows Component Store (โฟลเดอร์ WinSxS) คือเพิ่มประสิทธิภาพการจัดเก็บด้วยคำสั่ง:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

ตัวเลือก StartComponentCleanup ของ DISM รองรับใน Windows ทุกเวอร์ชันตั้งแต่ Windows 8 และ Windows Server 2012

หลังทำความสะอาดเสร็จ ตรวจสอบขนาดปัจจุบันของ Component Store:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

ในตัวอย่างของผม ลดขนาดโฟลเดอร์ WinSxS ลง 2.4 GB

ตัวเลือก /StartComponentCleanup มีตัวเลือกเพิ่มเติม /ResetBase ที่อนุญาตให้ลบเวอร์ชันก่อนหน้าของ Components ทั้งหมดที่เหลือหลังติดตั้ง Windows Updates หลังจากนั้นจะไม่สามารถ Uninstall Updates หรือ Service Packs ที่ติดตั้งแล้วได้ และปุ่ม Uninstall จะหายจาก Control Panel Item Uninstall an Update เพื่อล้างเวอร์ชันเก่าของ Components ให้รัน:

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

ใน Windows 7 และ Windows Server 2008 R2 ใช้ตัวเลือก DISM เพิ่มเติมเพื่อล้างเวอร์ชันเก่าของ Components ที่เหลือหลังติดตั้ง Service Packs:

DISM /online /Cleanup-Image /spsuperseded

ยังสามารถลบไฟล์อัปเดตเก่าได้โดยใช้ Wizard "Disk Cleanup":

  1. รันคำสั่ง cleanmgr เป็น Administrator
  2. เลือก Disk และในหน้าตัดไป กดปุ่ม "Clean up system files"
  3. จากนั้นเลือกตัวเลือก "Windows update cleanup" เครื่องมือ Disk Cleanup จะแสดงพื้นที่ที่สามารถลดได้จากการลบไฟล์ Windows Update เก่า ในตัวอย่างของผมคือ 324 MB กด OK เพื่อเริ่มทำความสะอาด

หลังเสร็จสิ้นการทำความสะอาด Component Store ด้วย DISM ตรวจสอบว่าปลอดพื้นที่ดิสก์ได้เท่าไหร่

นอกจากนี้ Windows 10/Windows Server 2016 Task Scheduler มีงานบำรุงรักษาอัตโนมัติพิเศษที่เพิ่มประสิทธิภาพและล้าง WinSxS Folder เป็นประจำ (การดำเนินการเดียวกับ DISM กับพารามิเตอร์ StartComponentCleanup) งาน StartComponentCleanup นี้อยู่ภายใต้ส่วน \Microsoft\Windows\Servicing ของ taskschd.msc งานนี้รันในพื้นหลังและลบเวอร์ชัน Component ที่เก่ากว่า 30 วันซึ่งถูกแทนที่ด้วยไฟล์ใหม่

สามารถเริ่มงานนี้ด้วยตนเองได้:

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

ลบ Roles และ Features ที่ไม่ได้ใช้จาก Windows 10/Windows Server

ในบทความก่อนหน้า เราได้กล่าวถึงแนวคิด Features on Demand บน Windows ซึ่งอนุญาตให้ลบไฟล์ Binary ของ Roles ที่ไม่ได้ใช้ออกจากโฟลเดอร์ WinSxS สามารถลบ Roles และ Features Binaries บน Windows Server โดยใช้ Cmdlet PowerShell Uninstall-WindowsFeature

Windows 10 ไม่มี Cmdlet Uninstall-WindowsFeature ต้องใช้ DISM.exe เพื่อลบ Features จาก Windows Image

หมายเหตุ. DISM ไม่เหมือน Cmdlet PowerShell Uninstall-WindowsFeature ไม่ลบ Dependent Features

รายการ Features ทั้งหมดที่มีใน Windows 10 Image สามารถรับได้ด้วยคำสั่ง:
DISM.exe /Online /English /Get-Features /Format:Table

เพื่อลบ ฟีเจอร์ TelnetClient จาก Windows Image (จากโฟลเดอร์ WinSxS) ให้รันคำสั่ง:
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove

หากแสดงรายการ On-Demand Features ทั้งหมดที่มีใน Windows จะเห็นว่าสถานะ Component เปลี่ยนเป็น Disabled with Payload Removed

ดังนั้น Windows อนุญาตให้ลดขนาดโฟลเดอร์ WinSxS อย่างมีนัยสำคัญโดยการลบ Components ที่ไม่ได้ใช้ออกจากดิสก์ สิ่งเดียวคือวิธีทำความสะอาดนี้เหมาะสมเฉพาะกับผู้ใช้ขั้นสูง ที่คุ้นเคยกับ Features ของ Windows 10 และวัตถุประสงค์ของพวกมัน

วิธีเปิดใช้งาน NTFS Compress บนโฟลเดอร์ WinSxS บน Windows 10

อีกวิธีหนึ่งในการลดขนาดไดเรกทอรี WinSxS บน Windows 10 คือการบีบอัดเนื้อหาไดเรกทอรีที่ระดับระบบไฟล์ NTFS

หมายเหตุ. เช่นเดียวกับการแทรกแซงระบบที่ไม่มาตรฐานใดๆ ขอแนะนำให้สร้าง Full Backup ของ Windows 10 Image ของคุณก่อน
  1. เปิด Command Prompt เป็น Administrator
  2. หยุดและปิดใช้งานบริการ Windows Installer และ Windows Module Installer:
    sc stop msiserver
    sc stop TrustedInstaller
    sc config msiserver start= disabled
    sc config TrustedInstaller start= disabled
  3. สำรอง Access Control Lists (ACLs) ที่กำหนดให้ไฟล์และโฟลเดอร์ในไดเรกทอรี WinSxS โดยใช้เครื่องมือ icacls ในตัว ไฟล์สำรอง ACL เป็นไฟล์ข้อความธรรมดาที่แสดงรายการไฟล์และไดเรกทอรีทั้งหมดและสิทธิ์ NTFS ที่กำหนดให้ (ไฟล์นี้จะต้องใช้ภายหลังเพื่อกู้คืน ACLs ต้นฉบับ):
    icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t
  4. ตั้งค่าตนเองเป็น Owner ของโฟลเดอร์ WinSxS และ Subfolders ทั้งหมด:
    takeown /f "%WINDIR%\WinSxS" /r
  5. ให้สิทธิ์ Full Control แก่บัญชีของคุณบนไดเรกทอรี WinSxS:
    icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t
  6. ตอนนี้สามารถบีบอัดไฟล์ในไดเรกทอรี WinSxS โดยใช้คำสั่ง compact เนื่องจากบางไฟล์อาจถูกใช้โดย Windows ต้องระบุตัวเลือก /i มิฉะนั้นการบีบอัดจะหยุดที่ไฟล์ที่ล็อกไว้ก่อน (ใน Windows 10 สามารถใช้การบีบอัด LZX ขั้นสูงได้):
    compact /s:"%WINDIR%\WinSxS" /c /a /i *
  7. กู้คืน Owner ของไดเรกทอรี WinSxS กลับเป็น TrustedInstaller:
    icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
  8. กู้คืน ACLs ต้นฉบับสำหรับรายการในโฟลเดอร์ WinSxS โดยใช้ไฟล์สำรอง ACL ที่สร้างไว้ก่อนหน้า:
    icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"
  9. กู้คืน Startup Type เริ่มต้นสำหรับ Windows Installer และ Windows Module Installer Services:
    sc config msiserver start= demand
    sc config TrustedInstaller start= demand

ตอนนี้ตรวจสอบขนาดปัจจุบันของโฟลเดอร์ WinSxS:

ตามที่เห็น ในตัวอย่างของเรา ขนาดโฟลเดอร์ WinSxS หลังบีบอัดลดจาก 9.4 GB เป็น 6.5 GB (ประมาณหนึ่งในสาม) ไม่แย่เลย โดยเฉพาะสำหรับ SSD ขนาดเล็ก

คำสั่งเหล่านี้สามารถรันแยกกันได้ (ติดตามผลลัพธ์แต่ละขั้นตอนง่ายกว่า) หรือรวมในไฟล์สคริปต์เดียว หากรัน จะเริ่มกระบวนการบีบอัดที่อธิบายไว้สำหรับรายการในโฟลเดอร์ WinSxS สามารถดาวน์โหลดไฟล์ Batch สำเร็จรูปเพื่อเปิดใช้งาน NTFS Compression บน WinSxS ได้ที่: winsxs_ntfs_compress.bat

สามารถใช้สคริปต์นี้เป็นประจำ เพราะไฟล์ที่ไม่ได้บีบอัดจะปรากฏในโฟลเดอร์ WinSxS หลังจากติดตั้ง Windows Updates หรือ Apps ใหม่

สิ่งที่อาจได้รับผลกระทบจากการบีบอัดโฟลเดอร์ WinSxS? Windows ทำงานกับไฟล์ที่บีบอัดอย่างโปร่งใส อย่างไรก็ตาม เมื่อประมวลผลไฟล์ดังกล่าว อาจใช้ CPU Time เพิ่มเติมในการ Decompress/Compress อาจทำให้ช้าลงเล็กน้อยตอนติดตั้ง Windows Components หรือ Updates อย่างไรก็ตาม บน CPU สมัยใหม่ การดำเนินการบีบอัด/แตกไฟล์ ทำงานเกือบทันที ผู้ใช้จึงอาจไม่สังเกตผลกระทบต่อประสิทธิภาพจริง