понедельник, 30 марта 2009 г.

ISO9660 from terminal

Работа с ISO-образами в GNU/Linux из консоли

В большинстве современных дистрибутивов уже включены утилиты по работе с ISO-образами. Их можно создавать и использовать, применяя лишь несколько утилит, в зависимости от цели. Итак, данная статья будет разбита на три небольшие части: монтирование ISO-образа, создание и прожиг.

Использование

За монтирование ISO-образа, как впрочем и за монтирование вообще, в GNU/Linux отвечает mount. ISO-образ монтируется аналогично другим устройствам, с правами суперпользователя:

$ mount -t iso9660 -o loop /home/user/sample.iso /media/cdrom/

Единственные отличия в том, что нужно явно указывать файловую систему и дополнительно "-o loop". В данном примере, файл sample.iso будет смонтирован в каталог /media/cdrom/. Для монтирования нескольких ISO, можно воспользоваться советом из комментариев, и задействовать явное указание /dev/loopX при монтировании, где X - номер loop-устройства, начиная с "0". Например, -o loop=/dev/loop1.

При наличии ошибки: "mount: could not find any device /dev/loop#"

Необходимо предварительно подгрузить модуль "loop", от суперпользователя:

$ modprobe loop

Чтобы получить список файлов и директорий ISO-образа без его монтирования, можно использовать isoinfo:

$ isoinfo -l -i /home/user/sample.iso

Вывод данной команды будет похож на вывод ls -lR в любом каталоге. То есть будут отображены все подкаталоги и их содержимое. Если вывод окажется слишком длинным, можно его направить на less или more, либо на grep, для вывода строк по заданному шаблону:

$ isoinfo -l -i /home/user/sample.iso | less

Создание

ISO-образ в GNU/Linux можно создать из каталога или скопировав содержимое оптического диска используя представленные ниже утилиты. Для создания копии диска существует два варианта. Первый, с использованием утилиты общего назначения - dd (подробней об утилите можно почитать тут, спасибо комментариям), выглядит это так:

$ dd if=/dev/sr0 of=/home/user/sample.iso

где,

/dev/sr0 - используемый привод, заменяйте при необходимости на свой

/home/user/sample.iso - имя образа

Чтобы dd пропускал сбойные секторы, или заполнял ошибочные нулями, можно использовать параметр conv=noerror (спасибо комментаторам). Есть и другой вариант:

$ readcd dev=/dev/sr0 f=/home/user/sample.iso

Для основанных на Debian дистрибутивах, эта строка должна выглядеть так:

$ readom dev=/dev/scd0 f=/home/user/sample.iso

Здесь уже все должно быть ясно. Если все верно и прошло без ошибок, то обе команды создадут ISO-образы с одинаковой контрольной md5sum суммой.

Создать образ из каталога немного сложнее, однако разобраться все же следует. За это отвечает программам genisoimage, в большинстве современных дистрибутивов mkisofs ссылается на нее. Если Вы не уверены, будет ли созданный образ использован в Windows системах, то добавьте опцию - J. Опция -nobak исключит ненужные файлы бекапов, заканчивающихся на ~, а опция -V добавит заголовок образа. Итак, получится следующее:

$ genisoimage -V label -r -J -nobak -o /home/user/sample.iso /home/user/files/

Для детального ознакомления следует почитать man genisoimage.

11 комментариев:

Анонимный комментирует...

Неплохо было бы для новичков как резать CD и DVD и все камни какие есть, в свое время пришлось долго разбиратся над DVD

tinman321 комментирует...

Спасибо за комментарий.

Прожиг планировался, о чем нам намекает первый абзац, но не сложилось пока. Думаю, позже будет.

f_andrey комментирует...

Еше не плохо было бы упомянуть, что для большинства критических операция нужны рутовые права, или соответствующая преднастройка ;)

tinman321 комментирует...

хм, чего-то я не учел, добавлю
спасибо

Анонимный комментирует...

А почему не упомянут самый простой способ создания образа диска?
$mount -t iso9660 /dev/scd0 /media/cdrom
$cp /dev/scd0 /home/image.iso

Alexander комментирует...

>Однако этот способ имеет недостатки по >сравнению со следующим, который помимо >того, что выполняет dd не читает пустые >секторы и корректирует ошибки:
dd пропускает пустые секторы и корректирует ошибки.

tinman321 комментирует...

> А почему не упомянут самый простой способ создания образа диска?
как-то он не слишком труЪ выглядит

> dd пропускает пустые секторы и корректирует ошибки.
пруфлинк в студию

-=Sphynkx=- комментирует...

>пруфлинк в студию
Тут весьма подробное описание dd.
dd умеет пропускать сбойные секторы (с опцией conv=noerror), либо заполнять нулями несчитанные данные (с опцией conv=noerror).
> $ mount -t iso9660 -o loop /home/user/sample.iso /media/cdrom/
Для "единичного случая" сойдет. Но если возможно монтирование и др. устройств через loopback, то тогда уж лучше явно указать:
-o loop=/dev/loop0
для другого:
-o loop=/dev/loop1
итд.

-=Sphynkx=- комментирует...

А сама статья хорошая и полезная для новичков: кратко и по делу.

tinman321 комментирует...

> с опцией conv=noerror

спасибо, добавил, полезное замечание

> то тогда уж лучше явно указать:
-o loop=/dev/loop0


угу, также добавил, спасибо

а также, благодарю за ссылку на статью по dd, её тоже добавил в статью

Анонимный комментирует...
Этот комментарий был удален администратором блога.