找出哪个进程在硬盘驱动器上打开了在目录树中不再可见的数据

找出哪个进程在硬盘驱动器上打开了在目录树中不再可见的数据

在我的服务器上,根分区为 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

相关内容