天天看點

linux 快速删除大量/大檔案

1、快速删除大量檔案:

假如你要在linux下删除大量檔案,比如100萬、1000萬,像/var/spool/clientmqueue/的mail郵件,/usr/local/nginx/proxy_temp的nginx緩存等,那麼rm -rf *可能就不好使了。 rsync 可以用來清空目錄或檔案,如下:

1)先建立一個空目錄

mkdir/data/blank

2)用rsync删除目标目錄

rsync--delete-before -d /data/blank/ /var/spool/clientmqueue/

這樣目标目錄很快就被清空了

注:其中--delete-before 接收者在傳輸之前進行删除操作

2、快速删除大檔案:

假如你有一些特别大的檔案要删除,比如nohup.out這樣的實時更新的檔案,動辄都是幾十個G上百G的,也可以用rsync來清空大檔案,而且效率比較高。

1)建立空檔案

touch/data/blank.txt

2)用rsync清空檔案

rsync-a --delete-before --progress --stats /root/blank.txt /root/nohup.out

3、為什麼rsync能夠快速删除大檔案?

1)rm指令大量調用了lstat64和unlink,可以推測删除每個檔案前都從檔案系統中做過一次lstat操作。過程:正式删除工作的第一階段,需要通過getdirentries64調用,分批讀取目錄(每次大約為4K),在記憶體中建立rm的檔案清單;第二階段,lstat64确定所有檔案的狀态;第三階段,通過unlink執行實際删除。這三個階段都有比較多的系統調用和檔案系統操作。

2)rsync所做的系統調用很少:沒有針對單個檔案做lstat和unlink操作。指令執行前期,rsync開啟了一片共享記憶體,通過mmap方式加載目錄資訊。隻做目錄同步,不需要針對單個檔案做unlink。

另外,在其他人的評測裡,rm的上下文切換比較多,會造成System CPU占用較多——對于檔案系統的操作,簡單增加并發數并不總能提升操作速度。

繼續閱讀