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