
我面臨一個問題,我的 Windows 7C:\Windows\winsxs
資料夾變得非常大(20GB),我想使用資源管理器內建工具來壓縮它(資料夾屬性 -> 進階 -> 壓縮),但你知道,Windows 實際上不允許我這樣做,因為這些winsxs檔案受到名為的特殊用戶的保護可信任安裝程式。所以我想在Linux下做。網路搜尋顯示了一些關於ntfs-3g的提示,但我找不到進行NTFS資料夾壓縮的具體範例,所以我想在這裡詢問。
假設我啟動到Knoppix Linux和Windows的C:分割區已經掛載到了/mnt/winc
,那我應該要用什麼指令來達到目的。
或者有沒有辦法在沒有Linux環境的情況下實現呢?
答案1
這在沒有 Linux 的情況下也是可能的,我總是在創建新安裝後這樣做。我剛剛安裝了 Windows 10 Enterprise 21H2,壓縮後大小為 4.6GB。
我的方法是完成安裝,然後重新啟動到安裝媒體(USB 記憶棒或 DVD)。載入後,您不必繼續執行實際的安裝對話框,除非您嘗試壓縮需要驅動程式的驅動器,然後再提供給安裝程式。如果您這樣做,您就會知道,因為這樣您就已經在初始安裝期間手動提供了它。如果這對您來說沒有意義,請忽略這部分並跳到下一段。如果您需要執行此操作,只需繼續執行安裝步驟,直到選擇要安裝到的分割區(您應該在其中載入驅動程式)。
在任一情況下,按Shift+F10
可調出命令提示字元。現在找出哪個磁碟機是安裝磁碟機。它可能不會是 C:,因為它很可能是安裝程式驅動器。您必須從第一個驅動器開始並列出其內容,直到您找到正確的驅動器。也就是說,鍵入C:
並輸入,然後dir
輸入,並檢查輸出。然後繼續執行D:
、E:
等操作,直到找到為止。您要尋找的磁碟機將包含「Users」、「Windows」和「Program Files」資料夾等,如果您的電腦上安裝了多個 Windows,您可以查看報表的可用空間開車去猜是哪一個。在我最新的安裝中,Windows 磁碟機是磁碟機 F。
確定驅動器後,您可以使用compact.exe
壓縮驅動器。您不必擔心意外壓縮不安全的文件,因為compact
它會自動處理這個問題。例如,它不會壓縮引導程式或頁面檔案。現在,最快的方法也是節省空間,這相當於使用資源管理器(除了在此命令提示字元中,您將壓縮所有可以壓縮的檔案)。確保您已導航至要壓縮的磁碟機(在我最新的情況下為 F:),然後輸入以下內容:
compact /c /i /s:\
/c
只是意味著壓縮。/i
是忽略錯誤。您會收到錯誤,例如您無法Documents and Settings
在 Windows 10 中進行壓縮,因為它實際上不是資料夾,而是指向Users
.如果沒有/i
,compact
將在出現此類錯誤後停止。/s:\
意味著處理目錄中的所有內容\
(您所在的位置,即磁碟機的根目錄)及其中的所有子目錄。
如前所述,這種方法的工作方式與在資源管理器中的工作方式相同,只是它會壓縮資源管理器不會壓縮的更多文件,因為您無權訪問它們和/或它們正在使用。在我目前的安裝中,壓縮比為 1.7:1。
但是,如果您想在節省空間方面更加極端,那麼有一個標誌,/exe
它告訴compact
您使用更有效的壓縮,該壓縮適用於“一次寫入,經常讀取”類型的文件,通常是可執行文件(例如explorer.exe
),因此姓名。它會壓縮全部不過,它可以節省所有文件的空間,而不僅僅是可執行檔。最有效的演算法是lzx
,當應用於我的安裝時,產生的壓縮比為2.4:1(實際上,我想說2.7:1,但我不太記得了,但它比預設值要有效得多) 。不過,它需要您運行兩次 - 這些:
compact /c /i /f /exe:lzx /s:\
進而:
compact /c /i /s:\
好吧,你可能會問為什麼要跑兩次。這是因為當您使用該/exe
標誌時,您將告訴compact
您使用 NTFS 預設不會應用的非標準壓縮演算法 - 您必須執行此命令才能使用該演算法進行壓縮。透過擴展,它因此拒絕將文件夾標記為壓縮,因為它無法自動使用 壓縮新文件lzx
,因此,雖然第一個compact
命令非常有效地壓縮驅動器上的所有文件,但它使所有文件夾沒有壓縮標誌,這意味著任何新的或更改的檔案也不會被壓縮。
請注意額外添加的/f
標誌。如果磁碟機上已經有一些壓縮檔案(也許您壓縮了文件資料夾或類似的東西),這將強制使用演算法重新壓縮已經壓縮的檔案lzx
。
第二個命令基本上與第一個命令相同,但是因為我們不使用/f
強制壓縮已經壓縮的任何內容,所以這裡的效果是它將跳過我們剛剛壓縮的所有文件lzx
,但將所有文件夾標記為壓縮,以便將來新的和修改的檔案也將自動壓縮。
簡而言之,第一個命令非常有效地壓縮所有文件,第二個命令將所有資料夾標記為壓縮的,以便將來的文件也被壓縮。
我應該指出,首先,並非所有 NTFS 實作都支援這種類型的壓縮。例如,在我的 Linux Mint 20.2 Live Stick 中,這樣壓縮的檔案根本不會被讀取。 AFAICT,對最新版本的開源ntfs-3g
驅動程式存在讀取支持,但在您的發行版中可能無法存取。我也不知道新的ntfs3
原生 Linux 驅動程式是否支援它。在 Microsoft 方面,它似乎也僅適用於 Windows 10 及更高版本,因此您可能無法從 Windows 7 或 8 讀取此類磁碟機。其次,由於 Windows 不會使用這些更有效的演算法來自動壓縮新的和修改的文件,因此請記住,將來修改的任何壓縮文件都將使用效率較低的預設演算法重新壓縮。不過,如果您使用的是 Windows 10 或 Windows 11,一切都會正常。這只是值得考慮的。
希望這可以幫助 :)
PS:這當然可以在任何現有安裝上隨時完成,我在這裡只是提到新安裝,因為在新安裝後立即執行此操作已成為我的習慣。
編輯:在我完成我的這個新系統的設定後進行了一些更新,現在在啟用 BitLocker 之前從 Windows 安裝程式重新運行了所有這些內容。這裡的方法同樣是/lzx:exe
先使用,然後進行第二次運行以標記所有資料夾以進行壓縮。這效果很好(壓縮後在系統驅動器上節省了4 GB 的額外空間(我首先使用了預設壓縮演算法,因為我希望能夠使用Linux 修改檔案系統,所以與預設壓縮演算法相比,這是4 GB 的額外節省) )),但我很困惑,因為我在 Windows 資源管理器中註意到很多文件看起來沒有壓縮。也就是說,它們不是彩色的(我在視圖設定中啟用了“以彩色顯示加密或壓縮的 NTFS 檔案”,並且許多檔案不是藍色的)。我在管理命令提示字元中搞亂了compact
,無法更改它。然後我發現這實際上只是典型的 Microsoft 無能 - Windows 資源管理器本身並不理解這些新的EXE
壓縮演算法,因此它不會將檔案顯示為藍色,如果您檢查它們的屬性,它也不會在高級壓縮盒。但是,它會顯示常規大小與磁碟大小的正確大小,因此「已使用空間」數量會更低。傑布斯! XD
答案2
步驟是:
- 標記要壓縮的目錄
- 將檔案移動到臨時位置
cp -a
檔案返回原始目的地以觸發壓縮
(預設情況下ntfs-3g啟用安裝選項compression
.)
# Mark a directory for compression
setfattr -h -v 0x00000800 -n system.ntfs_attrib_be directory-name
# On small-endian computers when above is not possible
setfattr -h -v 0x00080000 -n system.ntfs_attrib directory-name
但請注意注意事項(來自NTFS-3G頁):
設定掛載選項後
compression
,在標記為壓縮的目錄中建立的檔案將被建立為壓縮檔案。當它們被移動(透過重命名)到同一卷中的常規目錄時,它們保持壓縮狀態,並且在移動後附加到它們的資料被壓縮。相反,在標記為壓縮之前目錄中存在的檔案以及從未標記為壓縮的目錄移動的檔案不會被壓縮。複製壓縮檔案總是會對其進行解壓縮,如果目標目錄被標記為壓縮,則會再次壓縮它。
對於新卷,請查看 -C
中的選項mkfs.ntfs
。