Алексей Федорчук
Когда я впервые знакомился FreeBSD, запись компактов в ней мне
казаласть задачей сложной и интуитивно неясной. Однако - лишь до тех
пор, пока я не попробовал это проделать. И оказалось, что, как и все
во Free, это - не просто. А - очень просто. В
ознаменование чего я и составил себе для памяти этот маленький
HOW-TO'й. Может быть, он еще кому-нибудь пригодится. Тем более, что,
за исключением одного оговоренного ниже момента, все сказанное может
быть использовано в любой BSD-системе - по крайней мере, за
DragonFlyBSD ручаюсь.
Запись CD-R/RW во FreeBSD никогда не требовала каких-либо
специфических настроек - типа включения эмуляции SCSI через IDE (что
до недавнего времени было необходимо в Linux). Хотя и такой подход
не возбраняется - он позволит использовать пакет
cdrtools и, главное, многочисленные графические
надстройки над ним. Однако часто более простым способом выглядит
прямая запись диска штатной Free'шной утилитой
burncd.
Тем не менее, в любом случае запись CD-диска начинается с
создания его образа. Для чего требуется программа
mkisofs из все того же пакета cdrtools. В
штатном комплекте FreeBSD Distributions ее нет - она устанавливается
из отдельного порта или прекомпилированного бинарника
(sysutils/cdrtools). В DragonFlyBSD же этот пакет
входит в базовый набор, устанавливаемый при первичной
инсталляции.
Собственно создание образа диска происходит здесь точно также,
как и в Linux'е:
$ mkisofs -R -J -o iso_name path2data
Опция -R обеспечивает поддержку расширения стандарта
ISO9660 - Rock Ridge для Unix-систем (длинные имена, множественные
точки в именах файлов, атрибуты доступа и принадлежности файлов и
каталогов). Опция -J - это поддержка расширения Joliet
для систем семейства Windows (то есть длинные имена файлов будут
видны и там). Опция -o имеет своим значением имя
создаваемого iso-образа. Ну а path2data - путь к
каталогу, из которого будет создаваться образ.
Перед записью образ можно смонтировать для проверки. Делается это
от лица root'а. Ранее, во FreeBSD 4-й ветки, это требовало поддержки
в ядре псевдо-устройства vn. Такой порядок сохранился и
в DragonFly, как это описано в соответствующем микро-How-to. В 5-й же ветке
FreeBSD доступ к образу осуществляется через универсальное
устройство /dev/md (memory disk - диска в оперативной
памяти), поддержка которого включена в ядро GENERIC по умолчанию.
Сначала это устройство следует сконфигурировать командой
$ mdconfig -a -t vnode -f path/iso_name
после чего возвращается
md#
где # - номер md-устройства (если оно единственное,
будет md0). Собственно монтирование выполняется
командой:
$ mount -t cd9660 /dev/md0 /mnt_point
Где /mnt_point - созданный заблаговременно пустой
каталог (например, /mnt/iso). После этого этот каталог
может быть просмотрен обычным образом, например,
$ ls /mnt/iso
Однако - только в режиме read only (то есть внести изменения в
созданный образ простым копированием или удалением не удастся.
По завершении просмотра образа md-устройство следует
размонтировать и удалить:
$ umount /mnt/iso;
$ mdconfig -a /dev/md0
Непосредственно запись диска выполняется утилитой
burncd, которая входит в штатный комплект Distributions
(то есть она доступна сразу после установки FreeBSD). Например, это
можно сделать такой командой:
$ burncd -e -s max -f /dev/acd0 data iso_name fixate
Значения опций - следующие:
-e обеспечивает выдвижение лотка после записи,
-s -скорость записи (по умолчанию - 4, значение
max обеспечивает максимально возможную скорость для
данных привода и болванки,
-f - имя файла устройства (в примере -
/dev/acd0),
Команда fixate указывает на фиксирование сессии
(подразумевается односессионная запись). Ну а data
предписывает запись диска с данными (а не аудиоCD) с образа
iso_name.
У burncd есть еще несколько опций, с которыми можно
ознакомиться посредством
$ man 8 burncd
В частности, полезной может быть опция -v, выводящая
информацию о ходе записи. А опция -t осуществит
имитацию записи, что позволяет в случае ошибки избежать порчи
болванки.
Для стирания CD-RW в burncd предусмотрены команды
blank (быстрая очистка оглавления диска) и
erase (полная очистка диска)
$ burncd -e -f /dev/acd0 blank
или
burncd -e -f /dev/acd0 erase
соответственно. Нужно только помнить, что вторая операция займет
немало времени - столько же, сколько и запись диска.
Если для целей чисто резервного копирования (например, архива
вида *.tar.gz) не требуется запись дисков, доступных из
других операционок, burncd можно использовать и без
предварительного создания iso-образа (и, соответственно, без пакета
mkisofs). Все, что для этого нужно (помимо
заблаговременно созданного архива подходящего размера) - директива
примерно такого вида:
$ burncd -f /dev/acd1c -s max data archive.tar.gz fixate
Правда, записанный таким образом диск не может быть ни прочитан в
каких-либо других операционках, ни смонтирован как обычный CD -
доступ к нему потребует прямого обращения к файлу соответствующего
устройства, например:
$ tar xzvf /dev/acd1c
Однако выполнить запись такого рода гораздо быстрее. Особенно
значителен выигрыш во времени при записи очень большого массива
данных. В этом случае их можно собрать в единый тарбалл, утилитой
split разбить на фрагменты подходящего размера:
$ split --bytes=650m archive.tar.gz [PREFIX]
где в качестве префикса можно указать какое-либо мнемонически
полезное значение (дату создания архива, например), после чего
последовательно записать кучу образовавшихся файлов (имеющих вид
[PREFIX]aa, [PREFIX]ab, и так далее) почти
так же, как было сказано выше:
$ burncd -f /dev/acd1c -s max data [PREFIX]?? fixate
Восстановление данных из такого архива выполняется следующим
образом. Сначала содержимое полученной стопки дисков последовательно
копируется в файлы на винчестере:
$ cp /dev/acd1c path2/file#
Затем они сливаются утилитой cat в единый архив:
$ cat file1 ... file# > archive.tar.gz
который и разворачивается обычным образом.
Возможность применения burncd для резервного
копирования без предварительного создания iso-образов определяет, по
моему мнению, ее предпочтительность перед cdrecord. Тем
не менее, и его использование в BSD-системах не возбраняется - тем
более, что в этом случае возможным становится и использование
графических front-end'ов типа k3b или
xcdroast. Но для этого, как и в Linux'е, необходимо
включить эмуляцию SCSI через IDE - так называемый CAM (Common Access
Model). Этот же CAM необходим для записи DVD-дисков.