Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách dọn dẹp và nén thư mục WinSxS trên Windows 10/Windows Server

Trong bài viết này chúng ta sẽ nói về thư mục WinSxS trong Windows, lý do sự tăng trưởng liên tục của nó và cách dọn dẹp nó. Thư mục C:\Windows\WinSxS là kho lưu trữ thành phần Windows. Thư mục này chứa DLL, file nhị phân và XML cần thiết cho cài đặt và vận hành các vai trò hoặc tính năng Windows khác nhau. Khi cài đặt bản cập nhật Windows (thường xảy ra hàng tháng), phiên bản mới của thành phần được cập nhật được cài đặt trên hệ thống, trong khi phiên bản cũ được lưu vào thư mục WinSxS (cần thiết để cung cấp tương thích và cho phép quay lại phiên bản trước của thành phần khi bạn gỡ bản cập nhật Windows).

Thư mục WinSxS tăng kích thước theo thời gian. Hơn nữa, kích thước của nó không bị giới hạn bởi bất cứ điều gì (dù thực tế kích thước thư mục WinSxS trong Windows 10 hiếm khi vượt quá 15-20 GB).

Trong bài viết này, chúng ta sẽ xem qua các cách an toàn nhất để dọn dẹp thư mục WinSxS trên Windows 10 và Windows Server 2016/2019:

  • Tối ưu hóa component store và xóa phiên bản cũ của file thành phần Windows còn lại sau khi cài đặt bản cập nhật Windows;
  • Features on Demand – cho phép bạn xóa thành phần Windows không sử dụng khỏi ổ đĩa;
  • Bật nén NTFS trên thư mục WinSxS – cách giảm kích thước thư mục WinSxS dùng nén tích hợp của hệ thống file NTFS.

Nhiều người dùng thường hỏi: có thể xóa thủ công file từ thư mục WinSxS không? Câu trả lời là chắc chắn KHÔNG! Những hành động này có thể hỏng hình ảnh Windows của bạn. Mặc dù một số lần cố xóa file từ thư mục WinSxS có thể thành công, phương pháp này không thể khuyến khích.

Cách kiểm tra kích thước thực tế của thư mục WinSxS trên Windows 10?

Cách dễ nhất để lấy kích thước hiện tại của thư mục WinSxS trên Windows là mở thuộc tính thư mục %windir%\WinSxS trong File Explorer (hoặc dùng script PowerShell). Nhưng hãy nhớ rằng hầu hết trình quản lý file (kể cả File Explorer) hiển thị kích thước thư mục WinSxS lớn hơn một chút so với dung lượng thực tế trên ổ đĩa.

Thực tế là thư mục WinSxS chứa số lượng lớn hard links (liên kết cứng) đến file hệ thống trong thư mục khác. Trình quản lý file, khi tính kích thước thư mục WinSxS, tính đến kích thước file được tham chiếu bởi hard link, nhưng điều này không chính xác.

Bạn có thể biết kích thước thực của thư mục WinSxS trên ổ đĩa dùng công cụ du từ Sysinternals:
du -v c:\windows\winSXS

Bạn cũng có thể phân tích kích thước component store (thư mục WinSxS) dùng lệnh DISM:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Deployment Image Servicing and Management tool [==========================100.0%==========================] 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. 74GB 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.

Như bạn thấy, trong trường hợp này, tôi có thể giảm kích thước thư mục WinSxS đi (1,97 + 0,44) GB.

Lệnh DISM cũng cho phép bạn kiểm tra và sửa chữa hình ảnh Windows:

DISM /Online /Cleanup-Image /RestoreHealth

Cách dọn dẹp Component Store (thư mục WinSxS) trên Windows?

Cách nhanh và dễ nhất để xóa Windows Component Store (thư mục WinSxS) là tối ưu hóa bộ nhớ với lệnh:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

Tùy chọn StartComponentCleanup DISM được hỗ trợ trên tất cả phiên bản Windows từ Windows 8 và Windows Server 2012.

Sau khi dọn dẹp xong, kiểm tra kích thước hiện tại của component store:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Trong ví dụ của tôi, điều này giảm kích thước thư mục WinSxS đi 2.4 GB.

Tùy chọn /StartComponentCleanup có thêm tùy chọn /ResetBase cho phép xóa tất cả phiên bản trước của thành phần còn lại sau khi cài đặt bản cập nhật Windows. Sau đó bạn sẽ không thể gỡ các bản cập nhật đã cài hoặc Service Pack, và nút Uninstall sẽ biến mất từ mục Uninstall an Update trong Control Panel). Để dọn dẹp phiên bản cũ của thành phần, chạy:

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

Trong Windows 7 và Windows Server 2008 R2, tùy chọn DISM bổ sung được dùng để dọn dẹp phiên bản cũ của thành phần còn lại sau khi cài đặt service pack.

DISM /online /Cleanup-Image /spsuperseded

Bạn cũng có thể xóa file bản cập nhật cũ dùng wizard "Disk Cleanup":

  1. Chạy lệnh cleanmgr với quyền administrator;
  2. Chọn ổ đĩa và trong cửa sổ tiếp theo, nhấn nút "Clean up system files";
  3. Sau đó chọn tùy chọn "Windows update cleanup". Công cụ Disk Cleanup sẽ hiển thị dung lượng bạn có thể giải phóng bằng cách xóa file bản cập nhật Windows cũ. Trong ví dụ của tôi, đây là 324 MB. Nhấn OK để bắt đầu dọn dẹp.

Sau khi dọn dẹp component store xong bằng DISM, kiểm tra xem dung lượng ổ đĩa đã được giải phóng bao nhiêu.

Ngoài ra, Windows 10/Windows Server 2016 Task Scheduler có tác vụ bảo trì tự động đặc biệt định kỳ tối ưu và dọn dẹp thư mục WinSxS (cùng thao tác với DISM tham số StartComponentCleanup). Tác vụ StartComponentCleanup này nằm ở phần \Microsoft\Windows\Servicing của taskschd.msc. Tác vụ này chạy nền và tự động xóa phiên bản thành phần cũ hơn 30 ngày đã được thay thế bởi file mới hơn.

Bạn có thể chạy tác vụ này thủ công như sau:

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

Xóa Roles và Features không dùng khỏi Windows 10/Windows Server

Trong bài viết trước, chúng tôi đã nói về khái niệm Features on Demand trên Windows, cho phép xóa file nhị phân của vai trò không dùng từ thư mục WinSxS. Bạn có thể xóa file nhị phân vai trò và tính năng trên Windows Server dùng cmdlet PowerShell Uninstall-WindowsFeature.

Windows 10 không có cmdlet Uninstall-WindowsFeature, và bạn phải dùng DISM.exe để xóa tính năng từ hình ảnh Windows.

Lưu ý rằng DISM, không giống cmdlet PowerShell Uninstall-WindowsFeature, không xóa tính năng phụ thuộc.

Danh sách đầy đủ tính năng có sẵn trong hình ảnh Windows 10 có thể lấy bằng lệnh:
DISM.exe /Online /English /Get-Features /Format:Table

Để xóa, ví dụ, tính năng TelnetClient từ hình ảnh Windows (từ thư mục WinSxS), chạy lệnh:
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove

Nếu bạn hiển thị danh sách tất cả tính năng on-demand có sẵn trong Windows, bạn sẽ thấy trạng thái thành phần đã thay thành Disabled with Payload Removed.

Vì vậy, Windows cho phép giảm đáng kể kích thước thư mục WinSxS bằng cách xóa thành phần không dùng khỏi ổ đĩa. Chỉ có điều phương pháp dọn dẹp này chỉ phù hợp cho người dùng nâng cao, những người quen thuộc với tính năng Windows 10 và mục đích của chúng.

Cách bật nén NTFS trên thư mục WinSxS trên Windows 10?

Cách khác để giảm kích thước thư mục WinSxS trên Windows 10 là nén nội dung thư mục ở cấp độ hệ thống file NTFS.

Lưu ý. Như trường hợp bất kỳ can thiệp không tiêu chuẩn vào cấu hình hệ thống, bạn được khuyến khích mạnh mẽ tạo bản sao lưu đầy đủ hình ảnh Windows 10 của bạn.

  1. Mở command prompt với quyền administrator;
  2. Dừng và vô hiệu hóa dịch vụ Windows Installer và Windows Module Installer:
    sc stop msiserver
    sc stop TrustedInstaller
    sc config msiserver start= disabled
    sc config TrustedInstaller start= disabled
  3. Sao lưu Access Control Lists (ACLs) được gán cho file và thư mục trong thư mục WinSxS dùng công cụ tích hợp icacls. Bản sao ACL là file văn bản thuần túy liệt kê tất cả file và thư mục và quyền NTFS được gán cho chúng (sau này file này sẽ cần để khôi phục ACL gốc):
    icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t
  4. Gán chính bạn làm chủ sở hữu thư mục WinSxS và tất cả thư mục con:
    takeown /f "%WINDIR%\WinSxS" /r
  5. Cấp quyền điều khiển đầy đủ cho tài khoản của bạn trên thư mục WinSxS:
    icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t
  6. Bây giờ bạn có thể nén file trong thư mục WinSxS dùng lệnh compact. Vì một số file có thể được dùng bởi Windows, bạn cần chỉ định tùy chọn /i. Ngược lại, nén sẽ dừng ở file bị khóa đầu tiên (trong Windows 10, bạn có thể dùng nén LZX nâng cao hơn):
    compact /s:"%WINDIR%\WinSxS" /c /a /i *
  7. Khôi phục chủ sở hữu thư mục WinSxS về TrustedInstaller:
    icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
  8. Khôi phục ACL gốc cho các mục trong thư mục WinSxS dùng file backup ACL bạn tạo trước đó:
    icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"
  9. Khôi phục kiểu khởi động mặc định cho dịch vụ Windows Installer và Windows Module Installer:
    sc config msiserver start= demand
    sc config TrustedInstaller start= demand

Bây giờ kiểm tra kích thước hiện tại của thư mục WinSxS:

Như bạn thấy, trong ví dụ của chúng tôi kích thước thư mục WinSxS sau nén đã giảm từ 9.4GB xuống 6.5GB (khoảng một phần ba). Không tệ, đặc biệt cho ổ SSD dung lượng nhỏ.

Các lệnh này có thể chạy riêng lẻ (khi đó dễ dàng theo dõi kết quả của từng lệnh) hoặc dùng trong một file script duy nhất. Nếu bạn chạy nó, quy trình nén cho các mục trong thư mục WinSxS sẽ bắt đầu. Bạn có thể tải file batch sẵn sàng để bật nén NTFS trên WinSxS ở đây: winsxs_ntfs_compress.bat

Bạn có thể dùng script này định kỳ vì file chưa nén mới sẽ xuất hiện trong thư mục WinSxS sau khi bạn cài đặt bản cập nhật Windows mới hoặc ứng dụng.

Điều gì có thể bị ảnh hưởng bởi việc nén thư mục WinSxS? Windows làm việc minh bạch với file nén. Tuy nhiên, khi xử lý các file như vậy, có thể tốn thêm thời gian CPU để giải nén/nén chúng. Điều này có thể gây chậm trễ nhẹ khi cài đặt thành phần hoặc bản cập nhật Windows. Tuy nhiên, trên CPU hiện đại, thao tác nén/giải nén file được thực hiện gần như tức thì, nên người dùng có thể không nhận ra tác động thực sự đến hiệu suất.