題 在HDD或SSD上留出多少空間?


在非正式(即新聞)技術出版社以及在線技術博客和論壇中,人們常常遇到軼事建議,即在硬盤驅動器或固態硬盤上留出一些空間。給出了各種原因,或者有時沒有理由。因此,這些主張雖然在實踐中可能是合理的,但卻有一種神秘的氣氛。例如:

  • 一旦你的磁盤滿80%,你應該考慮它們 充分,你應該立即刪除或升級。如果他們打了 90% 你應該考慮將自己的褲子放在真正的火上,然後用適量的即時反應來彌補這一點。 (資源。)

  • 為了使垃圾收集保持最高效率,傳統建議的目標是將20%至30%的驅動器空置。 (資源。)

  • 我被告知我應該在HD上留出大約20%的免費以獲得更好的性能,當HD接近滿時,HD會真的減慢速度。 (資源。)

  • 您應該為交換文件和臨時文件留出空間。我目前免費留下33%的百分比,並發誓不要低於10GB的免費硬盤空間。 (資源。)

  • 我會說15%,但是現在有多大的硬盤驅動器,只要你有足夠的臨時文件和交換文件,從技術上講你是安全的。 (資源。)

  • 我建議在Windows上使用10%以上,因為如果在運行時驅動器上沒有那麼多空閒,則無法運行碎片整理程序。 (資源。)

  • 您通常希望留出大約10%的空餘以避免碎片(資源。)

  • 如果您的驅動器持續超過75%或80%已滿,則升級到更大的SSD值得考慮。 (資源。)

是否有任何研究,最好是在同行評審期刊上發表,研究特定操作系統,文件系統和存儲技術組合所需的可用空間百分比或絕對數量(例如磁盤與固態)? (理想情況下,此類研究還將解釋不超過特定使用空間量的原因,例如為了防止系統耗盡 交換空間,或避免性能損失。)

如果你知道任何這樣的研究,如果你能回答一個鏈接,加上一個簡短的研究結果,我將不勝感激。謝謝!


103
2017-10-04 11:43


起源


我不知道研究結果,但我知道自己的發現。如果對其所有文件進行碎片整理,則幾乎完整的驅動器上不會有性能損失(除了稍微慢一點的目錄訪問)。問題在於許多碎片整理程序會優化文件碎片,但在此過程中會使可用空間更加碎片化,因此新文件會立即碎片化。隨著光盤變滿,自由空間碎片變得更加糟糕。 - AFH
@Abdul - 關於交換文件大小的許多建議都是誤導性的。關鍵要求是為所有想要一次激活的程序提供足夠的內存(實際和虛擬),因此RAM越少,所需的交換就越多。因此,取出一定比例的RAM大小(通常建議加倍)是錯誤的,除了作為任意初始大小,直到你發現你真正需要多少。找出系統最繁忙時使用了多少內存,然後加倍並減去RAM大小:你 決不 想要耗盡交換空間。 - AFH
我認為這實際上取決於你使用驅動器的是什麼。如果你需要在大段中添加和刪除硬盤驅動器中的大量數據,我會根據你需要移動的文件大小留下相當數量的可用空間。 10-20%似乎是一個合理的一般性建議,但除了個人經驗之外,我沒有什麼可以支持的。 - David
@EugenRieck,見Jon Turney的“同行節目結束“(新科學家,1990年9月22日)。眾所周知,同行評審並不完美,但幾乎沒有更好的選擇。即使是平庸和錯誤的論文也應該更多 證偽 而不是模糊,在博客或論壇帖子中傳遞聲明,使其成為理解的更好起點。 - sampablokuper
@EugenRieck:“同行評議貨幣製造者“;有些出版商是 更道德 比 其他。 (如果你想知道,是的,我知道悲劇 美國訴Aaron Swartz案。)“這兩個世界沒有重疊。“幸運的是,他們確實這樣做了。在大學和其他地方,我看到系統管理員和學者都同樣受益於SE和PR。請讓我們繼續關注主題,謝謝:) - sampablokuper


答案:


是否有任何研究,最好發表在同行評審的期刊上[...]?

為此,必須回溯20年以上,系統管理或其他方面。這是一個熱門話題,至少在30多年前的個人計算機和工作站操作系統領域; BSD人員開發Berkeley Fast FileSystem的時候,微軟和IBM正在開發高性能文件系統。

它的創作者的文獻都討論了這些文件系統的組織方式 塊分配策略嘗試使連續的文件塊連續,從而產生更好的性能。您可以在當前有關該主題的文章中找到對此的討論,以及留給分配塊的可用空間的數量和位置影響塊放置和性能的事實。

例如,從Berkeley FFS的塊分配算法的描述中可以明顯看出,如果當前和次級柱面組中沒有自由空間,則算法因此達到第四級回退(“應用窮舉搜索”對於所有柱面組“)分配盤塊的性能將受到損害,因為文件的碎片也會受到影響(因此讀取性能)。

正是這些和類似的分析(這些遠遠不是旨在改進當時文件系統設計的佈局策略的唯一文件系統設計)是過去30年所獲得的智慧所建立的。

例如:原始論文中的格言,即FFS卷保持不到90%已滿,以免性能受損,這是基於創作者的實驗,即使在本世紀發布的Unix文件系統的書籍中也可以不加批判地重複 (例如Pate2003 p.216)。很少有人質疑這一點,儘管Amir H. Majidimehr實際上在上個世紀做過,並說xe實際上沒有觀察到明顯的效果;尤其是因為通常的Unix機制為超級用戶保留了最終的10%,這意味著90%的完整光盤對於非超級用戶來說實際上是100%滿的 無論如何  (Majidimehr1996,第68頁)。 Bill Calkins也是如此,他認為在觀察低自由空間的性能影響之前,實際上可以用21世紀的光盤尺寸填充高達99%,因為即使1%的現代尺寸光盤也足以擁有大量未碎片化的自由空間仍然可以玩 (Calkins2002,第450頁)

後者是接受的智慧如何變得錯誤的一個例子。還有其他例子。就像SCSI和ATA的世界一樣 邏輯塊尋址 和 分區記錄 而是拋出了窗外所有仔細的計算 旋轉延遲 在BSD文件系統設計中,所以SSD的物理機制相當於拋出了可以應用於Winchester光盤的自由空間。

使用SSD,可用空間量 在整個設備上,即在光盤上的所有捲上 在他們之間,對性能和終生都有影響。而且,文件需要存儲在具有連續邏輯塊地址的塊中這一想法的基礎是由於SSD沒有旋轉盤和前端搜索這一事實而被削弱。規則再次改變。

對於SSD,實際建議的最小可用空間量 更多比傳統的10%來自溫徹斯特光盤和伯克利FFS 33年前的實驗。例如,Anand Lal Shimpi給出了25%。這必須是自由空間這一事實加劇了這種差異 整個設備而10%的數字是 在每個FFS卷中因此受一個分區程序是否知道TRIM通過分區表未分配給有效磁盤捲的所有空間的影響。

複雜性也很複雜,例如可以TRIM自由空間的TRIM感知文件系統驅動程序  光盤捲,以及SSD製造商自己的事實 已經 分配不同程度的 預留空間 對於諸如垃圾收集和磨損均衡之類的各種用途,甚至在設備(即,到主機)之外甚至都不可見。

參考書目


9
2017-10-09 14:07



沒有文本引用,“參考書目”有點無用。 - ivan_pozdeev


雖然我不能談論“同行評審期刊”發表的“研究” - 我不想依賴這些日常工作 - 但我可以談談數百種生產的現實多年來在各種操作系統下的服務器:

完整磁盤降低性能的原因有三個:

  • 自由空間飢餓:想想臨時文件,更新等。
  • 文件系統降級:如果沒有足夠的空間,大多數文件系統都能夠最佳地佈置文件
  • 硬件級別降級:沒有足夠可用空間的SSD和SMR磁盤將顯示吞吐量降低 - 甚至更糟 - 延遲增加(有時會達到許多數量級)

第一點是微不足道的,特別是因為沒有理智的生產系統會在動態擴展和縮小文件時使用交換空間。

第二點在文件系統和工作負載之間存在很大差異。對於具有混合工作負載的Windows系統,70%的閾值非常有用。對於具有少量但大文件的Linux ext4文件系統(例如視頻廣播系統),這可能高達90 +%。

第三點是硬件和固件相關,但特別是具有Sandforce控制器的SSD可以在高寫入工作負載上的自由塊擦除中退回,導致寫入延遲上升數千%。我們通常在分區級別上留出25%的空閒時間,然後觀察填充率低於80%。

建議

我意識到我提到過 如何 確保強制執行最大填充率。一些隨機的想法,沒有一個是“同行評審”(付費,偽造或真實),但都來自生產系統。

  • 使用文件系統邊界: /var 不屬於根文件系統。
  • 監測,監測,監測。如果它適合您,請使用現成的解決方案,否則解析輸出 df -h 讓警鐘響起以防萬一。這可以節省你在root fs上的30個內核,並且安裝了自動升級並在沒有autoremove選項的情況下運行。
  • 權衡fs溢出的潛在中斷與首先使其變大的成本:如果你不在嵌入式設備上,你可能只需將那些4G加倍為root。

49
2017-10-04 11:55



這很有用:它比典型的軼事更詳細,並且具有更強的解釋力。我相應地投了贊成票。但我真的想要更堅實的證據而不僅僅是“互聯網上有人說這是他們的經歷”。 - sampablokuper
我喜歡在閱讀這個答案時思考,一個重要的注意事項是沒有“最終所有”的答案,並且您可以通過思考每個用例找到您正在尋找的更多細節。當Eugen列出了重要進程可能使用的最後可用空間時,我當然明白如何更好地解決問題。 - Pysis
由於系統性癌症已經吃掉了大多數發行版,因此第一點並非微不足道。 /var 填滿,你的服務器崩潰了。 - chrylis
Eugen Rieck - 我不想說,但你的答案是關於a)你做了什麼;和b)為什麼它有用。我沒有看到任何針對相關研究的指示,例如如果你在Windows系統上填寫超過70%會發生什麼。請注意,最初的問題是關於實際(不一定是同行評審)的研究。 - Ott Toomet
@sampablokuper為您提供的堅實建議:學術優先級與日常運營優先級大不相同。這就是為什麼你的大學學位並沒有真正為你準備這個問題。學者們很少關心這些系統的日常實際問題。始終檢查您的信息是否合理,但除此之外,請相信那些真正成功運行這些系統的人在天空紙上的某個餡餅。您還可以擁有眾包來獲取您的信息,從而大大降低您獲取垃圾信息的可能性。 - jpmc26


是否已對任何特定操作系統,文件系統和存儲技術組合所需的可用空間百分比或絕對數量進行了研究......?

在20年的系統管理中,我從未遇到過詳細說明各種配置的自由空間要求的研究。我懷疑這是因為計算機配置如此多樣化,因為可能的系統配置數量太多而難以做到。

要確定係統需要多少可用空間,必須考慮兩個變量:

  1. 防止不需要的行為所需的最小空間,它本身可能有流暢的定義。

    請注意,僅通過此定義來定義所需的自由空間是無益的,因為這相當於說可以安全地將80英里/小時的速度推向磚牆,直到與之碰撞為止。

  2. 消耗的速度, 這需要保留額外的可變空間量,以免在管理員有時間做出反應之前系統降級。

操作系統,文件系統,底層存儲架構以及應用程序行為,虛擬內存配置等的特定組合給希望提供確定的可用空間要求的人帶來了巨大的挑戰。

這就是為什麼那裡有那麼多“建議”的建議。您會注意到他們中的許多人圍繞特定配置提出建議。例如,“如果您的SSD在接近容量時會遇到性能問題,請保持20%以上的可用空間。”

因為這個問題沒有簡單的答案,正確的識別方法 您的 系統的最小可用空間要求是根據系統的特定配置考慮各種通用建議,然後設置閾值,監控它,並願意根據需要進行調整。

或者你可以保持至少20%的可用空間。 除非你有一個42 TB的RAID 6卷,由SSD和傳統硬盤以及預先分配的交換文件組合支持......(對於嚴肅的人來說這是一個笑話。)


29
2017-10-04 12:23



謝謝你的答案:)我想談談你的一點:“由於存儲耗盡的機器的後果是不言而喻的,因此沒有必要證明建議留下一些自由空間。“不,這不是不言而喻的。它讓人們比你想像的更令人驚訝。操作系統,文件系統等的不同組合可能以不同的方式對這種情況做出反應:有些可能會發出警告;有些可能會失敗而沒有警告;誰知道?所以,如果能夠對此有更多的啟發,那就太棒了。因此,我的問題:) - sampablokuper
當我斷言它是不言而喻的 存儲耗盡機器的後果, 我不是 說明 這些後果,而是斷言 存儲耗盡的機器總會遇到後果。當我試圖在我的回答中證明,這些後果的性質以及避免它們的“最佳”可用空間量是高度配置特定的。我想人們可以嘗試將它們全部編入目錄,但我認為這會讓人感到困惑而不是有用。 - Twisty Impersonator
此外,如果你的意思是詢問特定配置如何對低磁盤空間做出反應(例如警告,性能問題,故障等),請相應地編輯您的問題。 - Twisty Impersonator
我還要添加三個額外的問題:3。根據業務的未來增長預測,最可能和最壞情況下的磁盤消耗變化是什麼,4。如果磁盤空間不足,業務成本是多少,以及5。你需要顯著增加磁盤容量嗎?我的一個客戶在他們的情況下有250TB的zfs raid現場他們需要知道幾週前的重大變化,因為它需要大約一天的時間將每個較大的磁盤添加到raid陣列中並退出較小的磁盤。 - iheggie


當然,驅動器本身(硬盤驅動器或固態硬盤)可能並不關心它使用了多少百分比,除了SSD能夠事先擦除它們的自由空間。讀取性能將完全相同,並且SSD的寫入性能可能稍差。無論如何,寫入性能在幾乎完整的驅動器上並不重要,因為沒有空間可以寫任何東西。

另一方面,您的操作系統,文件系統和應用程序將始終提供可用空間。 20年前,應用程序通常會在嘗試將文件保存到驅動器之前檢查驅動器上有多少空間。今天,應用程序創建 臨時文件 未經您的許可,通常會在他們未能這樣做時崩潰或表現不正常。

文件系統也有類似的期望。例如,NTFS為MFT保留了很大一部分磁盤,但仍然顯示這個空間是免費的。當您將NTFS磁盤填滿其容量的80%以上時,您就可以獲得 MFT碎片 這對性能有非常實際的影響。

此外,擁有可用空間確實有助於防止常規文件的碎片化。文件系統往往會避免 文件碎片 根據每個文件的大小找到合適的位置。在近填充磁盤上,它們的選項會更少,因此它們必須做出較差的選擇。

在Windows上,您還需要有足夠的磁盤空間 交換文件,必要時可以成長。如果不能,您應該期望您的應用程序被強行關閉。實際上交換空間非常小 惡化 表現。

即使您的交換具有固定大小,完全運行系統磁盤空間也可能導致系統崩潰和/或使其無法啟動(Windows和Linux等),因為操作系統希望能夠在引導期間寫入磁盤。所以,是的,達到90%的磁盤使用量應該會讓你認為你的塗料著火了。我沒有看到過計算機無法正常啟動,直到最近的下載被刪除,以給操作系統一點磁盤空間。


11
2017-10-05 10:04





對於SSD,應該留有一些空間,因為重寫率會隨之增加並對磁盤的寫入性能產生負面影響。對於所有SSD磁盤,80%已滿可能是安全值,一些最新型號即使佔用90-95%的容量也可以正常工作。

https://www.howtogeek.com/165542/why-solid-state-drives-slow-down-as-you-fill-them-up/


8
2017-10-04 11:52



Mod Up - SSD與HDD非常不同。儘管驅動器之間的確切機制不同,但SSD會將[甚至相同位置]數據寫入磁盤上的不同[空閒]位置,並使用後續垃圾收集來防止一個位置過度磨損(這稱為“磨損均衡”)。磁盤越充分 - 它就越不能做到這一點。 - Brad
另外值得注意的是,一些“較新”磁盤工作正常的原因是它們已經提供了用戶無法訪問的相當大的空白空間(尤其是“企業”SSD)。這意味著他們總是有“空閒塊”來寫入數據而沒有“讀取 - 擦除 - 重寫”循環,這會減慢“完整”SSD的速度。 - Stuart Brock
注意 所有 SSD已經在某種程度上做到這一點,並將其隱藏起來。這是磨損均衡的一部分。留出更多的自由空間可提供更多的磨損平衡空間。這對於經常寫入的磁盤是有益的,特別是如果它是SSD的廉價TLC模型。然後,如果你不得不留下20%的免費,你會失去廉價磁盤的一些好處。最後,新磁盤肯定不是更好。第一代SSD是SLC磁盤,有100,000個擦除週期。目前的TLC可低至5000 - 差20倍。 - MSalters


“規則”根據您的要求而有所不同。還有一些特殊情況,例如ZFS:“在90%的容量下,ZFS從性能到基於空間的優化切換,這會帶來巨大的性能影響。”是的,這是一個 設計 ZFS的一個方面......不是通過觀察或軼事證據得出的東西。顯然,如果您的ZFS存儲池僅由SSD組成,則這不是問題。然而,即使使用旋轉磁盤,當您處理靜態存儲時,您也可以愉快地達到99%或100%,並且您不需要一流的性能 - 例如,您個人最喜歡的電影收藏,它永遠不會改變,並且在哪裡安全是優先事項1。

接下來,btrfs - 一個極端的情況:當自由空間太低(幾MB)時,你可以達到不歸路。不,刪除文件不是一個選項,因為你不能。沒有足夠的空間來刪除文件。 btrfs是一個COW(寫時復制)文件系統,您可以達到無法再修改元數據的程度。此時,您仍然可以向文件系統添加額外的存儲空間(USB拇指驅動器可能有效),然後從擴展的文件系統中刪除文件,然後縮小文件系統並再次刪除其他存儲空間。再次,這是由某些方面引起的 設計 的文件系統。

能夠為您提供“真實(嚴重)數據”的人可能是那些處理“真實(嚴重)存儲”的人。 Twisty的(優秀)答案提到了混合陣列(包括大量廉價慢速旋轉,大量快速旋轉磁盤,許多SSD ......),這些陣列在企業環境中運行,其中主要的限制因素是管理員的速度。能夠訂購升級。從16T到35T可能需要6個月......所以你最終會得到認真支持的報告,建議將你的鬧鐘設置為50%。


8
2017-10-05 15:05



你顯然從來沒有把zfs池帶到100%,這不應該是故意做的事情。這是一個痛苦,你不能刪除任何東西,你將不得不截斷一些文件來取回寫訪問權限,甚至可以刪除任何東西。 - camelccc


有許多因素導致特定設置特定量的結果。因此,沒有硬性和快速的數字,這只能作為這些參數的函數來測量。 (這可能就是為什麼其他用戶沒有報告這個特定主題的具體研究 - 太多的變量來編譯任何結論性的。)

  • 硬件

    • HDD始終分配所有扇區。所以它絕對不關心它們中有多少包含當前的用戶數據。 (對於控制器,所有扇區始終包含一些數據,它只是按照說明讀取並覆蓋它。)
    • 另一方面,SSD的控制器(de)動態分配其扇區,類似於文件系統。這使得這項工作在更高的用途上變得更難。它有多難以及它對可觀察性能的影響程度取決於:
      • 控制器的性能和算法質量
      • 寫入負載
      • 到字母範圍,整體負載(給控制器時間進行垃圾收集)
      • 空間過度配置(一些製造商甚至讓客戶選擇預先訂購或動態更改)
  • 文件系統

    • 針對不同的負載和主機處理要求設計了不同的文件系統。這可以通過格式參數在某種程度上進行調整。
    • FS寫性能是自由空間和碎片的函數,讀性能只是碎片的一個功能。它從一開始就逐漸退化,所以問題在於你可容忍的門檻。
  • 加載類型

    • 寫入負載強調快速查找和訪問新的空閒塊
    • 讀取繁重的負載強調整合相關數據,因此可以用更少的開銷讀取它

4
2017-10-06 11:25





機械驅動器需要考慮的一件事是外邊緣的吞吐量高於內部。這是因為對於外部的較大周長,每轉的扇區更多。

隨著驅動器達到容量,性能將降低,因為只有較慢的內部扇區可用。

有關更深入的分析,請參閱 https://superuser.com/a/643634


3
2017-10-05 09:32



僅當從驅動器中刪除任何文件時才會出現這種情況。在現實生活中,當你達到90%的容量時,你會在驅動器上分散一堆免費點。 - Dmitry Grigoryev
我並不是說硬盤控制器會避免填補空白,但是當驅動器填充更多內部扇區時將會使用。容量為90%的磁盤將使用更多的內部扇區而不是只有55%的扇區。尋求時間對性能有很大影響,因此這主要是對大型連續文件的好處。但是,更大的可用空間意味著有更多機會連續存儲大型文件。 - Wes Toleman
@WesToleman硬盤控制器不負責決定事情的去向,它只是將扇區號映射到物理位置。操作系統 - 特別是文件系統。 - Thorbjørn Ravn Andersen


這取決於驅動器的預期用途,但通常20%到15%的可用空間是旋轉磁盤的良好答案,10%或更多對SSD有利。

如果這是計算機上的主驅動器並且文件可能被移動,那麼20%的可用空間應該可以防止顯著的減速。這將允許整個驅動器中有足夠的開放空間,以便根據需要移動和復制數據。當自由位置更接近原始數據時,旋轉驅動器將工作得最好,而在SSD中,物理位置不會影響日常性能。因此,出於純粹的性能原因,旋轉驅動器應該有更多的可用空間。在SSD上,減少的可用空間將減少驅動器的使用壽命,但不會降低性能。 SSD嘗試將臨時數據和隨機下載文件存儲在最少使用的位置,以便它們可以平衡整個驅動器中的單元使用情況;否則,驅動器的一部分將比其餘部分快得多。一些較新的SSD可以智能地重新排列文件,以便空白空間移動,但較舊的驅動器可能不會這樣做。

如果這是一個媒體或長期存儲驅動器,那麼5%到10%的空閒就足夠了,如果是旋轉磁盤,最好是10%。您不需要那麼多的可用空間,因為此驅動器很少需要移動數據,因此性能幾乎不是一個因素。可用空間主要用於允許丟棄和替換壞扇區,並允許文件更連續。

除非有一個非常好的,明確的理由,否則我不會超過95%的容量超過一天。


3
2017-10-06 13:25