Dieses Kapitel beschreibt die Abhängigkeiten (oder auch nicht vorhandenen Abhängigkeiten), wenn alle Backups vollständig erzeugt wurden. Das bedeutet, dass keinerlei „late-links`` zu erzeugen und das alle Replikationen abgeschlossen sind. Um ein Backup, mit „lateLinks`` oder Replikationen zu vervollständigen musst Du storeBackupUpdateBackup.pl verwenden. Wenn Du während der Erstellung abgebrochene Backups hast, sind diese einfach defekt und daher auf ihre Weise auch „fertig``.58
Ein einfaches, erzeugtes Backup (ohne Replikation, ohne lateLinks) ist nichts als ein Verzeichnis mit Dateien darin. Es befindet sich in backupDir/series/timestamp. Die Dateien in dem Backup können per Hardlink mit anderen Dateien im selben Verzeichnis oder mit Dateien irgendwo anders (normalerweise andere Backups) verbunden sein. Das Verwenden von Hardlinks hat nichts mit storeBackups Funktionalität zu tun. (Natürlich versucht storeBackup Hardlinks zu verwenden um Platz zu sparen (Deduplikation), aber mehr bedeuten sie nicht.) Machen wir folgendes Gedankenexperiment: Du hast zwei Dateien im Backup, die durch Hardlinks verbunden sind, und löscht eine davon. Dann kopierst Du die verbliebene so, dass sie mit derselben Kombination aus Pfad / Dateiname den Platz der anderen einnimmt. Das Resultat sind zwei Dateien mit demselben Inhalt anstelle von einer Datei (Inode) mit zwei Hardlinks. Diese (nutzlose) Änderung im Backup hat für storeBackup keine Bedeutung; es ist nicht einmal in der Lage, die Änderung zu erkennen.
Es ist folglich sehr einfach: storeBackup weiß nichts davon und kümmert sich auch nicht darum, ob (identische) Dateien mit Hardlinks verbunden sind oder nicht. Das ist der Grund dafür, warum Du (vollständige) Backups (ohne lateLinks Referenzen auf sie) löschen kannst, wie Du willst (das Löschen betrifft nur die Anzahl der Hardlinks in anderen Backups) oder warum Du Deine Backups auf andere Dateisysteme mit weniger oder mehr unterstützten Hardlinks pro Datei mit linkToDirs.pl kopieren kannst. Die Hardlinks werden ausschließlich durch das Dateisystem verwaltet, nicht durch storeBackup.
Aber storeBackup hat andere Informationen über das Backup. In jedem Backup gibt es eine Datei namens .md5CheckSums.bz2 (eventuell nicht komprimiert). Sie hat folgende Struktur:
# contents/md5 compr dev-inode inodeBackup ctime mtime atime size uid gid mode filename dir 0 18-139259 0 1376114212 1376114212 1376114500 0 1049 1049 509 sub1 c5f89e40c144b6fb8b61f2ef72e4b556 c 18-141517 148481 1376114209 1376114209 1376114500 31400 1049 1049 493 pwd c5f89e40c144b6fb8b61f2ef72e4b556 c 18-141521 148481 1376114212 1376114212 1376114500 31400 1049 1049 493 sub1/pwd b5607b4dc7d896c0fab5c4a308239161 c 18-141513 147606 1376114202 1376114202 1376114500 110088 1049 1049 493 ls b5607b4dc7d896c0fab5c4a308239161 c 18-141516 147606 1376114205 1376114205 1376114500 110088 1049 1049 493 sub1/ls
Dies ist die Ausgabe eines kleinen Beispiels. In der ersten Spalte siehst Du das Schlüsselwort ,dir` mit der Bedeutung, dass die in der Zeile beschriebenen Elemente Verzeichnisse sind. Darunter siehst Du die md5-Summen der Dateien pwd und ls in verschiedenen Unterverzeichnissen. Du stellst auch fest, dass einige der md5 Summen identisch sind - es handelt sich also um Kopien derselben Dateien in unterschiedlichen Verzeichnissen. Es gibt noch eine weitere Datei, .md5CheckSums.info:
version=1.3 date=2013.08.10 08.04.29 sourceDir='/tmp/a/s' followLinks=0 compress='bzip2' uncompress='bzip2' '-d' postfix='.bz2' comprRule='$size > 1024 and' 'not $file =~ /\.zip\Z|\.bz2\Z|\.gz\Z|\.tgz\Z|\.jpg\Z|\.gif\Z|\.tiff?\Z|\.mpe?g\Z|\.mp[34]\Z|\.mpe?[34]\Z|\.ogg\Z|\.gpg\Z|\.png\Z|\.lzma\Z|\.xz\Z|\.mov\Z/i' exceptDirs= includeDirs= exceptRule= includeRule= writeExcludeLog=no exceptTypes= archiveTypes= specialTypeArchiver=cpio checkBlocksRule0= checkBlocksBS0= checkBlocksCompr0= checkBlocksRead0= checkBlocksRule1= checkBlocksBS1= checkBlocksCompr1= checkBlocksRead1= checkBlocksRule2= checkBlocksBS2= checkBlocksCompr2= checkBlocksRead2= checkBlocksRule3= checkBlocksBS3= checkBlocksCompr3= checkBlocksRead3= checkBlocksRule4= checkBlocksBS4= checkBlocksCompr4= checkBlocksRead4= preservePerms=yes lateLinks=no lateCompress=no cpIsGnu=no logInBackupDir=no compressLogInBackupDir=no logInBackupDirFileName='.storeBackup.log' linkToRecent=
Sie übermittelt den storeBackup-Skripten Informationen, die benötigt werden, um weiterführende Aktionen mit den Backups durchzuführen, z.B. wie zurückgesichert werden soll: In diesem Beispiel haben die komprimierten Dateien im Backup die Endung .bz2 (Schlüsselwort postfix) und sollen mit dem externen Kommando bzip2 -d (Schlüsselwort uncompress) entpackt werden.59
Weiterhin gibt es noch ein leeres Verzeichnis mit der Bezeichnung .storeBackupLinks, das Informationen darüber enthält, ob es mit lateLinks erzeugt wurde und noch nicht mit storeBackupUpdateBackup.pl vervollständigt wurde. Aber das wird später erklärt.
Der Eintrag für „Kompression`` (c oder u) kann zusätzlich der Wert b annehmen. Das bedeutet, dass die entsprechende Datei ein „blocked file`` ist. Anstelle der Datei wird im Backup ein gleichnamiges Verzeichnis angelegt. Neben den aufgespaltenen Teilen der Datei existiert dort eine Datei namens .md5BlockCheckSums.bz2, in der die Informationen über Teilstücke des „blocked files`` stehen, z.B.:
66fa1a8f82c35ca87a08aed9701c5d20 c add_VirtualBox/HardDisks/debian.vdi/0000000001.bz2 c522c1db31cc1f90b5d21992fd30e2ab c add_VirtualBox/HardDisks/debian.vdi/0000000002.bz2 c522c1db31cc1f90b5d21992fd30e2ab c add_VirtualBox/HardDisks/debian.vdi/0000000003.bz2 c522c1db31cc1f90b5d21992fd30e2ab c add_VirtualBox/HardDisks/debian.vdi/0000000004.bz2 .....
Die erste Spalte enthält die md5 Summen, die zweite c (komprimiert / compressed) oder u (unkomprimiert / uncompressed) sowie die relative Pfad/Name Kombination eines jeden Blocks in dem Backup.
Schlussfolgerung
Mit Hilfe der vorangegangenen Informationen ist offensichtlich, dass storeBackup ziemlich unempfindlich gegen Manipulationen ist, die Du mit dem Backup anstellen kannst - natürlich nur, wenn Du die Integrität einzelner Backups nicht zerstörst. Da kannst Backups kopieren, Serien („series``) oder sogar einzelne Backups verschieben. Falls Du das tust, musst Du die Änderungen natürlich in den Pfaden und Bezeichnungen („series``) in den Konfigurationsdateien entsprechend nachziehen.