Start Dateiverwaltung Packen/Komprimieren/Sichern
Packen/Komprimieren/Sichern E-Mail
Geschrieben von: tpm   

Obwohl Packen und Komprimieren unterschiedliche Verfahren darstellen, tritt in der Linux Welt das eine ohne das andere nur selten auf. Dies hat auch gute Gründe.

 

Beim Packen werden in der Regel mehrere Dateien in einem Container zu einer Datei zusammengefasst. Dies alleine kann in vielen Fällen schon einen Nutzeffekt haben. Wenn man beispielsweise mehrere Bilder per E-Mail versenden möchte ist es praktischer, wenn diese nicht einzeln als Anlage angefügt werden müssen, sondern als eine Datei.

 

Bildliche Darstellung des Packens

 

Unter Linux verwendet man dafür den tar (tape archiver). Das Standard Programm zum Packen von Dateien. In den Standardeinstellungen, also ohne weitere Optionen, verhält sich tar wie folgt:

  • Dateien und Ordner behalten ihre ursprünglichen Dateiberechtigungen und Besitzverhältnisse
  • Ordnerstrukturen werden mitgesichert
  • Dateien mit gleichem Namen ohne Vorwarnung überschrieben
  • Ordnerinhalte werden ergänzt

Diesen Merkmalen sollte man sich bei dessen Benutzung immer bewusst sein. Die Möglichkeiten die sich dadurch ergeben, aber auch die Probleme zu denen dies führen kann, werden im weiteren Verlauf dieses Beitrags angesprochen.

Ein Packvorgang mit dem tape archiver folgt einer einfachen Syntax:

 

example
tar -cvf Archivname.tar Datei1 Datei2 Datei3

 

Mit diesem Schema werden die Dateien Datei1 Datei2 Datei3 in das Archiv Archivname.tar gepackt. Die originalen Dateien bleiben natürlich erhalten. Mit der Option c gibt man an, dass gepackt werden soll und mit f wird das Zielarchiv angesprochen. Die Option v gibt den kompletten Packvorgang auf der Konsole aus und sollte immer bei allen tar-Operationen als Option verwendet werden.

Das Entpacken eines Archivs wird mit mit folgender Syntax durchgeführt:

 

example
tar -xvf Archivname.tar

 

Durch die Option x werden alle im Archiv enthaltenen Dateien werden in das lokale Verzeichnis entpackt.

Wenn man einmal auf ein Archiv stößt und es nicht zuordnen kann, besteht die Möglichkeit sich den Inhalt des Archivs auflisten zu lassen, ohne dass das Archiv wirklich entpackt wird.

 

example
tar -tvf Archivname.tar

 

Das Programm tar ist in seinen Optionen und Argumenten sehr flexibel. Es bietet Funktionen wie das inkrementelle Sichern in ein Archiv, das Setzten von Rechten, absolute und relative Pfadangaben in den Argumenten, sowie das Entpacken oder Löschen von einzelnen Dateien in einem Archiv. Folgend werden einige Beispiele vorgestellt und näher erläutert.

 

Ein Benutzer speichert alle seine Dokumente im Verzeichnis documents/, welches sich in seinem Heimatverzeichnis befindet. Diese möchte er auf einem Bandlaufwerk sichern. Dazu wechselt er in sein Heimatverzeichnis und startet den Sicherungsvorgang:

 

input
tar -cvf /mnt/tapedrive/document_backup.tar -g /mnt/tapedrive/backup.log documents/

 

output
documents/
documents/dokument_1
documents/dokument_2
documents/dokument_3 documents/dokument_4
...

 

Mit diesem Kommando werden alle Dateien im Verzeichnis documents auf dem Bandlaufwerk gesichert. Sollte der Ordner documents/ weitere Unterordner enthalten, wird automatisch rekursiv gesichert. Also wirklich alle Dateien und Ordner aus dem angegebenen Verzeichnis. Wenn die zu sichernde Datenmenge die Kapazität des Speichermediums überschreiten sollte, kann man mit der zusätzlichen Option M ein Multi Volume Archive erstellen lassen. Sobald das erste Speichermedium voll ist, wird zum einlegen eines weiteren Speichermediums aufgefordert, bevor weiter gesichert wird. Die Option -g erstellt automatisch eine Log-Datei. Damit ist es möglich weitere inkrementelle oder differenzielle Sicherungen durchzuführen:

 

input
tar -cvf /mnt/tapedrive/document_backup_ink01.tar -g /mnt/tapedrive/backup.log documents/

 

Für die inkrementelle Sicherung ist lediglich der Name der Sicherungsdatei anzupassen. Das Programm tar erkennt nun, dass bereits eine Log-Datei existiert und anhand der darin enthaltenen Prüfsummen werden diesmal nur Änderungen gesichert. Für weitere inkrementelle Sicherungen ist einfach der Name der Sicherungsdatei anzupassen. (..._ink02, ..._ink03, etc.)

 

input
cp /mnt/backup/backup.log /mnt/backup/backup_ref.log
tar -cvf /mnt/tapedrive/document_backup_diff01.tar -g /mnt/tapedrive/backup.log documents/
cp /mnt/backup/backup_ref.log /mnt/backup/backup.log

 

Für die diffenrenzielle Sicherung sind einige Maßnahmen mehr erforderlich. Da eine differenzielle Sicherung immer alle Daten abspeichert die sich nach dem letzten Vollbackup geändert haben, muss dafür gesorgt werden, dass die zu verwendende Log-Datei auch die ist, die nach dem Vollbackup erstellt wurde. Durch das umkopieren vor und nach einer Sicherung, wird diese Anforderung erfüllt. Für weitere differenzielle Sicherungen ist wieder zusätzlich der Name der Sicherungsdatei anzupassen.

 

Um das Vollbackup wieder einzuspielen, muss der Benutzer den Entpackvorgang wieder aus seinem Heimatverzeichnis heraus starten, damit die Verzeichnisstruktur erhalten bleibt:

 

input
tar -xvf /mnt/tapedrive/document_backup.tar

 

output
documents/
documents/dokument_1
documents/dokument_2
documents/dokument_3 documents/dokument_4
...

 

Sollten sich mittlerweile neuere Dokumente angesammelt haben, werden diese durch die aus dem Backup ergänzt. Bestehende Dokumente mit gleichem Namen werden allerdings gnadenlos überschrieben! Für das Aufspielen eines inkrementellen Backups müssen darauffolgend alle einzelnen Backups in chronoligisch aufsteigender Reihenfolge nach dem gleichen Schema aufgespielt werden. Beim differenziellen Backup ist zusätzlich lediglich die letzte Sicherung erforderlich.

 

Im nächsten Beispiel wird es etwas komplexer. Ein Benutzer möchte einem Bekannten seine Urlaubsfotos auf einem USB Stick zur Ansicht mitgeben. Diese befinden sich unter dem Ordner pictures/holiday/rome/ in seinem Heimatverzeichnis. Der Inhalt dieses Verzeichnisses sieht wie folgt aus:

 

example
-rw------- 1 mike user    2368554 2009-10-01 09:00 pic0123.jpg
-rw------- 1 mike user    2489514 2009-10-01 09:00 pic0124.jpg
-rw------- 1 mike user 2698745 2009-10-01 09:00 pic0125.jpg
-rw------- 1 mike user 2113698 2009-10-01 09:00 pic0126.jpg
...

 

Wie an den Dateirechten zu erkennen ist, dar sich nur der Benutzer mike die Bilder anschauen. Da sich der Benutzer mike zudem aktuell nicht in seinem Heimatverzeichnis befindet, den Pfad zu den Bilder aber kennt, erstellt er das Archiv mit absoluter Pfadangabe:

 

input
tar -cvf /mnt/usb/urlaubsfotos.tar /home/mike/pictures/holiday/rome/

 

Das Archiv übergibt er seinem Bekannten james, der die Bilder zur Ansicht in seine Heimatverzeichnis in den Ordner pictures/ einspielt:

 

input
tar -xvf /mnt/usb/urlaubsfotos.tar ~/pictures/

 

Nun hat er mehrere Probleme. Da das Archiv mit absoluter Pfadangabe erstellt wurde, wurde diese auch beim Entpacken des Archivs wieder rekonstruiert. Daher ergibt sich bei ihm nun folgende Ordnerstruktur:

 

example
/
|-home
|-james
|-pictures
|-home
|-mike
|-pictures
|-holiday
|-rome
+-pic0123.jpg
+-pic0124.jpg
+-pic0125.jpg
+-pic0126.jpg
+-...

 

Dies hätte vermieden werden können, wenn sich der Ersteller des Archivs vorher Gedanken gemacht hätte (absolute Pfadangaben nur bei berechtigtem Grund verwenden!) oder der Empfänger das Archiv vor dem Entpacken mit der Option t erst geprüft hätte.

Um dieses Dilema zu beseitigen, möchte der Benutzer james die Bilder einfach in sein Verzeichnis pictrues/ kopieren. Aber da steht er vor dem nächsten Problem. Die Bilder sind nur für den Benutzer mike lesbar. Dieser wird aber mit hoher Wahrscheinlichkeit nicht auf dem lokalen System existieren. Also muss der Benutzer james nun erstmal die Besitzrechte übernehmen.

Man sieht also, dass man mit tar auch oft Probleme verursachen kann. Aber durch die überlegte Anwendung und dem Einsatz der vielen Optionsmöglichkeiten bleibt es ein äußerst flexibles und mächtiges Werkzeug zum Packen.

 

Nun dient das Packen selbst mehr der Benutzerfreundlichkeit. Erst wenn die Daten zusätzlich komprimiert werden, ergibt sich ein technischer Vorteil. Hat man wieder mehrere Daten zu versenden, ermöglicht die Komprimierung das schnellere Versenden und auf der Empfängerseite das schnellere Empfangen der Daten.

 

Der Unterschied zwischen gepackten und zusätzlich komprimierten Dateien

 

Anmerkung: Komprimierungsverfahren werd in zwei Klassen eingeteilt: verlustbehaftete und verlustfrei. Verlustbehaftete Komprimierungsverfahren werden vornehmlich bei Multimediadaten (mpeg, mp3, jpeg) eingesetzt. Verlustfreie Komprimierungsverfahren überall dort, wo der Urzustand der Daten nach dem dekomprimieren wieder hergestellt werden muss. Dazu zählen auch die hier vorgestellten Komprimierungsverfahren.

Um ein Archiv zusätzlich verlustfrei zu komprimieren, stellt Linux mehrere Programme zur Verfügung. Das gängigste ist gzip:

 

example
gzip Archivname.tar

 

Schon hat man das Archiv gepackt, welches nun im lokalen Verzeichnis als Archivname.tar.gz aufgelistet wird. Natürlich kann man auch nur einzelne Dateien mit gzip direkt packen. Zum entpacken benutzt man den Befehl gunzip:

 

example
gunzip Archivname.tar

 

Nun besitzt tar aber auch die Fähigkeit das Packen und Komprimieren in einem Durchgang durchzuführen. Anhand des ersten Beispiels wird nun direkt gepackt und komprimiert. Dafür ist die Option z erforderlich.

 

example
tar -czvf Archivname.tar.gz Datei1 Datei2 Datei3

 

Für das Entpacken muss nur die Option c durch die Option x ausgetauscht werden.

 

example
tar -czvf Archivname.tar.gz Datei1 Datei2 Datei3

 

Fast genau so weit verbeitet ist bzip2, dessen Anwendung und Merkmale im Zusammenhang mit tar auch kurz angesproche nwerden sollen:

  • tar-Option beim Packen und Entpacken ist j
  • Dateiendungen entweder tar.bz2 oder tbz2

 

Weitere Informationen:

  • Alternativen zu tar sind dar oder star, welche beispielweise auch ACLs berücksichtigen
Zuletzt aktualisiert am Donnerstag, den 08. Oktober 2009 um 12:45 Uhr