2008-08-26 16 views
0

Ich habe vor kurzem keinen Speicherplatz mehr auf einem Laufwerk auf einem FreeBSD-Server. Ich habe die Datei gekürzt, die Probleme verursacht hat, aber ich sehe die Änderung nicht, wenn df ausgeführt wird. Wenn ich du -d0 auf der Partition laufen lasse, zeigt es den korrekten Wert an. Gibt es eine Möglichkeit, diese Informationen zu aktualisieren? Was bewirkt, dass die Ausgabe hier anders ist?Get `df` um aktualisierte Informationen auf FreeBSD anzuzeigen

Antwort

2

Diese Zentren wahrscheinlich auf wie Sie die Datei abgeschnitten. du und df berichten verschiedene Dinge wie this post on unix.com explains. Nur weil der Raum nicht benutzt wird bedeutet nicht notwendigerweise, dass es frei ist ...

3

In BSD ein Verzeichniseintrag ist einfach eine von vielen Verweise auf die zugrunde liegenden Dateidaten (eine Inode genannt). Wenn eine Datei mit dem Befehl rm (1) gelöscht wird, wird nur die Anzahl der Referenzen verringert. Wenn der Referenzzählwert immer noch positiv ist (z. B. weist die Datei aufgrund von Symlinks andere Verzeichniseinträge auf), werden die zugrunde liegenden Dateidaten nicht entfernt.

Neuere BSD-Benutzer wissen oft nicht, dass ein Programm, das eine Datei geöffnet hat, auch eine Referenz enthält. Das verhindert, dass die zugrunde liegenden Dateidaten verschwinden, während der Prozess sie verwendet. Wenn der Prozess die Datei schließt, wenn der Referenzzähler auf Null fällt, wird der Dateibereich als verfügbar markiert. Dieses Schema wird verwendet, um die Microsoft Windows-Typprobleme zu vermeiden, bei denen Sie eine Datei nicht löschen können, weil sie in einigen nicht angegebenen Programmen noch geöffnet ist.

Eine einfache Möglichkeit, dies zu beobachten, ist die folgende

cp /bin/cat /tmp/cat-test 
/tmp/cat-test & 
rm /tmp/cat-test 

zu tun, bis der Hintergrundprozess den Dateibereich von/tmp/cat-Test und nicht verfügbar zugeordnet bleiben verwendet wird beendet, wie durch df gemeldet (1) aber der du (1) -Befehl wird nicht in der Lage sein, dies zu erklären, da er keinen Dateinamen mehr hat.

Beachten Sie, dass, wenn das System abstürzen sollte, ohne dass der Prozess die Datei schließt, die Dateidaten noch vorhanden sind, aber nicht referenziert, wird ein fsck (8) ausgeführt, um den Dateisystembereich wiederherzustellen.

Prozesse, die Dateien öffnen, sind ein Grund, warum der Befehl newsyslog (8) Signale an syslogd oder andere Protokollierungsprogramme sendet, um sie zu informieren, dass sie ihre Protokolldateien schließen und wieder öffnen sollen, nachdem sie sie gedreht haben.

Softupdates können auch das Dateisystem freespace beeinflussen, da die Wiederherstellung des tatsächlichen Inode-Space verzögert werden kann; Der Befehl sync (8) kann verwendet werden, um dies früher zu ermöglichen.