• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Größe von Hardlinks bei rsync Backup

andisk

Newbie
Hallo zusammen,
ich habe auf dem Server in unserer Firma ein rotierendes rsync Backup eingerichtet.
Der Inhalt des Servers wird auf einer externen Platte im Ordner backup.0 gesichert.
Von diesem Backup wird täglich eine Hardlink-Kopie gemacht, die dann weiter rotiert bis sie gelöscht wird.
Das Problem war, dass auf der externen HD, die ca. 100GB größer ist als der Server, irgendwann kein Platz mehr war und das Backup somit nicht mehr funktioniert hat. Sprich: Die Hardlinks waren wahrscheinlich keine Hardlinks.

Ich habe einige Änderungen vorgenommen, die Platte neu formatiert (ext3) und das Backup nach folgendem Muster neu aufgesetzt:

#!/bin/sh
rm -rf /backup.3/
mv /backup.2/ /backup.3
mv /backup.1/ /backup.2
cp -al /backup.0/ /backup.1
rsync -a --delete /source/ /backup.0

In einem kleinen Testszenario funktioniert alles ohne Probleme. Die große Frage ist nun, ob die Dateien in den Verzeichnissen backup.1 bis backup.3 wirklich Hardlinks sind? Wie kann ich dies überprüfen? Bzw. wie kann ich die Größe eines Hardlinks feststellen? Es wird ja immer nur die Größe der verlinkten Datei angezeigt.


Vielen Dank schon mal und beste Grüße!

andisk
 
A

Anonymous

Gast
Hardlinks als solche haben keine Größe. Sie sind einfach nur weitere Namen für ein und die selbe Datei. Nehmen diese Namen in einem Verzeichnis dann überhand, dann wird irgendwann einmal die Verzeichnisdatei ein Stück größer, damit die ganzen Namen dort hineinpassen. Aber damit allein bekommt man keine Platten voll.

Hardlinks erkennst du daran, dass bei normalen Dateien ( also nicht bei Verzeichnissen da ist es etwas anders) bei dem Befehl ls -l hinter den Zugriffsrechten die folgende Zahl nicht gleich 1 ist.
Die Zahl dort bedeutet die Anzahl von Dateinamen die zu dieser Datei gehören. Steht dort eine 1. dann hat diese Datei nur einen Namen, steht dort eine 8 dann hat diese Datei 8 Namen, und das sind 8 Hardlinks, denn es ist nicht mehr ersichtlich welche mal der ursprüngliche Dateiname war, alle Namen sind gleichberechtigt.

Hardlinks gehen aus diesem Grunde auch immer nur in ein und dem selben Dateisystem. Werden diese in getrennte Dateisysteme umkopiert, dann entstehen daraus jeweils eigenständige Dateien, die dann auch entsprechend auf jedem Filesystem Platz benötigen.

robi
 
OP
A

andisk

Newbie
Vielen Dank schon mal für die ausführliche Antwort!

Ich hab das jetzt bei meinem Test Backup mal durchgetestet und bin zu folgenden Ergebnissen gekommen:

Die Quelle hat die Dateien test1 und test2. Bei beiden steht hinter den Zugriffsrechten richtigerweise eine 1.

In den Verzeichnissen backup.0 bis backup.3 steht hinter den Rechten der zwei Dateien jeweils eine 4. Bei backup.0 verwundert mich das ein wenig, da die Dateien hier ja keine Hardlinks sein sollten, sondern eins zu eins Kopien der Dateien in der Quelle.
Müsste es nicht so sein: bei backup.0 eine 1 hinter den Zugriffsrechten und bei backup.1 bis backup.3 eine 3?

Wenn die Quelle abraucht bringt mir ein Hardlink, der auf eine Datei in der Quelle verweist ja herzlich wenig. Oder hab ich da immer noch was nicht ganz verstanden?

Danke und Gruß,
andisk
 
A

Anonymous

Gast
andisk schrieb:
Wenn die Quelle abraucht bringt mir ein Hardlink, der auf eine Datei in der Quelle verweist ja herzlich wenig. Oder hab ich da immer noch was nicht ganz verstanden?
Bei Hardlinks gibt es keine Quelle, erst wenn der letzte Hardlink (oder Dateiname) der zu dieser Datei gehört gelöscht wird, wird die Datei gelöscht. Du kannst zB auch Hardlinks keine unterschiedlichen Rechte oder Zeitstempel geben, da diese alle in der Dateidaten (inode) gespeichert sind und die sind eben nur ein einziges mal vorhanden, auch wenn es verschiedene Dateinamen in verschiedenen Verzeichnissen dafür gibt.

Wenn du die Datei einmal mit eins und einmal mit 4 siehst, dann sind das 2 Dateien in unterschiedlichen Verzeichnissen. Einmal mit 4 Hardlinks und einmal nur eine Datei mit nur einem Namen. Hardlinks gehen nicht über Verzeichnisgrenzen hinweg. Jeder Hardlink hat genau die selbe Zahl an Dateinamen die du mit ls -l siehst. Wenn also ein neuer Hardlink zu eine Datei hinzukommt, dann wird diese Zahl bei allen anderen Dateinamen auch automatisch um eins größer.

Wenn du mit deinem rsync Hardlinks erzeugst, dann wird das wahrscheinlich so sein, das du die selbe Datei schon in verschiedenen Sicherungen gesichert hast. (so sollte es jedenfalls sein wenn es richtig ist) Die Datei ist dann nur einmal physikalisch als wirkliche Daten vorhanden hat aber in jeder Sicherung einen Dateinamen der auf diese Daten verweist.
Würdest du die Orginaldatei ändern, dann würde bei der nächsten Sicherung nicht wieder ein Hardlink gemacht, sondern die Datei dann als neue Datei in die Sicherung kopiert. Der Dateiinhalt ist ja jetzt ein anderer als in den früheren Sicherungen, also muss auch eine neue Datei angelegt werden. Die alten Sicherungen greifen über ihre Hardlinks solange auf die alten Datei zurück bis auch der letzte dieser alten Dateinamen in der Sicherung gelöscht worden ist. In der neuen Sicherung wird aber immer auf die neuen Daten also die neue Datei zugegriffen.

Andern sich Dateien nicht werden also nur weitere Hardlinks angelegt, ändern sich die Dateien werden jedesmal neue Dateien angelegt.

robi
 

Luzandro

Newbie
andisk schrieb:
Wenn die Quelle abraucht bringt mir ein Hardlink, der auf eine Datei in der Quelle verweist ja herzlich wenig. Oder hab ich da immer noch was nicht ganz verstanden?

Hardlinks funktionieren nur innerhalb einer Partition, also wenn das Backup auf der gleichen Platte liegt wäre das sowieso schon mal suboptimal, allerdings gibts bei dir eh keine Links auf die Quelle.

In den Verzeichnissen backup.0 bis backup.3 steht hinter den Rechten der zwei Dateien jeweils eine 4. Bei backup.0 verwundert mich das ein wenig, da die Dateien hier ja keine Hardlinks sein sollten, sondern eins zu eins Kopien der Dateien in der Quelle.
Müsste es nicht so sein: bei backup.0 eine 1 hinter den Zugriffsrechten und bei backup.1 bis backup.3 eine 3?
Nur wenn sich die Datei geändert hat. Der Hardlink auf die 0er-Dateien ist ja der einzige, den du explizit anlegst:
Code:
cp -al /backup.0/ /backup.1
Wichtig dabei ist nur, dass rsync bei einer Änderung eine NEUE Datei anlegt und nicht die vorhandene ändert (das könntest du ihm mit --inplace auch sagen), da sonst natürlich die Änderung alle Links betreffen würde
 
OP
A

andisk

Newbie
@ robi: Vielen Dank, es wurde einiges klarer, wenn auch nicht alles!

@ Luzandro:

Luzandro schrieb:
Hardlinks funktionieren nur innerhalb einer Partition, also wenn das Backup auf der gleichen Platte liegt wäre das sowieso schon mal suboptimal, allerdings gibts bei dir eh keine Links auf die Quelle.

Keine Sorge, das ist nur beim Testszenario auf der selben Platte. Für das richtige Backup verwende ich eine externe HD.

Summa summarum kann man dann also sagen, dass das Backup, so wie ich es eingerichtet habe, richtig ist?

Danke euch!
Grüße andisk
 

ixo

Newbie
Hallo andisk,

versuch 'mal storebackup (http://savannah.gnu.org/projects/storebackup, die Version in Suse ist veraltet + hier gibt's auch umfängliche Doku), dann benötigst Du wesentliche weniger Plattenplatz, da u.a. Umbenennungen von Dateien erkannt und die Dateien komprimiert werden können.
StoreBackup erlaubt auch die Zurücksicherung der Dateien mit einem Skript, das alle Rechte, Owner und Hard Links im Original wieder setzt. Mit rsync geht das prinzipbedingt nicht vollständig.
Außerdem löscht storeBackup die alten Sicherungen nach flexible vorgebbaren Regeln.

Gruß, ixo
 
Oben