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

Я ищу инструменты для Ubuntu, которая может использоваться для РЕДАКТИРОВАНИЯ ISO-образов. Включая ISO-образы, которые являются загрузочными как Ubuntu и Windows ISOs. Не только редактируют, но и сохраняют отредактированный ISO и может все еще загрузиться при записи на Карте памяти или CD/DVD.

30
задан 2 June 2011 в 13:45

4 ответа

Ведущее устройство ISO install isomaster

Я использовал Ведущее устройство ISO для добавления файлов к ISOs прежде. Это подходит для того, чего Вы требуете, потому что это сохраняет состояние того, является ли ISO загрузочным. Я использовал его в прошлом для добавления другого содержания (как музыка) к живому диску. Обратите внимание, однако, что после внесения изменений в файл ISO, Вы можете только "Сохранить Как", т.е. другой файл ISO будет создан, поэтому удостоверьтесь, что у Вас есть достаточно дискового пространства для обоих.

isomaster

42
ответ дан 23 November 2019 в 00:47

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

Если:

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

Затем этот ответ для Вас!

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

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

Мы не можем просто перезаписать info.txt на точке монтирования это будет жаловаться, что это - файловая система только для чтения. Мы - корень, тем не менее, так, давайте покажем им, что это означает! Мы должны выяснить где 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. Вы обычно хотите размер блока 4k или выше, но это и избегает необходимости, действительно (встраивают) математику, и позволяет нам указать местоположение, точное к байту.
  • seek=N ищет до определенного момента в выходном файле (отметьте это seek=N отличается от skip=N потому что skip байты пропусков из входного файла!). Мы устанавливаем его, конечно, туда, где целевой текст.
  • count=N скопируйте только это много байтов. Я думаю, что это может быть опущено, потому что это заметит конец входного файла, но я оставил его внутри только, чтобы быть уверенным.

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

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

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

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

1
ответ дан 23 November 2019 в 00:47

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

screenshot of PowerISO for Linux

2
ответ дан 23 November 2019 в 00:47

Попробуйте xorriso.

Пример отсюда:

xorriso -indev INPUT.ISO -outdev OUTPUT.ISO -add FILE_TO_ADD.EXT
4
ответ дан 11 February 2021 в 11:53

Другие вопросы по тегам:

Похожие вопросы: