在Mac/Linux下刪除一個很大很深的文件夾似乎比Windows要快,造成這種差別的原因是什麼?


影響刪除文件的速度有幾個因素:

1. 軟體層面計算問題:比如Windows資源管理器會在刪除前先統計有多少文件要刪除,生成一個需要刪除文件的list,再計算刪除需要的時間,這個過程相當於先要遍歷整個被刪除的文件樹,所以Windows慢。要解決這個問題,用命令行刪除會明顯更快(rd /s /q)。

2. 回填數據的問題:輪子哥的回答里說了,這個我個人不太了解,有回填數據肯定會影響刪除性能。Linux默認肯定是不回填的,但我覺得Windows上應該有配置開關可以控制,而且似乎Win7里NTFS數據恢復工具也是可以正常工作的,是不是默認關閉的?

3. 延遲寫入的問題:這個是造成二者性能明顯差異的關鍵。延遲寫入(Allocate-on-flush)可以讓文件系統不實時的更新磁碟上的信息,也就是說,你即使刪除了十個文件,這十個文件可能還在磁碟上原封不動的放著,然後等後續操作系統或者磁碟空閑的情況下一起刪除。ext4、XFS、ZFS、Btrfs、HFS+都支持延遲寫入,NTFS目前並不支持延遲寫入。

需要注意的是,這裡的延遲寫入不僅僅表現在文件系統方面,也表現在操作系統緩存的策略方面,Windows在Vista之前緩存策略相當保守,即使到現在,Windows對系統緩存的使用率並不算高,而Linux則是盡量地佔用更多的內存。

延遲寫入的好處就是性能好,比如刪除十萬個文件,沒有延遲寫入的情況下可能要提交幾十萬次寫磁碟請求(更新日誌、更新父節點、更新bitmap、刪除自身等),但如果有延遲寫入,大量的寫磁碟請求可以合併成同一個操作,減少I/O次數(寫合併)。對於一般的設備來說IOPS(每秒處理IO次數)都是有瓶頸的。

但延遲寫入的壞處也很明顯,意外掉電可能會丟數據,數據回滾的內容無法預期。明明已經提示文件被刪除了,突然計算機掉電了,重啟一下居然文件還沒刪掉。

有一個簡單的實驗可以觀察Linux的延遲寫入:插入一個U盤,在U盤上新建一個文件,寫入幾個位元組的數據(不能太多),寫完以後馬上拔出U盤,插到另外一台電腦上看,U盤裡剛新建的小文件並不存在(對於Linux來說C語言里的fclose並不一定會觸發寫文件到物理設備)。

所以,操作系統刪除文件快慢,本質上是看文件系統的策略,而操作系統是否支持這種策略取決於廠商的態度,有人更注重數據安全,有人更注重性能,可靠性和性能不可能同時獲得,這也就造成了Windows和Linux/Mac的差異。

再補充點個人理解上的私貨:

Linux因為有一切皆文件的思想存在,文件系統的地位是非常高的,VFS是操作系統的核心之一,所以文件系統的性能是Linux特別關注。而Windows里,文件系統只是作為一個驅動而存在,其核心是CC-Manager等組件,,NTFS也不在內核文件NTOSKRNL里,所以二者的地位是不一樣的。性能上有差異也是可以理解的。

再補充一點:

Windows刪除的過程,強制刷新緩存的動作很多,這是Windows文件系統設計思路的問題。Windows無法刪除一個正在打開的文件,這就要求刪除之前關閉文件對應的緩存、釋放所有的鎖,這一步在Linux上是沒有的。Linux可以刪除任何打開的文件

因為Windows緩存策略和Linux不同,包括鎖的策略也不同,所以二者性能上會有很大的差異。至於為什麼要設計成這樣,這要問MS和Linus了。

Windows的FAT驅動是可以看到源碼的,在WDK里就有,FatSetRenameInfo函數就是負責執行刪除動作的。


針對Linux補充兩點:

1. 如果是Linux桌面的「trash」操作,的確比Windows快很多,因為它只是把目錄整個移到~/.local/share/Trash/files,用時和目錄大小無關。

2. 如果文件系統是btrfs,刪除文件也比其它文件系統快,因為btrfs刪除文件時不釋放空間,靠GC進程非同步回收。缺點也是刪除文件時可用空間不會馬上增加。


不怕文件大,就怕文件多


從Vista開始,Windows刪除文件如果不進回收站的話,還會覆蓋一些垃圾數據在原來的位置。


Windows先計算尺寸和估計刪除時間。


不考慮用戶ui軟體對此操作的影響,如檢測文件是否在用,如放入回收站,如軟raid里的文件等等。只考慮底層操作的話,那主要對比的是分區格式,刪除操作就是要釋放空間,使系統需要時能分配這些釋放的空間給用戶使用。像老早的fat,刪除是很快的,但長時間以後如果不整理碎片,那新建文件的讀寫效率都會受影響。linux里分區格式很多,甚至可以使用ntfs,如和windows同格式,那刪除操作也就沒什麼差別。不同格式特性都不太相同,有的比ntfs快,有的比ntfs慢,這要看具體格式才能回答。


首先是回收站問題,其次文件系統問題。


推薦閱讀:

更換筆記本主板後,WIN10還能自動激活嗎?
截止2017年5月,全球有多少PC用戶依然使用Win9x/NT/2000/XP/Vista?
能否在 Windows 中完整模擬 fork(3)?若能,如何?
「記事本」程序的BUG?
中國大部分人什麼時候可以用上正版 Windows?

TAG:MicrosoftWindows | Linux |