Hi Florian! On Tue, 11 Nov 2008, Florian Schaal wrote:
Joerg Thuemmler schrieb:
Ansonsten kommen logische Plattenfehler in Frage ... mal einen fsck gemacht? In diesem Falle liefert sicher du den sinnvolleren Wert. df geht AFAIK über die Sector- und Inode-Counter der Platte und könnte dann halt falsch sein.
Ein fschck hat tatsächlich die Werte ein wenig korrigiert. Der Unterschied liegt jetzt nur noch bei 800 MB.
Das riecht eigentlich nach gelöschter Datei.
Was auch sein könnte - bin mir aber nicht sicher - eine oder mehrere gelöschte Datei(en) in /var, die noch einen offenen Prozeß hat/haben (sollte es nicht geben), die Inodes sind dann noch belegt, du wird aber nichts mehr finden.
Wenn dem so wäre, dann sollte sich das Problem doch im runlevel 1 mit einem remount beheben lassen?
Ein restart der betroffenen Prozesse reicht eigentlich aus. Dann wird der entsprechende Filedescriptor geschlossen und damit ist die Datei wirklich weg. So unwahrscheinlich ist das auch gar nicht, oft passiert das, wenn eine Logdatei nicht richtig wegrotiert wurde. Oder jemand dachte: Ach das alte logfile wird eh nicht benötigt, schaffen wir Platz und löschen sie und dabei greift der entsprechende Prozesse noch darauf zu. Finden kann man diese Dateien mit lsof¹: #v+ t42:~ [1128]# lsof +L1 COMMAND PID USER FD TYPE DEVICE SIZE NLINK NODE NAME dhclient3 2239 root txt REG 8,1 363232 0 81742 /sbin/dhclient3 smbd 5822 root 2w REG 8,1 863 0 434171 /var/log/samba/log.smbd.1 (deleted) smbd 5822 root 7w REG 8,1 863 0 434171 /var/log/samba/log.smbd.1 (deleted) tail 11182 chrisbra 3r REG 8,1 104909 0 401728 /var/log/syslog.1 (deleted) #v- Die erste Datei ist ein Fehlalarm. Warum dort bei diesem Filedescriptor ein Linkcount von 0 angezeigt wird, verstehe ich gerade nicht. Die richtigen sind die, wo (deleted) steht. Hm mal sehen, was wir da noch so rausfinden können: #v+ t41:~ [1130:1]#lsof +L1 -Fnskc |awk ' /^s/ { j=gensub(/^s/, "",1,$1) } /^n/ && /(deleted)/ { i=gensub(/^n/, "",1,$1) a[i]=j; } END { for (i in a) { s+=a[i]; print "Files: ", i , " Size: " , a[i]; } u="B" if (s>=1024) { s/=1024 u="kB"}; printf("-------------------\nTotal:\t%.2f %s\nAvg:\t%.2f %s\n", s, u, s/length(a),u); }' Files: /var/log/samba/log.smbd.1 Size: 863 Files: /var/log/syslog.1 Size: 104909 ------------------- Total: 103,29 kB Avg: 51,65 kB #v- Die 2 Prozesse verbrauchen also ca: 52 kB mehr an Platz. Ein Restart sollte reichen, um den Platz wieder freizugegeben. Falls das aus irgendeinem Grund nicht geht, weil man die Prozesse nicht restarten kann, aber trotzdem kein Wert auf die Daten in den gelöschten Dateien legt, müßte man die Daten ungefähr folgendermaßen freigeben können: #v+ t41:~ [1155]# for i in 5822 11182; do find -L /proc/$i/fd -type f -links 0 -exec sh -c 'exec > {}' \; ; done t41:~ [1156]# lsof +L1 -Fnskc |awk ' /^s/ { j=gensub(/^s/, "",1,$1) } /^n/ && /(deleted)/ { i=gensub(/^n/, "",1,$1) a[i]=j; } END { for (i in a) { s+=a[i]; print "Files: ", i , " Size: " , a[i]; } u="B" if (s>=1024) { s/=1024 u="kB"}; printf("-------------------\nTotal:\t%.2f %s\nAvg:\t%.2f %s\n", s, u, s/length(a),u); }' Files: /var/log/samba/log.smbd.1 Size: 0 Files: /var/log/syslog.1 Size: 0 ------------------- Total: 0,00 B Avg: 0,00 B #v- Zunächst wurden mit einer Schleife alle filedescriptoren gefunden, die zu den beiden Prozessen gehören und einen Linkcount von 0 hatten. Diese Filedescriptoren wurden einfach noch einmal durch die Shell zum Schreiben geöffnet und praktischerweise löscht die Shell dabei gleich den vorhandenen Inhalt. Wie man anhand des zweiten mini-Scripts sieht, sind jetzt zwar immernoch 2 Prozesse vorhanden, die auf gelöschte Dateien zugreifen möchten, aber diese Dateien nehmen keinen Platz mehr weg. Empfehlen tu ich diesen Weg aber nicht. Ich denke, dabei könnten einige Prozesse drüber stolpern. Es ist also mehr oder weniger nur ein übler Hack. __ ¹)oder eventuell auch mit find: find -L /proc/*/fd/* -xdev -links 0 -type f 2>/dev/null -- hundred-and-one symptoms of being an internet addict: 12. You turn off your modem and get this awful empty feeling, like you just pulled the plug on a loved one. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org