У меня есть Xen VPS с Debian Linux, установленный с файловой системой ext4. Однажды я обнаружил, что все иноды используются. Я проверил это:

~# 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

Затем я попытался найти, где были использованы все иноды. Обычно они использовались сессионными файлами 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 ответ1

0

Если вы хотите, чтобы ваша команда find исключала inode, принадлежащие другим точкам монтирования, включите -xdev в командной строке find. 78898 в конце вашего вывода, вероятно, больше, чем общее количество файлов, видимых для поиска в разделе rootfs, потому что он включает файлы в других точках монтирования. Это многое не объясняет расхождение, о котором вы спрашивали; это просто означает, что фактическое расхождение, вероятно, несколько больше.

Первое, что нужно проверить, есть ли у вас несвязанные открытые файлы. Вывод следующей команды, работающей от имени пользователя root, должен показать вам это:

lsof +L1

Одним из примеров того, почему у вас могут быть открытые несвязанные файлы, являются процессы, которые начались до обновления пакетов, которые заменили их более новыми файлами (пара процессов sshd в одной из моих систем имеет открытые несвязанные файлы). Другая возможность - это процессы, которые намеренно отменяют связь между открытыми файлами, чтобы скрыть их содержимое от других процессов.

Если это не полностью объясняет расхождение, другая возможность состоит в том, что файлы, которые не были удалены, все еще невидимы для команды поиска, потому что они скрыты под другими точками монтирования. Есть несколько способов исследовать эту возможность, но, вероятно, имеет смысл сначала считать открытые удаленные файлы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .