
Ich habe einen Server mit 1 TB Speicherplatz. Ich habe ihn bis zur Kapazitätsgrenze gefüllt und wollte dann einen symbolischen Link erstellen. Ich habe einen anderen symbolischen Link entfernt, aber der Server war trotzdem nicht zufrieden – er sagte, ich hätte keinen freien Speicherplatz. Habe ich nicht gerade genug Speicherplatz freigegeben, indem ich den letzten symbolischen Link entfernt habe...?
Wie viel Speicherplatz benötigt ein Dateisystem, um zu erkennen, dass genügend Speicherplatz zum Erstellen eines symbolischen Links vorhanden ist?
Antwort1
Das kommt darauf an. Die meisten Dateisysteme weisen Daten in Blöcken von einigen Kilobyte zu, sodass man davon ausgehen kann, dass jeder symbolische Link in einen einzigen Block passt. Dann stellt sich jedoch die Frage nach anderen Dateisystem-Metadaten, die vom Dateisystem abhängen.
Insbesondere auf ext4 (und ähnlichen Dateisystemen):
Eine kleine Datei erfordert einen Inode, einen Datenblock und Platz für den Verzeichniseintrag im Verzeichnis, das die Datei enthält. Kurze symbolische Links können vollständig im Inode gespeichert werden, sodass sie möglicherweise überhaupt keinen Datenblock benötigen. (Wenn ich mich recht entsinne, liegt die Grenze bei etwa 60 Bytes.)
Durch das Entfernen eines Symlinks wird der Inode freigegeben und der vom Verzeichniseintrag sowie dem Datenblock (sofern einer verwendet wurde) belegte Speicherplatz freigegeben. In einigen Fällen reicht dies für einen neuen Symlink möglicherweise nicht aus:
- Wenn der neue symbolische Link in einem anderen Verzeichnis erstellt würde, wäre in diesem neuen Verzeichnis möglicherweise nicht genügend Platz für den neuen Verzeichniseintrag vorhanden. Wenn keine freien Datenblöcke vorhanden sind, kann das Verzeichnis nicht erweitert werden.
- Wenn der neue Symlink im selben Verzeichnis, aber mit einem längeren Namen erstellt würde, könnte das Verzeichnis über zu wenig Speicherplatz verfügen
- Wenn beispielsweise der alte symbolische Link kurz genug war, um vollständig im Inode gespeichert zu werden, der neue Link jedoch lang genug wäre, um einen Datenblock zu erfordern, kann der neue symbolische Link nicht erstellt werden, wenn in den Dateisystemen keine freien Datenblöcke vorhanden sind.
Dass die Inodes ausgehen, sollte kein Problem darstellen, da der gelöschte symbolische Link zwangsläufig genau einen Inode verwendet hätte und ein neuer symbolischer Link genau einen Inode erfordert.
Antwort2
Der neue Link war größer als der alte.
ls -l
zeigt an, wie viele Bytes dieser symbolische Link hat und je länger der Pfad ist, desto mehr Bytes werden benötigt.
Es handelt sich ungefähr um die Anzahl der Bytes im vollständigen Pfad zur Zieldatei/zum Zielverzeichnis. Ein Link zu „/var/www/html“ ist bei Verwendung von ext4 unter Debian 10 13 Bytes lang. Hängt vom Dateisystem ab.