it-swarm.com.de

Erstellen Sie ein Teerarchiv, das in Blöcke maximaler Größe aufgeteilt ist

Ich muss ein ziemlich großes Verzeichnis sichern, bin aber durch die Größe der einzelnen Dateien begrenzt. Ich möchte im Wesentlichen ein tar.(gz|bz2) - Archiv erstellen, das in maximal 200 MB große Archive aufgeteilt ist. Clonezilla macht etwas Ähnliches, indem es Image-Backups wie folgt aufteilt:

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

Gibt es eine Möglichkeit, dies in einem Befehl zu tun? Ich verstehe, wie man den Befehl split verwendet, aber ich möchte nicht ein einziges riesiges Archiv erstellen und es dann in kleinere Archive aufteilen müssen, da dies den Speicherplatz verdoppeln würde, den ich anfänglich benötigen würde Erstellen Sie das Archiv.

90
Naftuli Kay

Sie können Teer an den Befehl split weiterleiten:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

Auf einigen * nix-Systemen (wie OS X) wird möglicherweise der folgende Fehler angezeigt:

split: illegal option -- -

In diesem Fall versuchen Sie dies (beachten Sie das -b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

Wenn Sie zufällig versuchen, eine Datei so zu teilen, dass sie auf ein FAT32-formatiertes Laufwerk passt, verwenden Sie ein Bytelimit von 4294967295. Beispiel:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.
118
jordanm

Unter macOS funktioniert der Befehl split etwas anders:

$ tar cvzf - foo | split -b 2500m - foo.tgz.
14
Erik Kaplun

Nur zum Hinzufügen: Da die maximal zulässige Dateigröße in vfat/fat32 2 ^ 32 minus 1 (4294967295 Byte) beträgt, lautet der Befehl split mit der maximal zulässigen Dateigröße in einem solchen Dateisystem:

split -b4294967295 -d my_input_file my_output_file_splitted
5
Aydin K.
[email protected]:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

Sie benötigen ein Skript für die Automatisierung, um die Datei pseudo-tape.tar unter einem neuen Namen zu verschieben:

[email protected]:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"
3