среда, 29 октября 2014 г.

Пакетная запись на dvd/cd-rw в linux

Существует два способа дозаписи на dvd-r и cd-r - это мультисессия и пакетная
запись. В первом случае можно использовать утилиту growisofs:
$growisofs -Z /dev/dvd -JRV "Диск 1" file1 file2 ...
здесь -J - использовать расширение jolie для отображение юникода и длинных имён
файлов, -R - RockRidge для сохранения атрибутов posix, -V - метка тома,
последние параметры - список файлов и папок.
Диск запишется, в дальнейшем для дозаписи нужно следующее:
$growisofs -M /dev/dvd -JRV "Диск 1" file3 "file 4" ...
т.е. меняется один параметр - -Z на -M, в первом случае диск инициализируется и
записывается первая сессия, во втором - записываются последующие сессии.
Подробнее можно узнать в man growisofs.
Данная утилита может иметь другие названия в разных дистрибутивах, в Debian -
growisofs.
Перейдём ко второму случаю, он заключается в том, чтобы отформатировать диск в
файловую систему udf, а потом использовать его как флешку, т.е. записывать файлы
сразу напрямую по отдельности, также можно удалять файлы. Для этого подходит
любая болванка, даже не перезаписываемая, типа dvd-r, но в этом случае при
удалении файлов место на диске освобождаться не будет. Для работы требуется
пакет udftools, который есть в репозитории Debian, он достаточно популярен,
поэтому должен быть и в других дистрибутивов. И так, необходимы следующие
действия:

1. Подготавливаем диск.

Для dvd-rw и bd-re:
$dvd+rw-format -force /dev/dvd
Для cd-rw:
$cdrwtools -q -d /dev/cdrw
Для dvd-r и cd-r пропускаем этот шаг.

2. Форматируем в файловую систему udf

$mkudffs -r 0x0150 --media-type=dvdrw /dev/dvd
Для cd-rw media-type будет cdrw, для dvd-r - dvd и т.д.
-r означает версию udf, если не требуется ничего особого, то лучше поставить
версию поменьше (1.5 хватит для любых целей) для гарантии, что диск будет
читаться на всех ОС. Можно без этой опции, тогда версия будет 2.01.
В файле README из документации пакета udftool написано, что нужно использовать
утилиту pktsetup и использовать вместо /dev/dvd (или /dev/sr0) что-то вроде
/dev/pktcdvd/0, но у меня из-за этого были жуткие тормоза, диск записывался
полностью аж за 10 часов. Этот способ можно использовать, если не получилось
напрямую через /dev/dvd:
$pktsetup 0 /dev/dvd
$mkudffs /dev/pktcdvd/0
В дальнейшем работаем уже с этим устройством.

3. Монтируем файловую систему и работем с ней

$mount -t udf -o rw,noatime /dev/dvd /media/dvd0
noatime нужно, чтобы при чтении не обновлялось время доступа к файлам. Это
сохранит ресурс rw диска и ускорит работу за счёт уменьшения количества
операций.

4. Завершаем работу

После завершения работы сбрасываем кэш файловой системы, отмонтируем её и
вытаскиваем диск:
$sync
$umount /media/dvd0
$eject
Хотя всё выполнится автоматически, если нажать кнопку на dvd-приводе, правда
придётся подождать, т.к. операции могут занять достаточно длительное время.

Дополнительно

Если в вашей системе не разрешены вышеприведённые команды на выполнение
обычному пользователю, то следует их запускать от имени суперпользователя (кроме
команды sync).
Данный способ записи плохо подходит, если требуется забить диск до отказа
мелкими файлами, т.е. производительность очень сильно страдает от этого, и
вместо 15 минут записи образа на dvd-rw, операция может занять несколько часов.
Даже при записи одного большого файла скорость записи dvd-rw 4x снижается до 3x.
Поэтому данный способ подходит, когда требуется регулярно дописывать на диск
небольшой объём данных, например при инкрементальном резервном копировании.
А вообще, если не требуется, чтобы диск читался на windows и других системах,
можно использовать любой тип файловой системы, например ext2 (желательно, чтоб
ФС не была журналируемой). Разумеется, в этом случае подойдёт только
перезаписываемый диск. Просто вместо mkudffs используем
$mkfs.ext2 /dev/dvd
Правда ждать придётся ооочень долго… Поэтому лучше сделать так:
Создаём образ (я обычно использую разряжённый файл):
$dd if=/dev/null bs=4700MB seek=1 of=dvd.img
Форматируем его:
$mkfs.ext2 dvd.img
Записываем:
$growisofs -Z /dev/dvd=dvd.img
Монтируем диск:
$mount /dev/dvd /media/dvd0
Ну и работаем, по производительности ничего не могу сказать, т.к. делал это
только в качестве эксперимента.
Также у меня не было возможности проверить работу на dvd-ram и bluray, но
отличия, скорее всего в способе очистки и опции media-type при форматировании.

Комментариев нет:

Отправить комментарий