linux磁盤已滿,查看那個目錄文件最占磁盤空間並解決沒有內存不耗費資源刪除


df -Th查看磁盤空間占用情況

[root@IntelRC-Nginx-N023 ~]# df -Th
Filesystem                  Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root     xfs        40G   35G  5.4G  87% /
devtmpfs                    devtmpfs  3.8G     0  3.8G   0% /dev
tmpfs                       tmpfs     3.9G   56K  3.9G   1% /dev/shm
tmpfs                       tmpfs     3.9G  427M  3.4G  11% /run
tmpfs                       tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                   xfs       509M  156M  354M  31% /boot
/dev/mapper/vm_data-lv_data xfs       300G   30G  271G  10% /opt/data
tmpfs                       tmpfs     779M     0  779M   0% /run/user/0

使用du -sh /* |sort -nr查看那個目錄占用空間大

[root@IntelRC-Nginx-N023 ~]# du -sh /* |sort -nr
du: cannot access ‘/proc/256532/task/256532/fd/4’: No such file or directory
du: cannot access ‘/proc/256532/task/256532/fdinfo/4’: No such file or directory
du: cannot access ‘/proc/256532/fd/4’: No such file or directory
du: cannot access ‘/proc/256532/fdinfo/4’: No such file or directory
395M	/run
319M	/home
130M	/boot
120M	/etc
74M	/root
56K	/dev
33G	/var
30G	/opt
20M	/tmp
1.5G	/usr
0	/sys
0	/srv
0	/sbin
0	/proc
0	/mnt
0	/media
0	/lib64
0	/lib
0	/data
0	/bin

進一步目錄排查

然后那個目錄占用多 再通過du -s /root/* | sort -nr 一層層排查,找到占用文件多的地方

[root@IntelRC-Nginx-N023 ~]# du -sh /var/* |sort -nr
425M	/var/opt
245M	/var/cache
64M	/var/lib
29G	/var/adm
16K	/var/spool
16K	/var/data
8.0K	/var/db
3.8G	/var/log
0	/var/yp
0	/var/tmp
0	/var/run
0	/var/preserve
0	/var/nis
0	/var/mail
0	/var/lock
0	/var/local
0	/var/kerberos
0	/var/gopher
0	/var/games
0	/var/empty
0	/var/crash


[root@IntelRC-Nginx-N023 ~]# du -sh /var/adm/ |sort -nr
29G	/var/adm/

快速刪除大量文件

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

做刪除操作前,確認下你要刪除那個文件的權限,屬主屬組, 最好從固態硬盤copy到機械硬盤上留備份

# 1. 先建立一個空目錄
mkdir /data/blank

# 2. rsync刪除目標目錄
rsync --delete-before -d /data/blank/ /var/adm/
# --delete-before 接收者在傳輸之前進行刪除操作

# 這樣目標目錄很快就被清空了

為什么rsync能快速刪除大文件?

1rm命令大量調用了lstat64和unlink,可以推測刪除每個文件前都從文件系統中做過一次lstat操作。過程:正式刪除工作的第一階段,需要通過getdirentries64調用,分批讀取目錄(每次大約為4K),在內存中建立rm的文件列表;第二階段,lstat64確定所有文件的狀態;第三階段,通過unlink執行實際刪除。這三個階段都有比較多的系統調用和文件系統操作。

2rsync所做的系統調用很少沒有針對單個文件做lstat和unlink操作。命令執行前期,rsync開啟了一片共享內存,通過mmap方式加載目錄信息。只做目錄同步,不需要針對單個文件做unlink。另外,在其他人的評測里,rm的上下文切換比較多,會造成System CPU占用較多——對於文件系統的操作,簡單增加並發數並不總能提升操作速度。 總結:頻繁做減法不如直接從頭來過把文件系統的目錄與書籍的目錄做類比,rm刪除內容時,將目錄的每一個條目逐個刪除(unlink),需要循環重復操作很多次;rsync刪除內容時,建立好新的空目錄,替換掉老目錄,基本沒開銷。

rm刪除內容時,將目錄的每一個條目逐個刪除(unlink),需要循環重復操作很多次;rsync刪除內容時,建立好新的空目錄,替換掉老目錄,基本沒開銷

rsync與rm刪除速度比較
# 在一台主機上創建5萬個空文件后再分別用rsync和rm 進行清理,以下是測試結果

[root@www data1]# mkdir -p /tmp/empty/
[root@www data1]# mkdir 361way;seq 1 50000 | xargs -I{} touch 361way/file_{}
[root@www data1]# time rsync  --delete -rlptD /tmp/empty/ /data1/361way/
real    0m0.149s
user    0m0.018s
sys     0m0.091s
[root@www data1]# seq 1 50000 | xargs -I{} touch 361way/file_{}
[root@www data1]# time rm -rf 361way/*
real    0m0.831s
user    0m0.366s
sys     0m0.464s

殺掉占用文件進程

如果以上方法沒找到問題所在,那么可以使用以下命令, 看看是否刪除掉的文件仍然被進程占用而沒有進行實際刪除

lsof |grep deleted
zabbix_ag    945            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    945            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    946            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    946            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    947            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    947            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    948            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    948            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    949            zabbix    1w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    949            zabbix    2w      REG              253,0        1277  10173518/var/log/zabbix/zabbix_agentd.log-20191229 (deleted)
zabbix_ag    950            zabbix    1w      REG   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM