Как редактировать ISO образы (включая загрузочные ISO)

30

Я ищу инструменты для Ubuntu, которые можно использовать для редактирования ISO-изображений. Включая образы ISO, которые являются загрузочными, как Ubuntu и Windows ISO. Не только редактировать, но сохранить отредактированный ISO и может по-прежнему загружаться при записи на USB-накопитель или CD / DVD.

Луис Альварадо
источник

Ответы:

42

Мастер ИСО установить isomaster

Я использовал ISO Master для добавления файлов в ISO раньше. Он подходит для того, что вам нужно, потому что он сохраняет состояние того, является ли ISO загрузочным. В прошлом я использовал его для добавления другого контента (например, музыки) на живой диск. Однако обратите внимание, что после внесения изменений в файл ISO вы можете только «Сохранить как», т. Е. Будет создан другой файл ISO, поэтому убедитесь, что у вас достаточно места на диске для обоих.

isomaster

dv3500ea
источник
2

PowerISO только что выпустила Linux-версию своего программного обеспечения для редактирования ISO. Как и ISO Master , он сохраняет состояние того, является ли ISO загрузочным. Тем не менее, он позволяет вам сохранять данные непосредственно в исходном файле (сначала удалив его), поэтому нет необходимости иметь достаточно места на диске для обоих файлов. Я также нахожу его интерфейс более простым и интуитивно понятным в использовании, чем ISO Master.

снимок экрана PowerISO для Linux

Ploni
источник
1

Обычный ответ на это - распаковать файл iso, изменить его и упаковать снова. Похоже, что «ISO Master», как упоминалось в ответе dv3500ea, является хорошим интерфейсом для этого.

Если:

  • у вас недостаточно места для этого
  • Вы только хотите сделать хирургическую модификацию вместо того, чтобы переписать все это
  • Вы хотите изменить устройство хранения, которое содержит файловую систему isofs (aka iso9660) без копирования всего устройства, или
  • если вы думаете, что это распаковка / перепаковка просто не достаточно хакерская

Тогда этот ответ для вас!

Таким образом, мы заменим существующий файл в файловой системе isofs нашим желаемым файлом. Наш желаемый файл должен быть меньше существующего (целевого) файла, и конечный пробел (или мусор) должен быть приемлемым. Это на самом деле требует только две команды, но будьте осторожны: опечатка может полностью уничтожить целевую файловую систему или даже перезаписать исходный файл. Резервные копии ваш друг!

В моем случае я хотел сохранить скрипт в оперативной загрузке, поэтому мне не нужно каждый раз повторять его заново. Сценарий находится на, script.pyа моя цель (флешка) на /dev/sdc. Размер скрипта составляет 202 байта, поэтому наш первый шаг - найти файл размером более 202 байтов, чтобы мы могли его перезаписать. После монтирования в /mnt, я нашел подходящий файл в /mnt/info.txt.

Мы не можем просто перезаписать info.txtточку монтирования, она будет жаловаться, что это файловая система только для чтения. Однако мы root, поэтому давайте покажем им, что это значит! Нам нужно выяснить, где info.txtнаходится файловая система. Найдите строку, которая (вероятно) уникальна info.txt, например This is the official distribution CD of X., и найдите ее на диске:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

С другой стороны , это также может быть сделано с Grep, которая намного быстрее, но тогда вы должны указать его с самого начала: $ sudo grep -oba 'This is ...' /dev/sdc.

Теперь, когда мы знаем, где это, нам просто нужно заменить эти байты нашим файлом:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Эта строка:

  • копирует байты из входного файла ( if) в выходной файл ( of), и ему все равно, что выходной файл на самом деле является устройством, потому что «все является файлом».
  • conv=notrunc говорит не обрезать выходной файл, потому что мы хотим перезаписать только несколько байтов, а не перезаписать файл с определенной точки и далее.
  • bs=1 устанавливает размер блока равным 1. Обычно вы хотите, чтобы размер блока составлял 4 КБ или выше, но это позволяет избежать необходимости выполнять (встроенную) математическую обработку и позволяет указать точное местоположение байта.
  • seek=Nищет определенную точку в выходном файле (обратите внимание, что seek=Nэто отличается от того, skip=Nчто skipпропускает байты из входного файла!). Разумеется, мы установили, где находится целевой текст.
  • count=Nскопируйте только это много байтов. Я думаю, что это может быть опущено, потому что он заметит конец входного файла, но я оставил его просто для уверенности.

И вуаля, файл перезаписан!

Но подождите, целевой файл был больше, чем наш скрипт, поэтому на USB-накопителе этот файл теперь выглядит примерно так: «while do if run () blah; blah (); yright 2007 X Inc.». Там тянется мусор. Два способа исправить это: сделать наш входной файл длиннее (добавить пробелы) или добавить символ комментария в конце. Обратите внимание , что многие редакторы добавить новую строку в конце, так что вы можете установить count=в N-1байтах (если ваш файл теперь 203 байт, и вы заметите , что последний байт является символ новой строки, набор отсчет до 202). Вы можете проверить файл на наличие новых строк, используя xxd script.py | tailи проверяя, является ли последний байт 0a(или, в странных случаях, 0d).

Процесс для .isoфайла идентичен , просто мысленно замените /dev/sdcна your.iso.

Обратите внимание, что когда вы проверяете цель в точке монтирования, чтобы увидеть, работает ли она, вам, возможно, придется использовать ее stringsснова (на этот раз при поиске сценария), поскольку файл, вероятно, все еще находится в кэше чтения.

Люк
источник