Disk-Usage

如何分類我的 df 和 du 輸出之間的差異?

  • December 20, 2018

**注意:**我完全了解本網站上的這些其他問題:

我的問題顯示如下:

$ du -sh / --exclude=/proc
4.0G    /

對比

$ df -h /
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg_os-lv_root   18G 16.0G  1.9G  90% /
devtmpfs                   3.9G     0  3.9G   0% /dev
tmpfs                      3.9G   39M  3.8G   1% /dev/shm
tmpfs                      3.9G   17M  3.9G   1% /run
tmpfs                      3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                  497M  215M  283M  44% /boot
tmpfs                      783M     0  783M   0% /run/user/937000511
tmpfs                      783M     0  783M   0% /run/user/937000593

我如何對這個問題進行分類以確定導致這種差異的原因?

在這種特殊情況下,問題是一個守護程序正在執行,它的文件被輪換,logrotate但服務沒有被發送kill -HUP來觸發它開始記錄到一個新文件。這導致 12G 日誌文件繼續顯示,就好像它正在消耗 HDD 上的空間,這可以通過df但不是可見的du,考慮到這兩個 CLI 工具的工作方式。

lsof

使用lsof和查找日誌文件顯示了問題:

$ lsof | grep -E 'COMMAND|/var/log/maxscale'
COMMAND     PID   TID           USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
maxscale   5976             maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
maxscale   5976             maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
maxscale   5976  5977       maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
maxscale   5976  5977       maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
maxscale   5976  5978       maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
maxscale   5976  5978       maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
maxscale   5976  5979       maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
maxscale   5976  5979       maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
maxscale   5976  5980       maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
maxscale   5976  5980       maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
MHD-singl  5976  5981       maxscale  cwd       DIR              253,1        4096      82757 /var/log/maxscale
MHD-singl  5976  5981       maxscale    4w      REG              253,1 12506246848      82752 /var/log/maxscale/maxscale.log (deleted)
bash      12629                 root  cwd       DIR              253,1        4096      82757 /var/log/maxscale

輸出甚至顯示有問題的lsof大小,實際上它已被刪除:

maxscale 5976 maxscale 4w REG 253,1 12506246848 82752 /var/log/maxscale/maxscale.log(已刪除)

停止守護程序釋放/關閉文件描述符以釋放空間:

$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/vg_os-lv_root   18G  4.0G   14G  23% /
devtmpfs                   3.9G     0  3.9G   0% /dev
tmpfs                      3.9G   39M  3.8G   1% /dev/shm
tmpfs                      3.9G   17M  3.9G   1% /run
tmpfs                      3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                  497M  215M  283M  44% /boot
tmpfs                      783M     0  783M   0% /run/user/937000511
tmpfs                      783M     0  783M   0% /run/user/937000593

現在dfdu同意。

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