Florian Schaal wrote:
Joerg Thuemmler schrieb:
eine Möglichkeit wäre, du und df als nichtprivilegierter User auszuführen. df ist dann korrekt, aber du durchsucht nur, was Du durchsuchen darfst. Bei mir ist das die Hälfte von dem, was df zeigt.
Allerdings kriege ich natürlich jede Menge Fehlermeldungen über nicht betretbare Verzeichnisse... aber, wenn Du stderr vielleicht gerade umlenkst...
Das bringt mir nicht wirklich viel. Ich lasse beides als root laufen und möchte eigentlich nur wissen, welcher der beiden Werte nun der richtige ist.
Hi, und sorry für PM, sollte an die Liste gehen. Hast Du denn für alle Verzeichnisse in /var Leserecht (theoretisch muß auch root das nicht haben... wäre aber dann sicher Folge eines Fehlers). 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. 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. Jedenfalls ist da was faul... ich würde erstmal einen fsck drüberjagen, vielleicht erstmal in ps, lsof, fuser gucken, wer so Dateien in /var benutzt. hth joerg -- 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
Joerg Thuemmler schrieb:
Hast Du denn für alle Verzeichnisse in /var Leserecht (theoretisch muß auch root das nicht haben... wäre aber dann sicher Folge eines Fehlers).
Ja, habe ich.
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.
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?
Jedenfalls ist da was faul... ich würde erstmal einen fsck drüberjagen, vielleicht erstmal in ps, lsof, fuser gucken, wer so Dateien in /var benutzt.
Ich trage mich eher mit dem Gedanken, das ganze Spiel mal auf einer anderen Platte zu versuchen und diese dann ggf. durch den Shredder zu jagen. -- 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
On Tue, 11 Nov 2008 11:56:40 +0100 Florian Schaal <system@ra-schaal.de> wrote:
Jedenfalls ist da was faul... ich würde erstmal einen fsck drüberjagen, vielleicht erstmal in ps, lsof, fuser gucken, wer so Dateien in /var benutzt.
Ich trage mich eher mit dem Gedanken, das ganze Spiel mal auf einer anderen Platte zu versuchen und diese dann ggf. durch den Shredder zu jagen. --
Ist unwahrscheinlich, dass das was damit zu tun hat. du und df bewegen sich ja im selben Filesystem. Verwendest Du Quota auf /var ? -- Gruß, Tobias. -- 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
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
Hallo, Am Die, 11 Nov 2008, Christian Brabandt schrieb:
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.
Bei einem fetten (leafnode) Newsspool oder MH/Maildir Mailverzeichnis kann das aber durchaus auch sein. Bei einer(!), allerdings sehr großen Newsgruppe (ohne Untergruppen), mit gut 180k Dateien auf ner ext3-Partition mit 4kB Blocksize sieht's hier z.B. so aus: # du -hs . 840M . # ls -l | awk '{s+=$5;}END{printf "%dM\n", s/1024/1024;}' 455M Noch ein paar Gruppen mit nochmal so vielen Posts und fertig sind die 800 MB Verschnitt. Solche Verzeichnisse sollte man also wirklich auf ne Partition mit kleineren Blockgrößen legen. Oder andere Dateiformate für den Spool bzw. die Mails verwenden (inn-spool, mbox statt MH/Maildir) usw. -dnh, oha, meine paar GB an in (teils komprimierten) Mbox-Dateien gespeicherten Mails würden als Maildir sicher viel mehr Platz belegen... -- "DOS=HIGH ...I knew it was on something!" (UNIX user, while reading C:\CONFIG.SYS) -- 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
participants (5)
-
Christian Brabandt
-
David Haller
-
Florian Schaal
-
Joerg Thuemmler
-
Tobias Crefeld