So konvertieren Sie eine TAR-Datei in eine ISO-Datei

9

Ich habe eine Linux-TAR-Datei, die ich direkt in eine ISO konvertieren möchte. Gibt es eine Möglichkeit, dies vorzugsweise zu tun, ohne zuerst den Inhalt der Datei extrahieren zu müssen?

Dies wäre ähnlich der folgenden Frage ; Dies konzentriert sich jedoch auf einfache oder direkte TAR-Dateien und bezieht sich nicht auf bzip oder einen bzipped-TAR.

Dies ist auch etwas, das ich in einem Skript verwenden wollte, und der Grund, warum ich es nicht zuerst extrahieren möchte.

John
quelle
Theoretisch könnte dies geschehen, ohne dass jede der Dateien auf die Festplatte extrahiert werden muss (sie müssen aus dem Archiv extrahiert werden, um in das neue Image eingefügt zu werden), aber ich weiß nichts, was dies bewirkt.
Ignacio Vazquez-Abrams
Warum möchten Sie dies tun, ohne den Teer zu extrahieren?
Nils
Ich frage mich, ob es eine Möglichkeit gibt, es an etwas wie stdin weiterzuleiten und es dann an die ISO-Datei weiterzuleiten.
John
Ich bin nicht sicher, ob dies funktionieren würde oder nicht, da ich nicht 100% sicher bin, was der Befehl tut. - tar -jxf / dev / stdin file.tar | mkisofs -o file.iso -stream-media-size 512
John
Die Option -stream-media-size wurde tatsächlich dafür gemacht! :-) Informationen finden Sie auf der Genisoimage-Manpage. Derzeit wird in den Dokumenten für diese Option Teer erwähnt (und in den Beispielen dafür verwendet).
Abbafei

Antworten:

6

Verwenden Sie AVFS, um auf den Inhalt des Tar-Archivs zuzugreifen , als wäre es ein Verzeichnis. AVFS ist ein virtuelles Dateisystem, das auf FUSE basiert . Zeigen Sie mit Ihrem bevorzugten ISO-Builder auf das Verzeichnis im Teerarchiv.

mountavfs
cd ~/.avfs/path/to/archive.tar\#
genisoimage -o /path/to/iso .
Gilles 'SO - hör auf böse zu sein'
quelle
@ Gilles - danke für die Idee. Dies scheint eine hervorragende Idee zu sein. Ich bin jedoch unter CentOS 6 und habe Probleme beim Versuch, AVFS zu installieren.
John
1

Wenn Ihre Hauptziele darin bestehen, den Prozess zu beschleunigen und unnötige Festplattenaktivitäten aus Leistungsgründen zu vermeiden, und Sie im Verhältnis zur Größe Ihres Tarballs genügend RAM zur Verfügung haben, können Sie die .tar mithilfe von tmpfs in den RAM extrahieren . Diese Option ist sehr wahrscheinlich die schnellste, die verfügbar ist, es sei denn, Sie können den Pipe-Ansatz von @ bulleric zum Laufen bringen und von einer Festplatte lesen und auf eine andere schreiben.

Skyhawk
quelle
0
archivemount /file.tar /media/ISO

oder unkomprimierte .tar und

genisoimage -o myfile.iso directory_src

( kann Ordner sein /media/ISO oder Point-Mount sein /media/cdrom )

eternoi
quelle
-2

Sie müssen es extrahieren, aber Sie müssen es nicht auf Ihre Festplatte extrahieren. Sie können stdtout verwenden und es an genisoimage oder mkisofs weiterleiten

tar --to-stdout xf tareddata.tar | genisoimage -o image.iso tareddata

Probier es aus: mount -o loop image.iso /mnt

Sie können ein kleines Skript schreiben, um dieses Problem zu automatisieren

griechischer Stier

bullerisch
quelle
Und wie würde es eine Datei von der nächsten unterscheiden?
Ignacio Vazquez-Abrams
Wenn ich dies ausführe, erhalte ich eine Reihe von Fehlern. Der erste ist: tar: Sie müssen eine der -Acdtrux' or Optionen --test-label angeben . Der nächste Fehler ist: I: -Eingabe-Zeichensatz nicht angegeben, mit utf-8 (in den Gebietsschemaeinstellungen erkannt). Der letzte Fehler ist: genisoimage: Keine solche Datei oder kein solches Verzeichnis. Ungültiger Knoten - 'Taradaten'.
John
Das erste Problem, das ich löse, ist, dass ich eine falsche Option in Teer gewählt habe. das 2. hmm meiner meinung nach bekommt das erste verzeichnis den gleichen namen wie das nicht extrahierte verzeichnis wie tardata.tar tardata
bulleric
Entschuldigung, ich bin mir ziemlich sicher, dass dies auf keinen Fall funktionieren kann. -1.
MadHatter