Im Alltag kommt durchaus die Situation vor, daß eine Datei vergleichsweise groß wird und Sie unerwartet an die Grenzen des Dateisystems des verwendeten Datenträgers stoßen. Der klassische Fall ist das Transportieren eines ISO-Images oder einer Virtuellen Maschine auf einem USB-Stick oder einer USB-Festplatte. Häufig sind USB-Sticks von Hause aus mit dem VFAT-Dateisystem formatiert. Eine Datei darf dort maximal 4GB groß werden. Bei einer Virtuellen Maschine wird diese Grenze schnell erreicht -- Dateigrößen von 4 bis 8 GB sind keine Seltenheit.
Um die Situation zu lösen, kommen ein direkter Datentransfer über eine Netzverbindung mittels scp oder ftp oder aber das Formatieren des Datenträgers -- bspw. mit ext2, ext3 oder ext4 -- in Betracht. Die Grenze bei der Dateigröße liegt zwischen 16TB bei ext2 und der Größe des Dateisystems bei ext4. Bitte beachten Sie, dass bei einem Formatieren des Datenträgers sämtliche darauf bestehenden Daten verloren gehen.
Sind die oben genannten Vorschläge nicht praktikabel, bleibt nur, die Datei in kleinere Stücke zu zerlegen und auf dem Zielsystem wieder zusammenzusetzen. Unter UNIX/Linux existieren dafür die beiden Kommandos split und cat -- split zerlegt und cat hilft beim Zusammenfügen der Einzelteile.
Ohne Angabe weiterer Parameter zerlegt split die benannte Datei in Einzelteile mit einer Länge von je 1000 Zeilen. Diese Voreinstellung ist praktisch für Textdateien. Für ein ISO-Image oder eine Virtuelle Maschine hilft Ihnen diese Angabe aber eher wenig. Mit dem Paramter --bytes=Wert (oder -b Wert) kann split auch bytegenau teilen.
Möchten Sie beispielsweise nachfolgende ISO-Datei (debian-6.0.4-i386-netinst.iso) mit einer Größe von 191 MB in Häppchen zerteilen, die maximal 50 MB groß werden, genügt folgender Aufruf:
split --bytes=50M debian-6.0.4-i386-netinst.iso
Split zerlegt die Datei in die 4 Teile xaa bis xad. xaa, xab und xac sind dabei exakt 50MB groß, xad enthält hingegen die restlichen Daten mit rund 41MB. Die Benennung der Ausgabedateien mit dem Präfix x und den beiden nachfolgenden, stets fortgezählten Buchstaben (Suffix) ist der Defaultwert.
Über zusätzliche Parameter im split-Aufruf können Sie die Benennung der Ausgabedateien ihren Vorstellungen anpassen. Den Hauptbestandteil für den Dateinamen übermitteln Sie split, indem Sie obigen Aufruf um ein Präfix ergänzen:
split --bytes=50M debian-6.0.4-i386-netinst.iso teilbereich-
Alle erzeugten Dateien heißen nun teilbereich-aa bis teilbereich-ad. Über die beiden Parameter -d und -a können Sie die Suffixe beeinflussen. -d erzeugt numerische Suffixe, -a Anzahl bestimmt die Länge der Suffixe. Der Standardwert ist 2. Nachfolgender Aufruf erzeugt die vier Dateien teilbereich-000 bis teilbereich-003:
$ split --bytes=50M -d -a 3 debian-6.0.4-i386-netinst.iso teilbereich-
$ ls -lah teilbereich*
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teilbereich-000
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teilbereich-001
-rw-r--r-- 1 frank frank 50M 30. Apr 10:33 teilbereich-002
-rw-r--r-- 1 frank frank 41M 30. Apr 10:33 teilbereich-003
$
Was noch fehlt, ist das Zusammenkleben der Einzelteile. Dazu genügt eine for-Schleife in der bash:
for datei in `ls teilbereich* | sort`; do cat $datei >> neu.iso; done
Jede Datei, auf die das Muster teilbereich* paßt, wird mit cat ausgegeben. Die Ausgabe wird in eine Datei umgeleitet, die hier der Einfachheit halber nur neu.iso heißt. Beim ersten Aufruf wird die Datei erzeugt -- eine eventuell bestehende Datei wird dabei kompromisslos überschrieben. Der Umleitungsoperator >> sorgt dafür, daß die Ausgaben der nachfolgenden Dateien an die bereits bestehende Datei neu.iso angefügt werden. Daß die Dateien auch in der richtigen Reihenfolge verarbeitet werden, gelingt mit dem Aufruf `ls teilbereich* | sort`. ls ermittelt die Liste der zu verarbeitenden Dateien und sort sortiert diese Liste in aufsteigender Reihenfolge.
Sicherheitshalber prüfen Sie, daß beim Zerlegen und Zusammenfügen keine Fehler passiert sind und beide ISO-Dateien (Original und Kopie) identisch sind. Das von Hand byteweise zu vergleichen, dauert zu lang und ist zudem fehlerträchtig. Zu Hilfe kommen uns die UNIX-Kommandos cmp und diff, mit denen sich beide Dateien auf mögliche Unterschiede prüfen lassen:
diff debian.iso neu.iso
cmp debian.iso neu.iso
Erfolgt keine Ausgabe, sind beide ISO-Dateien identisch. Ein weiterer, eleganter Weg ist die Erzeugung eines Hashwertes -- hier MD5. Diesen Hashwert generieren Sie mit Hilfe des Kommandos openssl:
$ openssl dgst -md5 debian.iso
MD5(debian.iso)= ff79f60c4d1fee2d47baadcbf081e5b6
$ openssl dgst -md5 neu.iso
MD5(neu.iso) = ff79f60c4d1fee2d47baadcbf081e5b6
$
Sind beide Hashwerte gleich, liegt eine vollständige Übereinstimmung der beiden Dateien vor und die Übertragung war fehlerfrei.
Links und ähnliche Beiträge
Beschreibung zu split im Ubuntu-Wiki: http://wiki.ubuntuusers.de/split



Kommentare
Kommentare deaktiviert.