Как преобразовать файл TAR в файл ISO

9

У меня есть файл Linux TAR, который я хотел бы преобразовать непосредственно в ISO. Есть ли способ сделать это, предпочтительно, без предварительного извлечения содержимого файла?

Это было бы похоже на следующий вопрос ; однако, это сфокусировано на простых или простых tar-файлах и не относится к bzip или bzipped tar.

Это также то, что я намеревался использовать в сценарии, и причина, по которой я не хочу извлекать его первым.

Джон
источник
Теоретически это можно сделать без необходимости извлекать каждый из файлов на диск (их нужно извлечь из архива, чтобы вставить в новый образ), но я ничего не знаю, что делает.
Игнасио Васкес-Абрамс
Почему вы хотите сделать это без извлечения смолы?
Нильс
Интересно, есть ли способ передать это что-то вроде stdin, а затем передать его в iso-файл ???
Джон
Я не уверен, будет ли это работать или нет, так как я не уверен на 100%, что делает команда. - tar -jxf / dev / stdin file.tar | mkisofs -o file.iso -stream-media-size 512
Джон,
Опция -stream-media-size была фактически сделана для этого! :-) Для получения дополнительной информации см. Справочную страницу genisoimage - в настоящее время в этой документации упоминается tar в этой опции (и использует ее в примерах для нее).
Аббафей

Ответы:

6

Используйте AVFS для доступа к содержимому архива tar, как если бы это был каталог. AVFS - это виртуальная файловая система, построенная на FUSE . Укажите ваш любимый сборщик ISO на каталог внутри архива tar.

mountavfs
cd ~/.avfs/path/to/archive.tar\#
genisoimage -o /path/to/iso .
Жиль "ТАК - прекрати быть злым"
источник
@ Жиль - спасибо за идею. Похоже, это может быть отличной идеей; Тем не менее, я нахожусь на CentOS 6 и сталкиваюсь с проблемами, пытаясь установить AVFS.
Джон
1

Если ваши основные задачи состоят в том, чтобы ускорить процесс и избежать ненужной дисковой активности по соображениям производительности, и у вас есть много ОЗУ, которое можно сэкономить относительно размера вашего архива, вы можете извлечь .tar в ОЗУ с помощью tmpfs . Эта опция, скорее всего, самая быстрая из доступных, если только вы не можете использовать конвейерный подход @ bulleric и не читаете с одного диска и не записываете на другой.

штурмовик типа "Скайхки"
источник
0
archivemount /file.tar /media/ISO

или несжатый .tar и

genisoimage -o myfile.iso directory_src

( может быть папка /media/ISO или точка монтирования /media/cdrom )

eternoi
источник
-2

Вы должны извлечь его, но вы не должны извлекать его на жесткий диск, вы можете использовать stdtout и передать его в genisoimage или mkisofs

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

Попробуй это: mount -o loop image.iso /mnt

Вы можете написать небольшой скрипт, чтобы автоматизировать эту проблему

греческий бык

bulleric
источник
И как бы он отличил один файл от другого?
Игнасио Васкес-Абрамс
Когда я запускаю это, я получаю серию ошибок, первая из них: tar: Вы должны указать один из параметров -Acdtrux' or --test-label '. Следующая ошибка: I: -input-charset не указан, с использованием utf-8 (определяется в настройках локали). Последняя ошибка: genisoimage: Нет такого файла или каталога. Неверный узел - 'tareddata'.
Джон
первая проблема, которую я решил, я выбрал неправильный вариант в tar; 2-й, хм, на мой взгляд, первый каталог получит то же имя, что и необъявленный каталог, например tardata.tar tardata
bulleric
Извините, я уверен, что это никак не сработает. -1
MadHatter,