Создание, монтирование и работа с iso образами в Linux Ubuntu. Работа с DVD-R\RW, CD-R\RW (запись, очистка) — в консоли

Всем хорошо известно, что в Linux самыми популярными и наиболее часто используемыми программами для записи дисков (и остальных связанных с этой темой операций) являются K3B и Brasero, отчасти эту картину дополняет GnomeBaker и NeroLinux, последняя кстати говоря является далеко не свободной или бесплатной. Безусловно, эти программы удобны, активно развиваются, например уже в Ubuntu 9.04 мы увидим новую версию Brasero, но что, если сложилась такая ситуация, когда использование GUI программ невозможно, например когда я работал с серверами, там никакого графического интерфейса и быть не могло, такая же ситуация может сложиться и дома, если вы используете свой старенький компьютер в качестве сервера для домашней сети, шлюза, PROXY, или просто в качестве подопытной рабочей станции. Зачем такую машину перегружать графическим интерфейсвом, даже таким легким, как например Xface, ведь Linux мы используем с той целью, что-бы не зависить от всяких буржуазных привычек. :-) В этой статье я расскажу как можно, совершенно разными способами выполнять любые операции с CD\DVD не используя GUI.

Для удобства, я решил поделить всю статью на две части. А именно:
Часть 1: Создание образа с диска или локальной папки.
Часть 2: Запись\очистка CD\DVD

!СПРАВКА!
– ISO-9660: Старый стандарт расположения данных, позволяющий
использовать только стандарт 8.3 для имен файлов (т.е. 8 символов –
имя файла и 3 – расширение).

– Rock Ridge: Расширение ISO-9660, предполагающее использование
длинных имен для файлов и UNIX-подобных ссылок. Позволяет сохранить
все атрибуты файла, такие как владелец и права доступа. Атрибуты
UNIX-файлов при чтении диска в Windows не отображаются.

– Joliet: Расширение ISO-9660, разработанное Microsoft, которое
позволяет использовать символы Unicode в именах файлов, так же как и
использовать длинные имена файлов. Кроме того, Joliet предоставляет
возможность создания урезанных имен для совместимости с MS-DOS,
выглядящих наподобие FILENA~1.TXT. Позволяет использовать имена файлов
длиной до 64 символов, включая пробелы.

ЧАСТЬ 1: Создание образа с диска или локальной папки.
Так уж получилось, что в Linux создать образ можно несколькими разными способами, например используя утилиты, которые есть в любой современной сборке, или же встроенные средства самой ОС.

Утилита Genisoimage (другое название mkisofs входит в состав пакета утилит под названием cdrtools) – Программа создания образа файловой системы для последующей записи на носитель. Утилита поддерживает расширенные форматы файловых систем для компакт дисков: Rock Ridge, Joliet, Blu-ray Disc и прочее.

– Программы для записи компакт-дисков с графическим интерфейсом обычно неявно используют mkisofs. На основе mkisofs создан усовершенствованный пакет программ dvd+rw-tools, позволяющий дописывать перезаписываемые компакт-диски без необходимости создания образа диска.

Позволяет создать такие типы образов как:
– Загрузочные (boot).
– С расширениями Rock Ridge. Эти расширения необходимы именно для ОС GNU\Linux, а точнее для работы с правами доступа пользователей.
– С расширениями Joliet. Joliet-расширения не являются частью стандарта ISO9660.

Эти расширения, в основном, используются в ОС Windows-подобных при записи дисков. Характерным для Joliet-расширений является: unicode-имена файлов и директорий, длина одного компонента пути может быть до 64 unicode-символов. Часто бывает полезно.

Создание образа из папки
Создать образ из папки можно, выполнив следующую команду.

genisoimage -iso-level 4 -J -o yourname.iso /home/alex/doom3
genisoimage -iso-level 4 -J -o yourname.iso /home/alex/doom3

где,
– iso-level 4 указывает не накладывать ограничения на длину имени файла и вложенность директорий.
– o задаёт имя конечного образа.
– J указывает использовать Joliet-расширения (если диск будет использоваться на ОС Windows).
– yourname.iso /home/alex/doom3 задаёт папку, которая будет рекурсивно включена в образ.

Можно поступить и проще, выполнив команду

genisoimage -o name_of_obraz.iso name_of_katalog
genisoimage -o name_of_obraz.iso name_of_katalog

Для того чтобы смонтировать файл нам нужно выбрать точку монтирования, например /media/iso/file_name/

mount -t iso9660 -o loop my.iso/media/iso/file_name/
mount -t iso9660 -o loop my.iso/media/iso/file_name/

Но прежде, создаем точку монтирования:

mkdir /media/iso/file_name
mkdir /media/iso/file_name

Производим монтирования iso файла:

mount -o loop -t iso9660 iso_file.iso /media/iso/file_name/
mount -o loop -t iso9660 iso_file.iso /media/iso/file_name/

где
iso_file.iso – это наш образ;
/media/iso/file_name/ – точка монтирования;

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

cd /media/iso/file_name
cd /media/iso/file_name

и выполнить команду

ls -la
ls -la

Чтобы образ монтировался автоматически при загрузке, добавьте следующую строку в /etc/fstab/

my.iso /iso0 iso9660 rw,loop 0 0
my.iso /iso0 iso9660 rw,loop 0 0

Т.е. Сам процесс достаточно понятен и логичен. Создаем образ из необходимой нам папки, далее создаем точку монтирования (папку) после, монтируем образ и переходим в точку монтирования, где просматриваем содержимое образа.

Аналогичным способом выше описанному, является метод использования mkisofs
Не стоит забывать как и в первом случае, что если диск должен быть совместим с windows системами об этом надо позабоиться, включив в команду необходимые опции, а именно -r которая включает расширение RockRidge стандартной iso9660

mkisofs -joliet-long -r -o disk.iso /home/alex/doom3
mkisofs -joliet-long -r -o disk.iso /home/alex/doom3

Образ будет сохранен в текущей директории.

Создание образа с носителя
Почему в заголовке, я написал создание образа «с носителя» а не с диска. Ответ прост, как не странно многие забывают, что образ это своего рода архив в котором целиком сохраняется структура файловой системы того носителя который был указан при создании самого образа, соответственно это может быть и диск и Flash-карта и много что еще.

Тут все просто, что-бы создать образ CD\DVD выполняем следующую команду.

dd if=/dev/cdrom of=/media/my_iso/name.iso bs=2048
dd if=/dev/cdrom of=/media/my_iso/name.iso bs=2048

/dev/cdrom — наше устройство
/media/my_iso/name.iso — путь для сохранения образа.
loopback устройства в ядре должны быть включены.
Но об этом можно не париться, если конечно вы не сами собирали ядро.

Так же аналогичного результата можно добиться выполнив команду.

cp /dev/cdrom /media/disk/my.iso
cp /dev/cdrom /media/disk/my.iso

Стоит отметить этот способ не очень надежен.
где /mnt/…/my.iso путь куда будет сделан образ.
не забудьте, что папка /media/disk/ уже должна существовать.

Для создания образа с диска, так же, можно поступить так.

mkisofs -R -J -o image_name.iso /dev/cdrom
mkisofs -R -J -o image_name.iso /dev/cdrom

Утилита и опции нам уже известны.

Для создания образа с Flash-карты мы можем использовать все те же команды и опции.
Например выполнив вот эту команду, вы получите образ флэшки

cp /dev/sdb1 /home/booch/new/my.iso
cp /dev/sdb1 /home/booch/new/my.iso

или же

sudo dd if=/dev/sdb1 of=/home/booch/new/image1.iso
sudo dd if=/dev/sdb1 of=/home/booch/new/image1.iso

ЧАСТЬ 2: Запись\очистка оптических дисков в консоли. (CD-R\RW)
Сама процедура делиться на два этапа, на первом этапе мы создаем образ с помощью mkisofs, на втором записываем этот образ на диск используя программу cdrecord. Все просто и понятно. Я опишу полностью весь процесс, от начала до конца.
И так, поехали…

Первым этапом копирования оптических дисков в консоли (как уже было сказано выше) является создания ISO-образа данных. Если в качестве источника выступает оптический носитель (не Audio CD), то достаточно выполнить команду:

dd if=/dev/cdrom of=test.iso
dd if=/dev/cdrom of=test.iso

Система задумывается на какое-то время (это нормально, никаких внешних признаков вы не увидите), будет только гореть лампочка активности оптического привода и жесткого диска , что и говорит о том, что создается образ. Через 3-5 минут в текущей директории появиться новый файл test.iso, являющийся точной копией оптического диска в приводе /dev/cdrom.

Если же исходные данные находятся на жестком диске (т.е. в директории или в нескольких), то необходимо собрать их все в одной папке. Например, в домашнем каталоге создаем папку burn и в нее перемещаем данные, необходимые для переноса на оптический носитель. Для создания ее образа необходимо в консоли набрать команду:

mkisofs -o test.iso -Jrv -V test_disk /home/booch/burn
mkisofs -o test.iso -Jrv -V test_disk /home/booch/burn

В этом примере следующие обозначения:

-o – имя создаваемого iso-файла (test.iso)
-J – используем записи Joliet для совместимости с системой Windows
-r – Rock Ridge расширение для совсестимости с *nix
-v – так называемый verbose-режим. В этом случае в процессе создания
образа будет выводиться различная дополнительная информация
-V – указываем имя тома (test_disk); Это имя будет отображаться при
просмотре в Windows

Система вновь уходит в долгие раздумья, после чего создает новый файл folder_image.iso. Можно проверить, насколько корректно был создан образ. Для этого необходимо смонтировать наш ISO-файл, для этого создаем папку /media/iso_image/new и монтируем туда наш образ

mount -t iso9660 -o loop test.iso /media/iso_image/new
mount -t iso9660 -o loop test.iso /media/iso_image/new

Зайдя в папку new, можно увидеть содержимое образа folder_image.iso. Этот же образ можно записать на оптический носитель. Но сперва нам необходимо узнать параметры вашего привода. Для этого можно воспользоваться командой:

cdrecord -scanbus
cdrecord -scanbus

выводом команды будет что-то в роде:

booch@alex:~/new$ cdrecord -scanbus
scsibus0:
        0,0,0     0) 'PIONEER ' 'DVD+-RW DR-K17Y ' '0.95' Removable CD-ROM
    0,1,0     1) *
    0,2,0     2) *
    0,3,0     3) *
    0,4,0     4) *
    0,5,0     5) *
    0,6,0     6) *
    0,7,0     7) *
[email protected]:~/new$ cdrecord -scanbus
scsibus0:
        0,0,0	  0) 'PIONEER ' 'DVD+-RW DR-K17Y ' '0.95' Removable CD-ROM
	0,1,0	  1) *
	0,2,0	  2) *
	0,3,0	  3) *
	0,4,0	  4) *
	0,5,0	  5) *
	0,6,0	  6) *
	0,7,0	  7) *

Выделенная жирным строка – это и есть наш привод, а цифры 0,0,0 – его адрес.

Результаты работы данной команды будет необходимо использовать во время указания параметров ключа dev команды cdrecord. А именно адрес нашего оптического накопителя.
Для записи оптического диска наберите команду:

cdrecord -v -eject dev=ATAPI:0,0,0 speed=40 fs=16M folder_image.iso
cdrecord -v -eject dev=ATAPI:0,0,0 speed=40 fs=16M folder_image.iso

Обозначения здесь следующие:
-v – verbose-режим. Обозначает тоже, что и в предыдущем случае
-eject – выдвигает лоток привода после окончания процесса записи
-speed – указываем скорость записи диска. В нашем случае — 48х
-dev – записывающее устройство. Числа взяты из вывода программы cdrecord с параметром scanbus

Параметр speed указывает скорость записи, -eject заставит привод выдвинуть лоток после окончания записи, fs определяет размер буфера FIFO, а -v указывает утилите выводить подробную информацию о ходе записи.

Опции speed в качестве параметра так же можно передать ноль, speed=0 в таком случае программа сама выберет оптимальную скорость для записи диска, это конечно если вы не хотите указывать ее в ручную или вам это просто не нужно.

Стоит сказать, что процесс можно полностью автоматизировать, написав скрипт, что будет сводить весь процесс к одному нажатию кнопки enter (о пути к файлу я молчу)
Еще один интересный момент, это то, что все необходимые вам параметры можно занести в конфиг /etc/cdrecord/cdrecord и в будущем просто забыть о них.

Запись CD-RW дисков
В данном случае, есть несколько вариантов, диск может уже содержать данные, и нам либо надо дописать новые на диск, либо удалить старые и записать все по новой.
Очистка диска может проводить как быстрая так полная. Быстрая выполняется командой:

cdrecord -v blank=fast dev=ATAPI:0,0,0
cdrecord -v blank=fast dev=ATAPI:0,0,0

Через несколько секунд диск будет готов для записи.
Oпции:
blank=all – очистить весь диск
blank=disc – то же самое
blank=fast – быстрая очистка диска
blank=session – очистить последнюю сессию
blank=unclose – открыть последнюю записанную сессию

Прямое копирование.

Для прямого копирования содержимого с одного диска на другой можно
воспользоваться командой:

cdrecord -v dev=0,0,0 speed=4 -isosize /dev/scd1
cdrecord -v dev=0,0,0 speed=4 -isosize /dev/scd1

Эта команда перенаправляет поток данных с привода CD-ROM (/dev/scd1)
на записывающий привод, dev=0,0,0. Прямое копирование достаточно
удобная процедура, однако в случае возникновения ошибок вы можете
испортить болванку. Для избежания печальных последствий лучше вначале
сделать образ CD-ROM’a и сохранить его на жестком диске и лишь потом
уже писать на болванку. Эта процедура будет иметь следующий вид:

mount /mnt/cdrom
dd if=/dev/scd1 of=/tmp/diskfile.iso
cdrecord dev=0,0,0 speed=48 fs=8m -v -eject -dummy /tmp/diskfile.iso
mount /mnt/cdrom
dd if=/dev/scd1 of=/tmp/diskfile.iso
cdrecord dev=0,0,0 speed=48 fs=8m -v -eject -dummy /tmp/diskfile.iso

Новые параметры
fs=8m и -dummy
отвечают за следующее. С помощью fs=8m мы указываем программе размер буфера, чем больше, тем лучше. Важно также, чтобы он не опустошался во время записи. Указанных 8 мегабайт в обычных условиях вполне
достаточно для качественной записи диска даже на слабых машинах. Опция -dummy позволяет протестировать привод прежде чем приступить непосредственно к записи данных.

Создание мультисессийного диска
Диски создаются сессиями, а сами сессии деляться на треки. Структура одной сессии такова: вводная часть, содержание сессии(TOC — Table Of Contents), непосредственно данные, и закрывающая часть, которая делает невозможным дальнейшее добавление данных на диск. Используя режим мультисессии несколько сессий можно объединить, слинковав их содержания. Создание многосессионых дисков очень просто с помощью графических программ, таких как X-CD-Roast или K3b. Но такая же процедура выполняется не намного сложнее и в консоли.

Пример:

cdrecord -v -eject speed=48 dev=0,0,0 -multi test.iso
cdrecord -v -eject speed=48 dev=0,0,0 -multi test.iso

Так создается первая сессия на диске. Опция -multi позволяет сделать диск открытым для добавления других сессий, оставляя диск читаемым. Для того, чтобы добавить еще одну сессию, программе mkisofs необходимо знать номера начального и конечного секторов диска. Узнать это можно следующим образом:

cdrecord dev=0,0,0 -msinfo
0,27139
cdrecord dev=0,0,0 -msinfo
0,27139

Результат будет правильным, только в том случае, если диск записан с возможностью добавления данных. Теперь к уже известным параметрам программы mkisofs, рассмотренным ранее, добавим еще два – -C и -M

В результате, команда для создания iso-образа будет иметь следующий вид:

mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,0,0 /path/to/files
mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,0,0 /path/to/files

Можно так же эту команду объединить с предыдущей. В итоге, получим следующее:

mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,0,0 -msinfo` -M 0,0,0 /files/path/
mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,0,0 -msinfo` -M 0,0,0 /files/path/

Теперь привод считает информацию о последней записанной сессии и объединит ее содержание с содержанием новой сессии. Предполагается, что последняя сессия записана с опцией -multi

Запись DVD-R/RW
Для этого необходим пакеты dvd+rw-tools, которые содержаться практически в любом современном дистрибутиве и включают в себя программы для записи и форматирования DVD-дисков. Для выполнение записи мы будем использовать утилиту growisofs, а так же dvd+rw-format для очистки DVD+RW. Запись DVD не намного отличается от записи CD-болванок. В этом легко убедиться.

Запись DVD-/+R дисков
Для этого нам потребуется утилита growisofs, которая входит к комплект dvd+rw-toots.
Для записи используем команду

growisofs -Z /dev/cdrom -R -J /home/alex/test_dir
growisofs -Z /dev/cdrom -R -J /home/alex/test_dir

для DVD+R или DVD-R
Эта же команда может использоваться с опцией speed

growisofs -speed=8 -Z /dev/cdrom -R -J /home/alex/test_dir
growisofs -speed=8 -Z /dev/cdrom -R -J /home/alex/test_dir

Для записи образа используем

growisofs -Z /dev/cdrom=image.iso
growisofs -Z /dev/cdrom=image.iso

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

Запись DVD-/+RW дисков
Очистить диск можно выполнив команду

dvd+rw-format -f /dev/cdrom
dvd+rw-format -f /dev/cdrom

Теперь диск готов, что-бы записать на него данные

growisofs -Z /dev/cdrom=image.iso
growisofs -Z /dev/cdrom=image.iso

Пару слов
Что сказать, запомнить все это, включая все опции, операнды, команды и т.п. тяжело, но оно и не к чему, если конечно вы не работаете исключительно с серверами, да еще и удаленно, в таки случаях вам нужно знать намного больше описанного. Суть в том, что часто выполняемые задачи можно автоматизировать, или же запомнить необходимые команды, не так уж сложно, это важно, так как в таком случае вы не будете иметь не малейших проблем с качеством записи и проблемами ресурсов системы. К тому же умея использовать эти окманды, выполнять все операции с дисками и образами вы будете еще и быстрее нежели в GUI.
Приятной работы!