題 為什麼對C盤進行碎片整理會將可用磁盤空間增加10 GB?


我用了 Defraggler 對我的100 GB C:\驅動器上的可用空間進行碎片整理,該驅動器已滿85 GB。碎片整理後,驅動器只顯示75 GB。 10 GB的可用空間是如何神奇地出現的?我丟失了任何數據嗎?

我在進行碎片整理之前進行了磁盤清理,並且我的垃圾箱只有大約11 MB,因此不能因為清理臨時文件。請注意,我對“自由空間”進行了碎片整理,這意味著它應該重新排列空塊以使其連續。


26
2017-07-07 19:35


起源


可能是與陰影副本的交互:例如參見( piriform.com/docs/defraggler/technical-information/... ) - horatio
此外,Defraggler還可以選擇在進行碎片整理之前清空回收站。 - oKtosiTe


答案:


可能發生的是碎片整理操作迫使Windows拋出一些系統恢復快照。在Windows正常使用的基礎上,元數據開銷是驅動器空間的10%,這是碎片化的病態案例。即便如此,我也不確定這是可能的。

我在Defraggler的版本歷史或文檔中沒有看到任何內容,表明它能夠正確地對文件進行碎片整理以防止清除卷影副本。事實上, 這個帖子 來自Defraggler的支持論壇表明他們知道它正在發生(有一個帖子來自一個標題為“官方Piriform Bug Fixer”的董事會管理員),但沒有說明他們是否要修復它。

對捲進行碎片整理時,卷影副本可能會丟失:發生這種情況的原因是默認情況下,VSS默認使用16 KB群集,而大多數NTFS卷使用4 KB群集進行格式化。因此,如果碎片整理操作移動的數據不是16 KB群集的倍數(或移動的“距離”不是16 KB的倍數),那麼VSS會將其作為更改進行跟踪,並可能清除所有快照。

MSDN:碎片整理文件

如果可能,將數據以相對於彼此對齊的塊移動,以16千字節(KB)為增量。這樣可以在啟用卷影副本時減少寫入時寫入開銷,因為在發生以下情況時,卷影副本空間會增加並且性能會降低:

  • 移動請求塊大小小於或等於16 KB。
  • 移動增量不是16 KB的增量。

Vista內置碎片整理不會這樣做

對用戶來說不明顯的一個變化是碎片整理期間的捲影副本優化。 Defrag具有特殊的啟發式功能,可以最小化寫入時復制活動和卷影副本存儲區域消耗的方式移動文件塊。如果沒有此優化,碎片整理過程將加速刪除舊的捲影副本。


14
2017-07-07 21:20



我不知道這個答案的快照部分,但我不相信碎片整理釋放了空間。碎片整理可以清空您的回收站嗎?在沒有將小文件組合到單個集群中的文件系統上,我無法看到碎片整理將如何導致這樣的空間增益。我可以想像你有10G的空間可以在這麼小的區塊中使用Windows而不計算它,但我之前沒有聽說過這種行為。 - Slartibartfast
@Slartibartfast:如果應用程序編寫不正確,則會出現問題。現在我不在手機上,我會用更多證據更新我的答案。 :-) - afrazier
@afrazier - 雖然我認為ThouArtNotDoc的更新答案是一個更好的一般答案。我必須同意,影子副本可能在OP的情況下起作用。我也發現了這一點:“如果您計劃對啟用了卷影副本的捲進行碎片整理,建議您使用16 KB或更大的群集(或分配單元)大小。如果不這樣做,則會導致更改的數量通過碎片整理過程可以使陰影副本的刪除速度超過預期。“ - MS:“設計影子復制策略” technet.microsoft.com/en-us/library/cc728305(WS.10).aspx - Ƭᴇcʜιᴇ007
@afrazier:確認。以前的所有系統還原點都消失了。在配置中,我將12%設置為卷影副本允許的最大空間,因此10 GB並非不合理。另一方面,我剛剛安裝了一個9 GB的遊戲,它可以簡單地覆蓋以前的恢復點。 - goweon
@firebat:系統還原使用的空間用於跟踪對現有(快照)文件的更改,而不是新文件。安裝新遊戲不會影響系統還原空間,但可以使用大型補丁。 - afrazier


必須在某處跟踪每個片段。這需要存儲空間(在文件系統的管道內,而不是你想要直接訪問的東西)。

例如:假設您有一個包含1000個片段的文件。因此你的 文件 通過隨機塊的集合存儲..而不是在單個連續塊中。這意味著碎片文件在文件系統的管道中需要多1000倍的存儲空間,如果僅用於存儲每個片段的地址。文件系統管道將小字典/數據庫/映射/表/列表保存到文件的每個片段的位置。因此,對於文件系統管道,與1000個片段指針的列表相比,存儲單個片段指針的列表不需要太多空間。

但是,嘿,也許我錯了......

編輯: 從這裡支持信息

當非駐留數據流也是如此   分散很多,使其有效   分配圖不能完全適合   在MFT記錄內,分配   地圖也可以存儲為   非常駐流,只有一小部分   駐留流包含   間接分配映射到   有效的非居民分配圖   非駐留數據流的。

翻譯:如果你有嚴重的碎片,文件系統管道的一般情況假設將不適用。因此,FS必須採取措施來適應碎片並最終耗費額外的存儲空間,只是為了管理碎片。完全是我從第一位的猜測。


編輯: 鑑於上述情況,僅僅因為文件碎片丟失10GB仍然是瘋狂的。我打賭,在進行碎片整理時,您會遇到一些自動糾正的常見文件系統損壞。我想的不僅是你有大量的碎片,還有部分刪除的文件佔用了存儲空間。從碎片整理(或碎片整理之前的一系列scandisk)看到scandisk日誌會很不錯


23
2017-07-07 19:40



PS - 一定是一些核心碎片。 - James T Snell
我不知道碎片整理後存儲消耗是否增加的正當理由。但是我已經多次注意到了這一點,如果你有一個相當老的系統還原點(如果你經常運行磁盤清理實用程序通常不會發生這種情況),然後在C驅動器上收集大量數據後進行碎片整理,內存消耗從不知名的地方消失,但如果刪除該恢復點,它將清除佔用的存儲空間。從技術上講,它可能沒有任何意義,但發生在我身上很多次,因為加班,恢復點會佔用記憶。 - Kushal
Dunno,10G似乎很多,但IME,非常完整的磁盤往往會碎片化很多 許多 比碎片較少的磁盤更快。如果他之前達到> 85%(因為他的probs意味著85GiB而不是100GB磁盤),並且在此期間可能更充分,他可能會有非常高的碎片,以及隨之而來的可怕性能。 - Bernd Haug
除非該卷上的塊大小非常高,否則我個人無法相信僅通過不跟踪片段就可以釋放10GB的空間。使用4096k的塊大小並假設每個片段需要一個完整的塊來跟踪(這是錯誤的),這是需要的 250萬 以前跟踪的碎片,但不再釋放那麼多空間。 - CarlF
@Doc - 指針不會佔用整個塊。如果(很可能)每個分配塊都是多個扇區,則需要更少的指針,因為跟踪數據的塊越少 - 因此跟踪所有分段的最大可能開銷將遠低於3%。我不知道NTFS的具體細節,但是對於(相對低效的)FAT文件系統,你仍然無法獲得FAT命名後的文件分配表(那些片段跟踪指針)的10%開銷。 - Steve314