![如何確定哪個程序正在耗盡所有可用磁碟空間?](https://rvso.com/image/111997/%E5%A6%82%E4%BD%95%E7%A2%BA%E5%AE%9A%E5%93%AA%E5%80%8B%E7%A8%8B%E5%BA%8F%E6%AD%A3%E5%9C%A8%E8%80%97%E7%9B%A1%E6%89%80%E6%9C%89%E5%8F%AF%E7%94%A8%E7%A3%81%E7%A2%9F%E7%A9%BA%E9%96%93%EF%BC%9F.png)
突然間,所有可用磁碟空間都/
消失了。
如果我在磁碟中騰出空間(例如,透過刪除約 50GB 的內容),幾分鐘後我將回到 0 可用磁碟空間(根據df
)。
顯然,某些進程正在快速消耗磁碟空間,但我不知道它是什麼。
不過有一點是肯定的:無論它是什麼,它一定會創建許多小文件,因為磁碟上沒有大於 10GB 的文件,而且所有大於 1GB 的文件都比今天老得多。
如何找到正在佔用磁碟空間的內容?
FWIW,只df
看到問題,沒看到du
。
例如,下面我展示了幾張 60 秒的「快照du
」df
。分開。 (我在磁碟中騰出了一些空間後執行了此操作。)請注意 的du
輸出如何保持穩定(在495G
),但是df
顯示可用空間量穩定減少。 (我已遵循給予的建議這裡。 IOW,/mnt/root
正在指向/
。
# while true; do du -sh /mnt/root && df -h /mnt/root; sleep 60; done
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 824G 12G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 825G 11G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 827G 8.9G 99% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 827G 8.1G 100% /mnt/root
495G /mnt/root
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 880G 828G 7.5G 100% /mnt/root
答案1
您正在處理已刪除的文件,這就是為什麼du
不註冊已使用空間,而是df
註冊的原因。
刪除的檔案只有在所有者進程停止後才會消失;當這種情況沒有發生時,它們仍然在使用。
因此,要找到罪魁禍首,我建議您這樣做:
sudo lsof -nP | grep '(deleted)'
然後用於殺死進程。
sudo kill -9 $(lsof | grep deleted | cut -d " " -f4)
答案2
你可以使用iotop
查看哪些進程正在執行最多的磁碟寫入操作。
例子:
Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
7 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]