[Решено:]Запись дисков при помощи growisofs (по окончании записи не открывается лоток привода)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

[Решено:]Запись дисков при помощи growisofs

Сообщение Hephaestus »

Пишу диски с помощью growisofs.
Первоначально создаю образ iso, чтобы потом можно было проверить контрольную сумму.
Команда для записи выглядит так

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso


Хотелось бы, чтобы после записи открывался лоток.
Однако growisofs говорит, что
:-( unable to reload tray: No such file or directory
и лоток остаётся закрытым.
Гугление по этой ошибке дало только ссылки на багтрекеры.

Ну, думаю, ладно. Не может открыть и не надо.
Попробовал так

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso && eject /dev/dvd
не открывается

Попробовал так

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso; eject /dev/dvd
не открывается, eject говорит no such file /dev/dvd

Попробовал так

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso && sleep 5 && eject /dev/dvd
не открывается

При этом во всех случаях болванка записана нормально - контрольная сумма сходится.

Нагуглил ещё, что wodim вроде умеет писать dvd, но говорят, что часто портит болванки. Пробовать не решаюсь.
Ещё нашелся вариант типа

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd dvd.iso -eject
но здесь, судя по всему, iso пишется как файл, поэтому идёт ругань на размер файла.
Похоже, что не то.

Попробовал записать с помощью xfburn - при установленной опции лоток открылся.
Но она не использует growisofs.

В конце концов попробовал ещё так

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso && eject /dev/dvd || eject /dev/dvd
лоток открылся, но болванка оказалась испорченной.


Если я не ошибаюсь, связка && означает логическое И.
Если я опять же не ошибаюсь, связка || означает логическое ИЛИ.
И если я ещё раз не ошибаюсь, то в коде

Код: Выделить всё

command1 && command2 || command3
выполняется command1, в случае успешного завершения command1 выполняется command2, в противном случае выполняется command3

Однако вариант

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso && eject /dev/dvd
не работает.
Вариант

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso || eject /dev/dvd
не пробовал.

Вопрос: Что я делаю не так?
И, кстати, как узнать код завершения программы?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [Решено:]Запись дисков при помощи growisofs

Сообщение t.t »

Если cd/dvd-привод в системе один, eject без аргументов попробуйте.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: [Решено:]Запись дисков при помощи growisofs

Сообщение liaonau »

Код завершения последней:

Нормально записывается, но из-за какого-то бага не может открыть трей и поэтому выходит с ненулевым кодом?
Если так, то попробуйте недокументированную опцию

Код: Выделить всё

growisofs -use-the-force-luke=notray опции-как-раньше && eject

Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: [Решено:]Запись дисков при помощи growisofs

Сообщение Hephaestus »

Задача решена.
Да, действительно, growisofs завершалась с кодом 1.
Причина была в имени: /dev/dvd - это всего лишь симлинк на /dev/sr0.
Так вот, оказалось, что во время работы growisofs все симлинки удаляются, а после завершения восстанавливаются.
Уж не знаю, по каким соображениям, но факт.
Отсюда и ошибка growisofs ":-( unable to reload tray: No such file or directory", и аналогичная ошибка eject.

Кстати, попытка указать eject без параметров, показала, что eject пытается обратиться к /media/cdrom0 и ругается на неблочное устройство.

Если же использовать имя устройства /dev/sr0, то growisofs отрабатывает без сообщения об ошибке и выдаёт код завершения 0. Хотя лоток всё равно не открывает. Но это уже, думаю, зависит от привода.
Не знаю, предполагает ли "reload tray" открытие лотка. По-моему у разных приводов по-разному.
В моём случае лоток не открывается, но внутри привода какое-то движение происходит.

Таким образом, для открытия лотка нужно всё-таки использовать eject, но нужна задержка секунд на 5-8, причём независимо от кода завершения growisofs.
Во время задержки успевают восстановиться симлинки, поэтому можно использовать как /dev/sr0 так и /dev/dvd. По этой же причине eject может использоваться без параметров, если привод единственный.

В результате вырисовывается примерно такая команда

Код: Выделить всё

$growisofs -dvd-compat -speed=4 -Z /dev/dvd=dvd.iso; sleep 8 && eject


Всем спасибо за участие.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: