Performance
為什麼 rm 在具有 50Gb 文件的外部儲存驅動器(USB 連接,類型 fuseblk)上執行緩慢?
我一直在嘗試使用rsnapshot進行備份,但我發現它無法使用。雖然它能夠在幾分鐘內區分一個目錄(50gb)並複制它(硬連結每個文件),而且我可以在大約半小時內 cp 整個目錄,但刪除它需要一個多小時。即使直接使用
rm -rfv
,我發現 rm 單個文件可能需要半秒時間,而cp
andlink
命令會立即完成。為什麼 rm 這麼慢?有沒有更快的方法來遞歸刪除硬連結?對我來說,複製文件比刪除文件花費更少的時間是沒有意義的。
我正在處理的文件系統是一個外部儲存驅動器,通過 USB 連接並輸入 fuseblk(我認為這意味著它是 ntfs)。我的電腦正在執行 ubuntu linux。
從頂部輸出:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
最終,無論您做什麼,
rm
都必須在您要刪除的每個文件上執行unlink
(即使您呼叫rm -r
父目錄)。如果有很多文件要刪除,這可能需要很長時間。執行時有兩個特別耗時的過程
rm -r
:
readdir
, 其次是,- 多次呼叫
unlink
.查找所有文件,然後遍歷每個文件以將其刪除,可能需要非常非常長的時間。
如果您發現此“無法使用”,因為它會使目錄在一段時間內無法使用,請考慮在刪除父目錄之前移動父目錄。這將釋放該名稱以供程序再次使用,而不會帶來太多不便。
假設文件系統確實是NTFS(從您的問題中不清楚),NTFS 在刪除大片文件時通常很慢。您可能會考慮為您的目的使用更合適的文件系統(如果您沒有任何其他特殊需求,最新的 ext 文件系統具有相當好的刪除性能)。一般來說,FUSE 本身也不是特別快。您可能會考慮看看是否可以通過不使用 FUSE 的方式執行此操作。