daten_packen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| daten_packen [2021-08-13 14:35:43] – manfred | daten_packen [2023-12-12 18:29:04] (aktuell) – [Daten packen] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Daten packen ====== | ||
| + | |||
| + | * [[::tar]] - //Der Klassiker, faßt ganze Verzeichnisbäume zu einer einzigen Datei zusammen// | ||
| + | * [[https:// | ||
| + | * [[::XZ]] - //Der Neue, wird gelegentlich als TAR-Ersatz verwendet - Windows unterstützt diesen Packer auch und somit ist er für Kompatibilität zu bevorzugen// | ||
| + | |||
| + | > tar -caf archiv.txz verzeichnis | ||
| + | > tar -caf archiv.tar.zst verzeichnis | ||
| + | |||
| + | |||
| + | ===== Beispiel für ein mit Passwort geschütztes Archiv ===== | ||
| + | |||
| + | Aufgabenstellung: | ||
| + | Es soll das Verzeichnis " | ||
| + | Dabei sollen unter Linux nur " | ||
| + | |||
| + | beispielhafte Lösung: | ||
| + | > time tar cf - --exclude='/ | ||
| + | | ||
| + | > zcat daten.tar.gpg.gz | gpg --no-options --no-symkey-cache -d --batch --passphrase Geheim01 | ||
| + | |||
| + | //In diesem Fall kann GZIP sehr effektiv packen, weil GPG hier nur Textdaten an GZIP übergibt.// | ||
| + | |||
| + | * __gegenüber OpenSSL hat GPG zwei Vorteile:__ | ||
| + | - man muß beim entschlüsseln nicht wissen wie das Archiv genau verschlüsselt wurde | ||
| + | - in OpenSSL gibt es nur [[:: | ||
| + | * __siehe auch:__ | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | * [[:: | ||
| + | |||
| + | verschlüsseltes Archiv überprüfen: | ||
| + | > zcat daten.tar.gpg.gz | gpg --no-options --batch --passphrase geheim -do - | tar tf - | ||
| + | |||
| + | verschlüsseltes Archiv ins Home-Verzeichnis entpacken: | ||
| + | > zcat daten.tar.gpg.gz | gpg --no-options --batch --passphrase geheim -do - | tar f - -C ~/ | ||
| + | |||
| + | verschlüsseltes Archiv in kleine Häppchen aufteilen, damit es auch auf dem USB-Stick mit FAT-Dateisystem untergebracht werden kann: | ||
| + | > split -b 2000m daten.tar.gpg.gz daten_tar_gpg_gz. | ||
| + | > ls daten_tar_gpg_gz.* | ||
| + | daten_tar_gpg_gz.aa | ||
| + | daten_tar_gpg_gz.ab | ||
| + | daten_tar_gpg_gz.ac | ||
| + | |||
| + | alle Teile des verschlüsselten Archives ins Home-Verzeichnis entpacken: | ||
| + | > cat daten_tar_gpg_gz* > daten_tar_gpg.gz | ||
| + | > rm daten_tar_gpg_gz* | ||
| + | > zcat daten_tar_gpg.gz | gpg --no-options --batch --passphrase geheim -do - | tar f - -C ~/ | ||
| + | |||
| + | // | ||
| + | |||
| + | |||
| + | ===== Archive ===== | ||
| + | |||
| + | Um ein Verzeichnis von Dateien zu packen benötigt man ein Archivierungsprogramm. | ||
| + | |||
| + | Derartige Programme gibt es viele, allerdings ist hier das verbreitetste unser gutes altes //tar// und alle anderen Programme, die antraten um seine Nachfolge anzutreten, haben zu wenig Vorteile gehabt als das sie ihn vom Trohn stoßen könnten. | ||
| + | |||
| + | Hat man jetzt ein Archiv, dann kann man es, um Platz zu sparen, noch packen. | ||
| + | |||
| + | Dazu braucht man ein Packprogramm. | ||
| + | Davon gibt es ebenfalls recht viele, wobei jedes dieser Programme auch in einem anderen Umfeld seine speziellen Vorteile hat. | ||
| + | |||
| + | Das möchte ich hier nicht genauer beleuchte. | ||
| + | |||
| + | Wir konzentrieren uns auf die zwei verbreitetsten, | ||
| + | |||
| + | //gzip// schreibt für jede gepackte Datei nur einen Header, das hat seine Vor- und Nachteile! | ||
| + | |||
| + | Da //Gzip// nur einmal den Inhalt am Anfang der Datei analysiert und an Hand dieser Analyse einen vernünftigen Algorithmus auswählt, sollte man //gzip// nur für Dateien mit homogenem Inhalt (Textdateien, | ||
| + | |||
| + | Sollen dagegen Dateien mit inhomogenem Inhalt (MySQL-Bin-Logs, | ||
| + | |||
| + | |||
| + | ===== Einschränkungen ===== | ||
| + | |||
| + | |||
| + | ==== cpio (archivierer) ==== | ||
| + | |||
| + | kann nicht komprimieren; | ||
| + | kann nur ASCII und max. 8GB-Archive, | ||
| + | standardmäßig wird ein überflüssiges Binärformat verwendet | ||
| + | "-H crc": | ||
| + | "-H ustar": | ||
| + | Wegen seiner Dateigrößenbeschränkungen wird cpio nicht mehr von | ||
| + | der POSIX geführt, Nachfolger sollte afio werden; | ||
| + | Die POSIX führt pax als Nachfolger von cpio und tar ein. | ||
| + | und so trat pax die Nachfolge von cpio, tar und afio im POSIX-Standard an... | ||
| + | |||
| + | |||
| + | ==== tar (archivierer) ==== | ||
| + | |||
| + | - kann nur ASCII und max. 8GB-Archive, | ||
| + | - kann mit Hardlinks und Sparse-Dateien nicht richtig umgehen, was beim | ||
| + | - Wiedereinspielen eines Archivs zu Problemen führen kann; | ||
| + | - mit star und bsdtar versucht man die Schwächen von tar/GNU-tar | ||
| + | - zu vermeiden; | ||
| + | - mehr als 8GB gehen | ||
| + | - mit "-H ustar" (POSIX 1003.1-1988) | ||
| + | - und "-H posix" (POSIX 1003.1-2001) | ||
| + | - Solaris: mehr als 8GB gehen mit " | ||
| + | - Linux : benutzt standardmäßig "-H ustar" (POSIX 1003.1-1988) / (GNU-tar ist kein echtes POSIX-Format, | ||
| + | |||
| + | Die POSIX führte //pax// als Nachfolger von //cpio// und //tar// ein; | ||
| + | |||
| + | |||
| + | ==== afio (archivierer + packer) ==== | ||
| + | |||
| + | Nachfolger von cpio sollte afio werden, allerdings | ||
| + | stammt der Quellcode von afio aus einer zur LPGL (aktuelle Lizenz) | ||
| + | nicht kompatiblen Lizenz, aus diesem Grund hat die FSF afio aus ihrem | ||
| + | Software-Verzeichnis genommen; | ||
| + | |||
| + | |||
| + | ==== star (archivierer) ==== | ||
| + | |||
| + | - es kann //xz// nicht direckt einbinden | ||
| + | |||
| + | |||
| + | ==== pax (archivierer + packer) ==== | ||
| + | |||
| + | - POSIX-Nachfolger von cpio; | ||
| + | - benutzt standardmäßig "-x ustar" (POSIX 1003.1-1988) | ||
| + | - mit "-x cpio" ist es "IEEE 1003.2 / POSIX.2" | ||
| + | |||
| + | |||
| + | ==== rar (archivierer + packer) ==== | ||
| + | |||
| + | - steht unter Lizenzschutz / ist kommerziell | ||
| + | |||
| + | |||
| + | ==== XZ (packer) ==== | ||
| + | |||
| + | XZ kann zwei Formate: | ||
| + | - '' | ||
| + | - '' | ||
| + | |||
| + | |||
| + | ==== p7zip/7za (archivierer + packer) ==== | ||
| + | |||
| + | Der Unterschied zwischen '' | ||
| + | |||
| + | '' | ||
| + | * owner/group wird nicht gespeichert | ||
| + | deshalb wird noch ein archivierer (z.B. //tar// oder //star//) gebraucht. | ||
| + | |||
| + | Verwendet man //p7zip// mit //star//, dann legt //star// sein TAR-Archiv erst im /// | ||
| + | bevor das TAR-Archiv dann mit //p7zip// zum endgültigen komprimierten Archiv gemacht wird. | ||
| + | |||
| + | Man muss also im /// | ||
| + | |||
| + | |||
| + | ===== Vorteile ===== | ||
| + | |||
| + | |||
| + | ==== cpio (archivierer) ==== | ||
| + | |||
| + | gibt es auf allen Unix-Systemen; | ||
| + | |||
| + | |||
| + | ==== tar (archivierer) ==== | ||
| + | |||
| + | ist das verbreitetste Unix-Archivierungsprogramm; | ||
| + | |||
| + | |||
| + | ==== afio (archivierer + packer) ==== | ||
| + | |||
| + | afio komprimiert Dateiweise und verwendet blockweise komprimierende Algorithmen, | ||
| + | so das ein beschädigter Bereich nicht das gesamte Archiv zerstört, wie es | ||
| + | bei tar passieren kann; | ||
| + | |||
| + | |||
| + | ==== star (archivierer) ==== | ||
| + | |||
| + | - hat nicht die beschränkungen von //tar// | ||
| + | - verwendet die gleichen Prozeduren wie restore/ | ||
| + | - das Standard-Format '' | ||
| + | - mit " | ||
| + | - wird //star// mit dem Namen '' | ||
| + | - mit " | ||
| + | - mit " | ||
| + | - ein, durch verbesserte Pufferung, schneller Archivierer | ||
| + | - beherscht UNICODE UTF-8 | ||
| + | - versteht '' | ||
| + | - sollte ein Dateisystem beschädigt worden sein, kann //star// nach einem "fsck -y" alle fehlenden Dateien wieder entpacken (star -diff) ohne die vorhandenen unnötiger weise auch auspacken zu müssen | ||
| + | |||
| + | |||
| + | ==== pax (archivierer + packer) ==== | ||
| + | |||
| + | (Nachfolger für cpio und tar, einziger POSIX.2-Archivierer) | ||
| + | kann alle cpio- und tar-Archive lesen und schreiben; | ||
| + | kann POSIX.2; | ||
| + | |||
| + | |||
| + | ==== zip (archivierer + packer) ==== | ||
| + | |||
| + | ist das verbreitetste Windoofs-Archivierungsprogramm, | ||
| + | kann beschädigte Archive manchmal reparieren | ||
| + | |||
| + | |||
| + | ==== gzip (packer) ==== | ||
| + | |||
| + | sehr verbreitet, packt Dateien mit einheitlichen Dateninhalt am besten; | ||
| + | verbraucht sehr wenig Rechenleistung, | ||
| + | kann nur eine Datei komprimieren, | ||
| + | |||
| + | Es gibt auch eine Implementierung von GZip, die parallel auf mehreren CPU-Kernen gleichzeitig packen kann, sie heißt '' | ||
| + | '' | ||
| + | vollständiger Ersatz für gzip, der bei der Datenkompression mehrere Prozessoren oder Prozessorkerne nutzt. | ||
| + | |||
| + | Den besten Kompromiss zwischen Packungsdichte, | ||
| + | |||
| + | |||
| + | ==== bzip2 (packer) ==== | ||
| + | |||
| + | - sehr verbreitet, ist für Dateien mit gemischtem Dateninhalt optimiert; | ||
| + | - verbraucht deutlich mehr Rechenleitung als gzip; | ||
| + | - kann nur eine Datei komprimieren, | ||
| + | |||
| + | |||
| + | ==== rar (archivierer + packer) ==== | ||
| + | |||
| + | kann beschädigte Archive entpacken | ||
| + | |||
| + | |||
| + | ==== XZ (packer) ==== | ||
| + | |||
| + | Die [[http:// | ||
| + | - ca. 30% besser als //gzip// | ||
| + | - ca. 15% besser als //bzip2// | ||
| + | - legt crc64-Checksummen an und kann deshalb auch defekte Archive entpacken | ||
| + | - POSIX-konformer als //7zip// | ||
| + | - im LZMA-Format wird etwa doppelt so gut gepackt wie //bzip2// allerdings ohne Checksummen | ||
| + | |||
| + | |||
| + | ==== p7zip/7za (packer) ==== | ||
| + | |||
| + | Komprimiert teilweise besser als bzip2 und zip; | ||
| + | beherscht UNICODE, verschlüssellung, | ||
| + | Passwortschutz, | ||
| + | kann Archive mit beschädigten Dateien entpacken. | ||
| + | |||
| + | |||
| + | === Archivierungsprogramme, | ||
| + | |||
| + | Der Unterschied zwischen '' | ||
| + | |||
| + | - p7zip/7za (portabeles Kommandozeilenprogramm) | ||
| + | - star (einzige // | ||
| + | - ark (KDE-FrontEnd für verschiedene Kommandozeilenarchivierer) | ||
| + | - File Roller (GNOME-Archivierungstool) | ||
| + | - PeaZip (in Free Pascal geschrieben) | ||
| + | |||
| + | |||
| + | ===== Beispiele ===== | ||
| + | |||
| + | # find [Verzeichnis/ | ||
| + | # tar cjf [Archiv.tar.bz2] [Verzeichnis/ | ||
| + | # tar cJf [Archiv.tar.xz] [Verzeichnis/ | ||
| + | # tar cf - [Verzeichnis/ | ||
| + | # pax -wf [Archiv.tar] [Verzeichnis/ | ||
| + | # pax -wjf [Archiv.tar.bz2] [Verzeichnis/ | ||
| + | # 7za a [Archiv.7z] [Verzeichnis/ | ||
| + | # 7za a -sfx [Archiv.exe] [Verzeichnis/ | ||
| + | # 7za a -sfx -mx=9 [Archiv.exe] [Verzeichnis/ | ||
| + | # 7za a -v1g [Archiv.7z] [Verzeichnis/ | ||
| + | # pax -w [Verzeichnis/ | ||
| + | | ||
| + | # cat datei.img | ||
| + | # xz -t datei.img.xz | ||
| + | # cat datei.img.xz | xz -d > datei.img | ||
| + | |||
| + | ### mit star ein einfaches tar-Archiv (POSIX.1-1988) erstellen | ||
| + | # star cf [Archiv.tar] [Verzeichnis/ | ||
| + | |||
| + | ### mit star ein modernes tar-Archiv (POSIX.1-2001 + Erweiterungen) erstellen | ||
| + | # star c H=exustar -f [Archiv.tar] [Verzeichnis/ | ||
| + | |||
| + | ### mit star können auch ACL's gesichert werden | ||
| + | # star c H=exustar -acl -f [Archiv.tar] [Verzeichnis/ | ||
| + | |||
| + | ### star User-Daten, ACL's und Attribute sichern | ||
| + | # star c H=exustar -pax-p e -f [Archiv.tar] [Verzeichnis/ | ||
| + | |||
| + | ### star soll alle Meta-Daten sichern, die es sichern kann | ||
| + | # star c -dump -f [Archiv.tar] [Verzeichnis/ | ||
| + | |||
| + | ### mit star ein gepacktes tar-Archiv mit allen Meta-Daten erstellen | ||
| + | # star c -7z -dump -f [Archiv.tar.7z] [Verzeichnis/ | ||
| + | |||
| + | ### eine Datei verschlüsselt mit maximaler Kompression verpaken | ||
| + | # zip -9 -e [Archiv.tar.zip] [Datei] | ||
| + | # zip -9 -r -e [Archiv.tar.zip] [Verzeichnis/ | ||
| + | |||
| + | |||
| + | === Inhalt zeigen === | ||
| + | |||
| + | # cpio --list < [Archiv.tar] | ||
| + | # cpio --list < [Archiv.newc] | ||
| + | # pax [Archiv.tar] | ||
| + | # 7za l [Archiv.7z] | ||
| + | |||
| + | |||
| + | === testen === | ||
| + | |||
| + | # tar tJf [Archiv.tar.xz] | ||
| + | # xz -t [Archiv.tar.xz] | ||
| + | # xz -dc [Archiv.tar.xz] | pax | ||
| + | # 7za t [Archiv.7z] | ||
| + | # star t -7z -f [Archiv.tar.7z] | ||
| + | |||
| + | |||
| + | === entpacken === | ||
| + | |||
| + | # tar xJf [Archiv.tar.xz] | ||
| + | # pax -rf [Archiv] | ||
| + | # pax -rjf [Archiv.tar.bz2] | ||
| + | # xz -dc [Archiv.tar.xz] | pax -r | ||
| + | # 7za e [Archiv.7z] | ||
| + | # 7za x [Archiv.7z] | ||
| + | # 7za e -so [Archiv.tar.7z] | tar xf - # owner/group mit entpacken (relativer Pfad) | ||
| + | # 7za x -so [Archiv.tar.7z] | tar xf - # owner/group mit entpacken (absoluter Pfad) | ||
| + | # star x -7z -f [Archiv.tar.7z] | ||
| + | |||
| + | |||
| + | === kopieren === | ||
| + | |||
| + | # pax -rwp e [Quelle] [Ziel] | ||
| + | # mkdir -p [Ziel] ; star -copy -p [Quelle] [Ziel] | ||
| + | # star -copy [Quell-Datei] [Ziel-Verzeichnis] | ||
| + | # star -copy [Datei1] [Datei2] [Datei3] [Ziel-Verzeichnis] | ||
| + | # star -copy -C [Quell-Verzeichnis] . [Ziel-Verzeichnis] | ||
| + | # star c -dump -f - [Quell-Verzeichnis/ | ||
| + | # ssh root@192.168.0.1 'star c -dump -f - [Quell-Verzeichnis/ | ||
| + | # star c H=exustar -f - [Quell-Verzeichnis/ | ||
| + | # tar cf - [Quell-Verzeichnis/ | ||
| + | # ssh root@192.168.0.1 'tar cf - [Quell-Verzeichnis/ | ||
| + | |||
| + | |||
| + | === mit Passwort verschlüsseln === | ||
| + | |||
| + | # 7za a -mhe=on -p[geheim] [Archiv.7z] [Verzeichnis/ | ||
| + | |||
| + | |||
| + | ==== TAR - der bekannteste Vertreter ==== | ||
| + | |||
| + | ein unkomprimiertes Archiv anlegen | ||
| + | > tar cf Archiv.tar Datei_1.txt Datei_2.txt Datei_3.txt | ||
| + | |||
| + | zum unkomprimierten Archiv einige Dateien hinzufühgen | ||
| + | > tar rf Archiv.tar Datei_4.txt Datei_5.txt Datei_6.txt | ||
| + | |||
| + | den Inhalt des unkomprimierten Archives anzeigen bzw. das entpacken testen (Sicherheitsüberprüfung) | ||
| + | > tar tf Archiv.tar | ||
| + | |||
| + | den Inhalt des unkomprimierten Archives entpacken | ||
| + | > tar xf Archiv.tar | ||
| + | |||
| + | das komplette Home-Verzeichnis, | ||
| + | > tar cf - --exclude=' | ||
| + | |||
| + | __Die Option '' | ||
| + | |||
| + | das komplette Home-Verzeichnis, | ||
| + | > tar cf - --exclude=' | ||
| + | |||
| + | |||
| + | ===== Fazit ===== | ||
| + | |||
| + | Das beste Archivierungsprogramm ist //star//, da kein anderer Archivierer im Moment diese Geschwindigkeit bietet und dabei noch alle Meta-Daten, inklusive ACL's, speichern kann. | ||
| + | |||
| + | Und das beste Packprogramm ist //xz//, da es in meinem Praxistest sogar noch etwas besser gepackt hat als //7z// und darüber hinaus eine | ||
| + | bessere POSIX-konformität bietet als //7z//. Leider kann von beiden aber nur //7z// seine Archive mit Passwort schützen. | ||
| + | |||
| + | Leider lassen sich die beiden besten nur etwas umständlich kombinieren, | ||
| + | |||
| + | Die Kombination //star// und //7z// ist schnell, packt gut und ist einfach zu handhaben. | ||
| + | Damit ist das mein persönlicher Favorit (bis //star// auch noch mit //xz// umgehen kann). | ||
| + | |||
| + | # star c -7z -dump -f [Archiv.tar.7z] [Verzeichnis/ | ||
| + | |||
