Versuchen Sie zu verstehen, wie das Löschen von Hardlinks mit der Freigabe von Werten in der Inode-Tabelle zusammenhängt?

Versuchen Sie zu verstehen, wie das Löschen von Hardlinks mit der Freigabe von Werten in der Inode-Tabelle zusammenhängt?

Wenn ein Hardlink gelöscht wird, wird der Link entfernt, der Inhalt der Datei selbst bleibt jedoch bestehen (d. h., der Speicherplatz wird nicht freigegeben), bis alle Links zu der Datei gelöscht sind.

Mein Verständnis ist, dassnurWenn die Datei selbst gelöscht wird, wird dann die Inode-Tabelle für diese bestimmte Datei zurückgesetzt? Da selbst die Originaldatei ein Link ist, der durch ein1in den Metadaten des ls-Befehls.

Nehmen wir beispielsweise an, ich habe zwei Hardlinks zu einer Datei und lösche beide Hardlinks. Die Inode-Daten sind dann weiterhin in der Tabelle indiziert, bis der letzte Link gelöscht wird? Ist das richtig?

Bei Verwendung des Befehls df -hiwerden nicht viele Informationen darüber bereitgestellt, ob Speicherplatz freigegeben wurde oder nicht. Meine zweite Frage lautet also: Wie kann ich sicher wissen, wann Inode-Daten freigegeben sind und keinen Speicherplatz belegen?

Antwort1

Der Speicherplatz eines Inodes sowie sein Block und Speicherplatz in der Inode-Tabelle werden freigegeben, wenn:

  • Der letzte Verzeichniseintrag, der auf den Inode zeigt, wird gelöscht. Das heißt, es gibt keine Hardlinks mehr auf den Inode, und
  • Der letzte Dateideskriptor, der auf den Inode verweist, ist geschlossen. Das heißt, der Inode wird nicht mehr verwendet und es gibt keine offenen Dateideskriptoren, die auf den Inode verweisen.

Beispielsweise könnte ein Prozess eine Datei erstellen, die Datei öffnen und dann sofort die Verknüpfung aufheben, um die Datei als temporären Speicher zu verwenden. Wenn der Prozess beendet oder anderweitig beendet wird, werden seine Dateideskriptoren automatisch geschlossen und die temporäre Datei automatisch freigegeben.

Bis der Inode tatsächlich freigegeben wird, sind der Inode und seine Blöcke in Verwendung und der verwendete Speicherplatz wird als verwendete Blöcke und Inodes angezeigt, wie von df angezeigt. Wenn der letzte Dateideskriptor und der Hardlink weg sind, wird der Speicherplatz freigegeben und die Berichterstattung von df wird entsprechend aktualisiert.

verwandte Informationen