Страницы

понедельник, 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 комментариев:

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

    ОтветитьУдалить
  2. Спасибо за комментарий.

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

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

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

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

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

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

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

    ОтветитьУдалить
  8. >пруфлинк в студию
    Тут весьма подробное описание 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
    итд.

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

    ОтветитьУдалить
  10. > с опцией conv=noerror

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

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


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

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

    ОтветитьУдалить
  11. Этот комментарий был удален администратором блога.

    ОтветитьУдалить