2T 文件系统已满!du 说只使用了 70G。剩余的在哪里?

2T 文件系统已满!du 说只使用了 70G。剩余的在哪里?

当我跑步时 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 的空间,那么显然您的服务器设置出了问题。也许事情没有按应有的方式关闭?如果没有访问机器,我们无法知道,但您真的应该尝试找出导致此行为的原因。

相关内容