Umgang mit Hardlinks
Ich verwende seit kurzem das Linux-Tool rsnapshot, um Backups zu erstellen. Der Grund, von einem „normalen“ Shellskript auf rsnapshot umzusteigen, war für mich, immer das komplette, gesicherte Verzeichnis im aktuellen snapshot des Backup-Verzeichnisses vorzufinden. Dies ermöglicht rsnapshot, indem es Hardlinks anlegt. Was muss ich aber im Umgang mit Hardlinks beachten, wenn ich mit Utilities wie cp, tar oder scp in den Backup-Verzeichnissen zu tun habe? Muss ich besondere Optionen beim Aufruf der Tools beachten, wenn ich eines der snapshot-Verzeichnisse woanders hin kopieren will?
Ich verwende seit kurzem das Linux-Tool rsnapshot, um Backups zu erstellen. Der Grund, von einem „normalen“ Shellskript auf rsnapshot umzusteigen, war für mich, immer das komplette, gesicherte Verzeichnis im aktuellen snapshot des Backup-Verzeichnisses vorzufinden. Dies ermöglicht rsnapshot, indem es Hardlinks anlegt. Was muss ich aber im Umgang mit Hardlinks beachten, wenn ich mit Utilities wie cp, tar oder scp in den Backup-Verzeichnissen zu tun habe? Muss ich besondere Optionen beim Aufruf der Tools beachten, wenn ich eines der snapshot-Verzeichnisse woanders hin kopieren will?
Das ist ja gerade der Clou: gar nichts. Ein Hardlink ist ein geklonter Eintrag im Dateisystem, der auf dieselbe Stelle verweist wie das Original. Nachdem Sie einen Hardlink angelegt haben, kann das Betriebssystem nicht mehr unterscheiden, welcher der ursprĂĽngliche Eintrag war und welcher der neue ist. Beispiel:
echo "abc" > abc.txt
erzeugt die Datei abc.txt. Die Information, an welcher Stelle im Dateisystem der Inhalt der Datei gespeichert ist, enthält der zugehörige Inode; diesen erhalten Sie mit dem Befehl:
ls -i abc.txt
Wenn Sie jetzt einen Hardlink def.txt anlegen:
ln abc.txt def.txt
und sich mit
ls -i abc.txt def.txt
einmal die Inodes ansehen, werden Sie feststellen, dass beide „Dateien“ auf ein und denselben Inode verweisen. Es handelt sich also nicht um zwei Dateien mit gleichem Inhalt und unterschiedlichem Namen, sondern um ein und dieselbe Datei mit zwei Namen und Verzeichniseinträgen. Löschen Sie nun mit rm abc.txt den ursprünglichen Verzeichniseintrag, werden Sie sehen, dass sich nichts am Füllstand der Festplatte geändert hat – weil Linux nur den Verzeichniseintrag gelöscht hat, denn der Inode wird ja nach wie vor vom Hardlink referenziert.
Deshalb können Sie bei der Backup-Lösung mit Hardlinks auch ältere Backups jederzeit bedenkenlos löschen, ohne zu riskieren, dass ein neues Backup darunter leidet – solange es noch einen Verzeichniseintrag (Hardlink) gibt, der den Inode referenziert, bleiben die Daten erhalten. Erst wenn Sie auch den letzten Verweis gelöscht haben, wird die Datei wirklich entsorgt.
Probleme macht das nur, wenn Sie mit du -sm zu ermitteln versuchen, wie viel Platz ein Backup zum Beispiel von vor vier Wochen belegt, dann das Backup löschen und erwarten, dass Sie entsprechend viel Platz auf der Festplatte gewinnen. Da ein Großteil der Dateien auch in neueren Backups referenziert sein dürfte, gewinnen Sie letztlich nur wenige Bytes oder Megabytes.
(mid)