Performance

為什麼 rm 在具有 50Gb 文件的外部儲存驅動器(USB 連接,類型 fuseblk)上執行緩慢?

  • June 10, 2021

我一直在嘗試使用rsnapshot進行備份,但我發現它無法使用。雖然它能夠在幾分鐘內區分一個目錄(50gb)並複制它(硬連結每個文件),而且我可以在大約半小時內 cp 整個目錄,但刪除它需要一個多小時。即使直接使用rm -rfv,我發現 rm 單個文件可能需要半秒時間,而cpandlink命令會立即完成。

為什麼 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

  1. readdir, 其次是,
  2. 多次呼叫unlink.

查找所有文件,然後遍歷每個文件以將其刪除,可能需要非常非常長的時間。

如果您發現此“無法使用”,因為它會使目錄在一段時間內無法使用,請考慮在刪除父目錄之前移動父目錄。這將釋放該名稱以供程序再次使用,而不會帶來太多不便。

假設文件系統確實NTFS(從您的問題中不清楚),NTFS 在刪除大片文件時通常很慢。您可能會考慮為您的目的使用更合適的文件系統(如果您沒有任何其他特殊需求,最新的 ext 文件系統具有相當好的刪除性能)。一般來說,FUSE 本身也不是特別快。您可能會考慮看看是否可以通過不使用 FUSE 的方式執行此操作。

引用自:https://unix.stackexchange.com/questions/106133