Frage

Mir ist kürzlich der Speicherplatz auf einem Laufwerk auf einem FreeBSD-Server ausgegangen.Ich habe die Datei, die Probleme verursacht hat, abgeschnitten, aber beim Ausführen wird die Änderung nicht angezeigt df.Wenn ich renne du -d0 Auf der Partition wird der korrekte Wert angezeigt.Gibt es eine Möglichkeit, die Aktualisierung dieser Informationen zu erzwingen?Was führt dazu, dass die Ausgabe hier anders ist?

War es hilfreich?

Lösung

Hier geht es wahrscheinlich um Wie Sie haben die Datei abgeschnitten. du Und df verschiedene Dinge melden als Dieser Beitrag auf unix.com erklärt.Nur weil Speicherplatz nicht genutzt wird, heißt das nicht zwangsläufig, dass er frei ist ...

Andere Tipps

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

Neuere BSD-Benutzer erkennen oft nicht, dass ein Programm, das eine Datei geöffnet hat, auch eine Referenz enthält.Dadurch wird verhindert, dass die zugrunde liegenden Dateidaten verloren gehen, während der Prozess sie verwendet.Wenn der Prozess die Datei schließt und der Referenzzähler auf Null fällt, wird der Dateibereich als verfügbar markiert.Dieses Schema wird verwendet, um Microsoft Windows-Probleme zu vermeiden, bei denen Sie eine Datei nicht löschen können, weil sie von einem nicht spezifizierten Programm noch geöffnet ist.

Eine einfache Möglichkeit, dies zu beobachten, besteht darin, Folgendes zu tun

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

Bis der Hintergrundprozess beendet wird, bleibt der von /tmp/cat-test verwendete Dateibereich zugewiesen und nicht verfügbar, wie von df(1) gemeldet, aber der Befehl du(1) kann ihn nicht berücksichtigen, da er keinen mehr hat Dateiname.

Beachten Sie, dass, wenn das System abstürzt, ohne dass der Prozess die Datei schließt, die Dateidaten immer noch vorhanden, aber nicht referenziert sind. Ein fsck(8)-Auslauf ist erforderlich, um den Speicherplatz im Dateisystem wiederherzustellen.

Prozesse, die Dateien offen halten, sind einer der Gründe, warum der Befehl newsyslog(8) Signale an syslogd oder andere Protokollierungsprogramme sendet, um sie darüber zu informieren, dass sie ihre Protokolldateien schließen und erneut öffnen sollen, nachdem sie rotiert wurden.

Softupdates können sich auch auf den freien Speicherplatz des Dateisystems auswirken, da die tatsächliche Wiederherstellung des Inode-Speicherplatzes verzögert werden kann.Der Befehl sync(8) kann verwendet werden, um dies früher zu bewirken.

Funktioniert df --sync?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top