Warum gibt RM über NFS nicht sofort freien Speicherplatz frei?

508
Robert

Ich bin auf einem SUSE Enterprise-Server, der ein Laufwerk über einen NFS-Mount bereitgestellt hat. Ich habe eine 34 GB-Datei erstellt dd if=/dev/Zero of=test_file bs=8k Count=4194304, um die Schreibgeschwindigkeit der NFS-Freigabe zu testen. Danach habe ich die Datei über gelöscht rm test_fileund sofort genutzt df.

Der Wert in der usedSpalte der Ausgabe von dfbeginnt zu sinken. Ich aktualisiere, indem ich dfalle ~ 10 Sekunden anrufe und jedes Mal sehe ich, dass der usedWert um ~ 2 GB gesunken ist.

Es scheint also, dass der rm test_fileBefehl seinen Job nicht abgeschlossen hat, obwohl die Eingabeaufforderung wieder verfügbar ist (also muss rm "0" zurückgegeben haben, oder?). Was ist hier im Hintergrund los?

1
Haben Sie "Sync" versucht? choroba vor 5 Jahren 0
Während Sie sagen, dass das Dateisystem über NFS eingehängt ist, wie ist der NFS-Mount formatiert? Alles, was NFS bietet, ist ein Netzwerk-Mount. JakeGould vor 5 Jahren 1

1 Antwort auf die Frage

1
Austin Hemmelgarn

Das Dateisystem auf dem Remote-Knoten, der den Backend-Speicher für die NFS-Freigabe bereitstellt, gibt den Speicherplatz nicht sofort frei.

Streng genommen POSIX Semantik erfordert keine Entfernung einer Datei, um sofort den Raum frei, es wurde mit (sie erfordern eigentlich nicht jeden Platz zu schaffen überhaupt, was für einige Anwendungsfälle Art wichtig ist). Aufgrund dieser Tatsache und der Tatsache, dass es möglicherweise lange dauert, um Speicherplatz freizugeben, warten einige Dateisysteme nicht auf die Freigabe des Speicherorts und kehren zurück, sobald sie sicherstellen können, dass der Dateieintrag nicht in den Verzeichnislisten angezeigt wird ( das ist alles, was POSIX benötigt).

Mögliche Gründe, dass es eine Weile dauern kann, um Speicherplatz freizugeben, sind:

  • Das Dateisystem löscht möglicherweise leeren Speicherplatz, wenn es freigegeben wird, um die Offenlegung von Informationen zu verhindern. Dies ist fast immer ein teurer Vorgang.
  • Das Dateisystem kann sich auf einer SSD oder einem Thin Provisioning Storage befinden und so konfiguriert sein, dass die unteren Ebenen darüber informiert werden, dass der Speicherplatz nicht mehr verwendet wird. Dieser Vorgang kann auch ziemlich lange dauern.
  • Das Dateisystem muss möglicherweise Datenstrukturen für interne Abrechnungszwecke aktualisieren. Dies kann längere Zeit dauern oder nicht, ist jedoch normalerweise nicht trivial.
  • Das Dateisystem muss möglicherweise interne Datenstrukturen aktualisieren, um Rückverknüpfungen oder andere gemeinsam genutzte Bereiche in der Datei ordnungsgemäß zu verarbeiten.