Kann nicht finden, warum Inodes ausgehen

443
Ticksy

Ich habe ein Xen VPS mit Debian Linux, das mit dem ext4-Dateisystem installiert ist. Einmal habe ich festgestellt, dass alle Inodes verwendet werden. Ich habe das überprüft:

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

Dann versuchte ich herauszufinden, wo alle Inodes benutzt wurden. In der Regel wurden sie von PHP-Session-Dateien verwendet (weil der cron-Task oder der interne PHP-Cleaner defekt waren). Ich kann jedoch nicht finden, in welchem ​​Verzeichnis sehr viele Dateien gespeichert sind. Ich habe viele Methoden ausprobiert, es gibt eine:

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

Was kann ich als nächstes tun?

0

1 Antwort auf die Frage

0
Eirik Fuller

Wenn Sie möchten, dass Ihr find-Befehl Inodes aus anderen Mount-Punkten ausschließt, schließen Sie -xdev in die find-Befehlszeile ein. Der 78898 am Ende Ihrer Ausgabe ist wahrscheinlich mehr als die Gesamtzahl der Dateien, die in der rootfs-Partition sichtbar sind, da Dateien unter anderen Mount-Punkten enthalten sind. So viel erklärt nicht die Diskrepanz, nach der Sie gefragt haben; es bedeutet nur, dass die tatsächliche Diskrepanz wahrscheinlich etwas größer ist.

Das erste, was Sie überprüfen müssen, ist, ob Sie die Verknüpfung zu den geöffneten Dateien getrennt haben. Die Ausgabe des folgenden Befehls, der als root ausgeführt wird, sollte diese anzeigen:

lsof +L1 

Ein Beispiel dafür, warum Sie möglicherweise nicht verknüpfte Dateien geöffnet haben, sind Prozesse, die vor Paketaktualisierungen begannen und durch neuere Dateien ersetzt wurden (einige sshd-Prozesse auf einem meiner Systeme haben offene nicht verknüpfte Dateien). Eine andere Möglichkeit sind Prozesse, die offene Dateien absichtlich lösen, um deren Inhalt vor anderen Prozessen zu verbergen.

Wenn dies die Diskrepanz nicht vollständig berücksichtigt, besteht eine weitere Möglichkeit darin, dass Dateien, die nicht gelöscht wurden, für den Befehl find noch nicht sichtbar sind, da sie unter anderen Mount-Punkten versteckt sind. Es gibt verschiedene Möglichkeiten, diese Möglichkeit zu untersuchen. Es ist jedoch wahrscheinlich sinnvoll, gelöschte Dateien zuerst zu zählen.