![找出哪个进程在硬盘驱动器上打开了在目录树中不再可见的数据](https://linux22.com/image/145412/%E6%89%BE%E5%87%BA%E5%93%AA%E4%B8%AA%E8%BF%9B%E7%A8%8B%E5%9C%A8%E7%A1%AC%E7%9B%98%E9%A9%B1%E5%8A%A8%E5%99%A8%E4%B8%8A%E6%89%93%E5%BC%80%E4%BA%86%E5%9C%A8%E7%9B%AE%E5%BD%95%E6%A0%91%E4%B8%AD%E4%B8%8D%E5%86%8D%E5%8F%AF%E8%A7%81%E7%9A%84%E6%95%B0%E6%8D%AE.png)
在我的服务器上,根分区为 73GB,但磁盘显示已满,尽管该设备上仅使用了大约 6GB:
# df -h
Filesystem Size Used Avail Use% Mounted on
udev 997M 0 997M 0% /dev
tmpfs 202M 41M 162M 20% /run
/dev/mapper/p22server-root 73G 68G 655M 100% /
(我在服务器上使用LVM /dev/mapper/p22server-root -> ../dm-0
:)如果我检查
ncdu -x /
我发现总使用量只有5.9GB。
我的猜测是,一定有一些文件仍然打开,但在文件树中不可见。
我该如何调试这个?我想,重新启动会恢复丢失的空间,但现在不可能重新启动。
答案1
如果你的怀疑是真的,你可能会更容易相处拉索夫。
在输出中查找“(已删除)”或类似内容。
答案2
有两种可能:
1.删除的文件仍然被某些进程打开
您可以查看所有打开的文件lsof
。例如,这些是显示的类型lsof
以及它们在输出中出现的频率:
# lsof|cut -c50-54|sort|uniq -c
375 CHR
610 DIR
211 FIFO
32 IPv4
17 IPv6
40 link
419 node
152 nown
6008 REG
9 sock
598 unix
这仅显示文件描述符列 (FD):
# lsof|awk -v field="FD" 'NR==1 {c = index($0,field)} {print substr($0,c-1,length(field)+4)}'|sort|uniq -c|sort -n|tail
查找DEL
输出中具有该值的文件lsof
以获取提示。
2. 文件隐藏在挂载点后面
但更可能的是,这些文件只是由于安装点而“隐藏”,当大量文件存储在安装文件夹中时未使用该安装点,现在它们对ncdu
.
将根目录挂载到另一个位置并进行分析:
mkdir /temp-root
mount --bind / /temp-root
ncdu -x /temp_root