Linux Создание образов в Консоле
Всем хорошо известно, что в 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: Создание образа с диска или локальной папки.\n Так уж получилось, что в 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
где, - iso-level 4 указывает не накладывать ограничения на длину имени файла и вложенность директорий. - o задаёт имя конечного образа. - J указывает использовать Joliet-расширения (если диск будет использоваться на ОС Windows). - yourname.iso /home/alex/doom3 задаёт папку, которая будет рекурсивно включена в образ.
Можно поступить и проще, выполнив команду
genisoimage -o name_of_obraz.iso name_of_katalog
Для того чтобы смонтировать файл нам нужно выбрать точку монтирования, например
/media/iso/file_name/
mount -t iso9660 -o loop my.iso/media/iso/file_name/
Но прежде, создаем точку монтирования:
mkdir /media/iso/file_name
Производим монтирования iso файла:
mount -o loop -t iso9660 iso_file.iso /media/iso/file_name/
где iso_file.iso — это наш образ; /media/iso/file_name/ — точка монтирования;
теперь чтобы просмотреть файлы которые содержались в образе, нужно перейти в точку монтирования:
cd /media/iso/file_name
и выполнить команду
ls -la
Чтобы образ монтировался автоматически при загрузке, добавьте следующую строку в /etc/fstab/
my.iso /iso0 iso9660 rw,loop 0 0
Т.е. Сам процесс достаточно понятен и логичен. Создаем образ из необходимой нам папки, далее создаем точку монтирования (папку) после, монтируем образ и переходим в точку монтирования, где просматриваем содержимое образа.
Аналогичным способом выше описанному, является метод использования mkisofs Не стоит забывать как и в первом случае, что если диск должен быть совместим с windows системами об этом надо позабоиться, включив в команду необходимые опции, а именно -r которая включает расширение RockRidge стандартной iso9660
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
/dev/cdrom — наше устройство /media/my_iso/name.iso — путь для сохранения образа. loopback устройства в ядре должны быть включены. Но об этом можно не париться, если конечно вы не сами собирали ядро.
Так же аналогичного результата можно добиться выполнив команду.
cp /dev/cdrom /media/disk/my.iso
Стоит отметить этот способ не очень надежен. где /mnt/…/my.iso путь куда будет сделан образ. не забудьте, что папка /media/disk/ уже должна существовать.
Для создания образа с диска, так же, можно поступить так.
mkisofs -R -J -o image_name.iso /dev/cdrom
Утилита и опции нам уже известны.
Для создания образа с Flash-карты мы можем использовать все те же команды и опции. Например выполнив вот эту команду, вы получите образ флэшки
cp /dev/sdb1 /home/booch/new/my.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
Система задумывается на какое-то время (это нормально, никаких внешних признаков вы не увидите), будет только гореть лампочка активности оптического привода и жесткого диска , что и говорит о том, что создается образ. Через 3-5 минут в текущей директории появиться новый файл test.iso, являющийся точной копией оптического диска в приводе /dev/cdrom.
Если же исходные данные находятся на жестком диске (т.е. в директории или в нескольких), то необходимо собрать их все в одной папке. Например, в домашнем каталоге создаем папку 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
Зайдя в папку new, можно увидеть содержимое образа folder_image.iso. Этот же образ можно записать на оптический носитель. Но сперва нам необходимо узнать параметры вашего привода. Для этого можно воспользоваться командой:
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) *
Выделенная жирным строка — это и есть наш привод, а цифры 0,0,0 — его адрес.
Результаты работы данной команды будет необходимо использовать во время указания параметров ключа dev команды cdrecord. А именно адрес нашего оптического накопителя. Для записи оптического диска наберите команду:
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
Через несколько секунд диск будет готов для записи. Oпции: blank=all — очистить весь диск blank=disc — то же самое blank=fast — быстрая очистка диска blank=session — очистить последнюю сессию blank=unclose — открыть последнюю записанную сессию
Прямое копирование.
Для прямого копирования содержимого с одного диска на другой можно воспользоваться командой:
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
Новые параметры
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
Так создается первая сессия на диске. Опция -multi позволяет сделать диск открытым для добавления других сессий, оставляя диск читаемым. Для того, чтобы добавить еще одну сессию, программе mkisofs необходимо знать номера начального и конечного секторов диска. Узнать это можно следующим образом:
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 `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
для DVD+R или DVD-R Эта же команда может использоваться с опцией speed
growisofs -speed=8 -Z /dev/cdrom -R -J /home/alex/test_dir
Для записи образа используем
growisofs -Z /dev/cdrom=image.iso
В процессе записи будет постоянно выводиться вся полезная информация о ходе записи. Надо отметить, что сам процесс весьма ресурсоемкий, так что могут наблюдаться торможения.
Запись DVD-/+RW дисков Очистить диск можно выполнив команду
dvd+rw-format -f /dev/cdrom
Теперь диск готов, что-бы записать на него данные
growisofs -Z /dev/cdrom=image.iso
Пару слов Что сказать, запомнить все это, включая все опции, операнды, команды и т.п. тяжело, но оно и не к чему, если конечно вы не работаете исключительно с серверами, да еще и удаленно, в таки случаях вам нужно знать намного больше описанного. Суть в том, что часто выполняемые задачи можно автоматизировать, или же запомнить необходимые команды, не так уж сложно, это важно, так как в таком случае вы не будете иметь не малейших проблем с качеством записи и проблемами ресурсов системы. К тому же умея использовать эти окманды, выполнять все операции с дисками и образами вы будете еще и быстрее нежели в GUI. Приятной работы!