我有一个安装了 Debian Linux 的 Xen VPS,文件系统为 ext4。有一次我发现所有 inode 都已使用。我检查了以下内容:
~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
rootfs 3932160 3932160 0 100% /
udev 59227 262 58965 1% /dev
tmpfs 63251 215 63036 1% /run
/dev/xvda 3932160 3932160 0 100% /
tmpfs 63251 2 63249 1% /run/lock
tmpfs 63251 2 63249 1% /run/shm
然后我尝试找到所有 inode 的使用位置。通常它们被 PHP 会话文件使用(因为 cron 任务或 PHP 内部清理器损坏)。但我找不到哪个目录包含大量文件。我尝试了很多方法,其中一种是:
/# for i in /*; do echo $i; find $i |wc -l; done
/aquota.group
1
/aquota.user
1
/bin
124
/boot
9
/dev
264
/etc
1746
/home
1
/initrd.img
1
/lib
4002
/lib64
2
/lost+found
1
/media
1
/mnt
1
/opt
1
/proc
26590
/root
17
/run
214
/sbin
127
/selinux
1
/srv
3
/sys
3609
/tmp
1
/usr
37020
/var
8636
/vmlinuz
1
/# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=59227,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=50604k,mode=755)
/dev/xvda on / type ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered,usrquota,grpquota)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=101200k)
Filesystem Type 1K-blocks Used Available Use% Mounted on
rootfs rootfs 61927420 37390672 21391020 64% /
udev devtmpfs 10240 0 10240 0% /dev
tmpfs tmpfs 50604 120 50484 1% /run
/dev/xvda ext4 61927420 37390672 21391020 64% /
tmpfs tmpfs 5120 0 5120 0% /run/lock
tmpfs tmpfs 101200 0 101200 0% /run/shm
/# find . | wc -l
78898
下一步我该做什么?
答案1
如果您希望 find 命令排除属于其他挂载点的 inode,请在 find 命令行中包含 -xdev。输出末尾的 78898 可能大于在 rootfs 分区中可找到的文件总数,因为它包括其他挂载点下的文件。这并不能解释您询问的差异;它只是意味着实际差异可能更大一些。
首先要检查的是,您是否有未链接的打开文件。以 root 身份运行以下命令的输出应显示这些文件:
lsof +L1
您可能打开未链接的文件的一个示例是,在软件包升级之前启动的进程会用较新的文件替换这些文件(我的某个系统上的几个 sshd 进程打开了未链接的文件)。另一种可能性是,进程故意取消链接打开的文件,以向其他进程隐藏其内容。
如果这不能完全解释差异,那么另一种可能性是,未被删除的文件对于 find 命令来说仍然不可见,因为它们隐藏在其他挂载点之下。有多种方法可以调查这种可能性,但首先计算打开的已删除文件可能更有意义。