воскресенье, 2 марта 2014 г.

Редактируем iso в Ubuntu Linux из консоли

Задача

Снять образ с загрузочного компакт-диска, изменить файлы в образе и записать результат на другой компакт-диск.

Решение

Подготовка

Снимаем образ с компакт-диска. Работа с образом быстрее, да и резервная копия никогда не помешает.
dd if=/dev/cdrom of=cdimage-orig.iso bs=2048
Создаём папку для монтирования образа, аналог «подключения виртуального диска» в виндах. В зависимости от места создания, возможно, придётся делать от имени суперпользователя. Лично у меня эта папка была создана однократно и именно для таких целей - для подключения образов дисков.
sudo mkdir /mnt/vcd
Монтируем образ компакт-диска в папку. Только от имени суперпользователя.
sudo mount cdimage-orig.iso /mnt/vcd -o loop
Создаём папку для копирования содержимого диска, в которой будем изменять файлы. Путь к cd-dir должен быть указан либополный, либо относительно текущего каталога. У меня обычно это папка в домашнем каталоге.
mkdir cd-dir
Копируем файлы с образа в папку.
cp /mnt/vcd/* cd-dir -R
Размонтируем образ, он нам больше не нужен. Тоже от имени суперпользователя. Если этого не сделать сейчас, образ будет автоматически размонтирован при перезагрузке.
sudo umount /mnt/vcd

Изменение содержимого

Всё содержимое компакт-диска сейчас у нас находится в папке cd-dir. Редактируем его по усмотрению.

Сборка каталога в образ

А вот эта задача уже посложнее. Стандарт загрузочного компакт-диска подразумевает наличие на нём двух файлов: загрузочного каталога и собственно образа загрузчика.
Например, в Ubuntu 8.04 эти два файла находятся в папке isolinux. Образ загрузчика - isolinux.bin, загрузочный каталог - boot.cat.
Загрузочный каталог - файл размером 2 килобайта, его содержимое роли не играет.
Особый интерес представляет образ загрузчика.
Немного теории.
BIOS не умеет грузиться с CD-ROMа, но умеет считывать с него информацию. Специально для загрузки с компакт-дисков была введена спецификация El Torito, El Torito Bootable CD Specification. Суть её в следующем: BIOS сканирует все дисковые системы компьютера, и по стандарту ISO9660 (формат хранения данных на компакт-дисках), эмулирует образ загрузчика как жёсткий диск (или флоппик), после чего происходит загрузка с этого диска в обычном режиме.
Нужно найти оба этих файла, после чего собрать образ компакт-диска из каталога:
mkisofs -r -iso-level 4 -b boot.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o cdimage-new.iso cd-dir/
boot.bin - полный путь к образу загрузчика относительно корня компакт-диска
boot.cat - полный путь к загрузочному каталогу относительно корня компакт-диска
-no-emul-boot - нужен в том случае, когда образ загрузчика не является точным образом загрузочного флоппи, включая размер
-boot-load-size 4 - задаёт число загрузочных секторов, ключ нужен для совместимости с «глючными» биосами, которых много. Если параметр будет не 4, то некоторые экземпляры откажутся запускаться
-boot-info-table - также для совместимости
Получившийся диск записываем командой:
cdrecord cdimage-new.iso

Умолчания

/dev/cdrom - файл-устройство привода компакт-дисков
cdimage-orig.iso - образ диска до редактирования
cdimage-new.iso - образ отредактированного диска
/mnt/vcd/ - каталог для монтирования образов
cd-dir - каталог для редактирования содержимого диска

Дополнительно

ISO9660 - стандарт файловой системы для хранения данных на дисках CD. Формат введён для независимости доступа к дискам от рабочей платформы (Windows, Linux, и т.д.)
Есть несколько уровней спецификации:
1. Формат имён файлов - 8.3, как в DOS. Не больше 8 символов в имени каталога. Не больше 8 вложенных каталогов. В именах используются только буквы латинского алфавита. Фрагментация файлов не допускается.
2. Имена файлов ограничены 32 символами. Набор символов в именах неограничен.
3. Допускается фрагментация файлов (необходимо для пакетной или инкрементной записи CD).
4. (ISO9660-2) Максимальная длина пути - 207 символов. Нет ограничения на вложенные папки. Символа «.» (точка) в именах файлов не носит особого значения.
Общее ограничение ISO9660 - размер файла не может превышать 2GB.
Расширение стандарта, называемое Joliet, добавляет поддержку длинных имён файлов и не-ASCII символов в именах.

Комментариев нет: