当我跑步时
df /
我得到
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 2.0T 1.9T 0 100% /
当我跑步时
sudo ncdu -x /
我得到
Total disk usage: 63.2 GiB
我的磁盘空间丢失的 1.8T 在哪里?哪个命令可以报告它?
编辑1:
sudo mount |grep ' / '
/dev/mapper/ubuntu--vg-ubuntu--lv on / type ext4 (rw,relatime,stripe=32)
编辑2:
sudo lsof |grep deleted
生成了超过 213K 行。一些示例行是
lightdm 3111 3122 gmain root 6w REG 253,1 0 3020464 /var/log/lightdm/lightdm.log (deleted)
Isolated 5828 userxyz 21r REG 0,1 1048576 181343369 /memfd:mozilla-ipc (deleted)
pulseaudi 6653 user123 6u REG 0,1 67108864 127287 /memfd:pulseaudio (deleted)
gitstatus 7240 7255 gitstatus me 0r FIFO 253,1 0t0 789896 /tmp/gitstatus.POWERLEVEL9K.224600009.7190.1694590285.1.fifo (deleted)
gvim 224748 xxxx 15u REG 253,0 45056 415343853 /home/xxxx/somefile.swp (deleted)
code-8b61 255443 255494 tokio-run aaaa 2w REG 253,0 29 214637824 /home/aaaa/.vscode-server/.cli.8b617bd08fd9e3fc94d11234567758b56e3f72314.log (deleted)
我看到很多 mozilla-ipc、vscode-server、pulseadio 等等。
答案1
该命令lsof | grep deleted
将过滤 的输出lsof
并显示标记为 的内容(deleted)
。但是,它还将显示名称包含 的打开文件deleted
,因此这里有一个稍微更安全的版本:
sudo lsof | awk '$NF=="(deleted)"'
现在,在 的输出中lsof
,第一个字段是命令名称,第二个字段是相关进程的进程 ID:
$ sudo lsof | head -n1
COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME
因此,一件简单的事情就是确定哪个命令、哪个工具打开了最多的已删除文件:
$ sudo lsof 2>/dev/null | awk '$NF=="(deleted)"{print $1}' | sort | uniq -c | sort -rnk1,1
20162 slack
8719 brave
2440 franz
2423 steamwebh
580 Xorg
94 steam
68 pipewire
40 terminato
26 nemo-desk
22 cinnamon
18 pipewire-
15 emacs
13 Enpass
5 csd-media
因此,在我的系统上,slack
有 20162 个打开的文件。我怀疑你也有一个罪魁祸首,所以先尝试停止该进程。如果你不知道怎么做,或者不太明显,你可以使用killall
:
killall slack
如果你希望采取更精准的治疗手段,可以针对特定的 PID:
$ sudo lsof 2>/dev/null | awk '$NF=="(deleted)"{print $2}' | sort | uniq -c | sort -rnk1,1 | head
2625 3520324
1258 3520257
960 2277995
867 249153
700 2278089
612 3520325
558 249114
550 1929
540 249257
432 2278088
这告诉我 PID 为 的进程3520324
在我的系统上打开了 2625 个已删除文件。我现在可以检查该进程是什么:
$ ps -p 3520324
PID TTY TIME CMD
3520324 tty2 00:00:12 brave
所以它是我的网络浏览器brave
。或者更准确地说,是由现代浏览器(例如)产生的众多进程之一brave
。我现在可以直接终止它:
kill 3520324
就我而言,这甚至没有杀死我正在编写此文的窗口,但由于 PID 不再运行,因此大概停止了一些子进程。
不过这只是权宜之计。您不应该遇到这个问题,如果它真的占用了数 TB 的空间,那么显然您的服务器设置出了问题。也许事情没有按应有的方式关闭?如果没有访问机器,我们无法知道,但您真的应该尝试找出导致此行为的原因。