growisofs и выдвигание лотка

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

growisofs и выдвигание лотка

Сообщение QWERTYASDF »

Здравствуйте.

Нужно получить конвеер операций "создание iso-образа video-dvd диска---прожиг образа на болванку---проверка контр. сумм образа и болванки". Для всех этих операций при помощи гугла я нарыла соответствующие утилиты. Проблема в том, что лоток моего двд-привода после выдвигания не задвигается назад без внешнего механического воздействия (чуть поднять рукой). У growisofs не нашла опции, запрещающей выдвигание лотка и из-за этого конвеер останавливается. Есть ли какие-то варианты решения этой проблемы без замены growisofs на что-нибудь типа woodim? Мне growisofs не хочется менять так как уже вполне успешно прожгла несколько болванок ей и там есть опция -dvd-compat, которая делает хорошо для совместимости с железными плеерами.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21358
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: growisofs и выдвигание лотка

Сообщение Bizdelnick »

QWERTYASDF писал(а):
02.08.2013 02:52
Мне growisofs не хочется менять так как уже вполне успешно прожгла несколько болванок ей и там есть опция -dvd-compat, которая делает хорошо для совместимости с железными плеерами.

Она чем-то отличается от -dao у wodim?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: growisofs и выдвигание лотка

Сообщение QWERTYASDF »

Проблема после прожига остается - без извлечения лотка не обновляется информация об устройстве (приводе). Какой эквивалент выброса-захвата лотка можно применить?
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: growisofs и выдвигание лотка

Сообщение Hephaestus »

QWERTYASDF писал(а):
02.08.2013 16:57
Какой эквивалент выброса-захвата лотка можно применить?
Я не понял, у Вас чисто механическая проблема с выдвиганием-задвиганием лотка? То есть проблема в самом лотке?
Тогда тут поможет только замена привода.

А так вообще команда eject. Выдвигает и задвигает лоток. В конвейер вполне можно воткнуть.
Только была у меня проблема на одной из прошлых версий growisofs - удалялись симлинки на устройства и болванка оказывалась запорченной.
Нужно было перед выдвиганием лотка с помощью eject выставить задержку (командой sleep), чтобы симлинки успели восстановиться. Величина задержки зависит от железа, но примерно секунд 8-10.
В 64-битной версии такой проблемы уже не было, но на всякий случай имейте в виду.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: growisofs и выдвигание лотка

Сообщение QWERTYASDF »

Моя проблема: после прожига болванки, связка из dd и md5sum (надеюсь, правильно написала) не определяет содержимое /dev/dvd так, как определяет после выброса-загрузки лотка. А натурально открывать лоток я не хочу т.к. он не задвигается назад. Мой вопрос: можно ли что-то сделать на программном уровне, чтобы после прожига можно было вычислять контрольную сумму записанного без механического выдвижения лотка?
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: growisofs и выдвигание лотка

Сообщение Hephaestus »

QWERTYASDF писал(а):
04.08.2013 00:21
Моя проблема: после прожига болванки, связка из dd и md5sum (надеюсь, правильно написала) не определяет содержимое /dev/dvd так, как определяет после выброса-загрузки лотка. А натурально открывать лоток я не хочу т.к. он не задвигается назад. Мой вопрос: можно ли что-то сделать на программном уровне, чтобы после прожига можно было вычислять контрольную сумму записанного без механического выдвижения лотка?

Выдвижение лотка вообще вещь необязательная.
У меня выдвижение лотка вообще не работало на прошлой версии growisofs из-за удаляемых симлинков на устройство и тем не менее, контрольные суммы считались и всё было нормально.
Проверял. Что с перезагрузкой лотка, что без - разницы не было никакой. Хотя может зависеть от привода.
На некоторых приводах автоматическая перезагрузка лотка вообще не происходит. Никогда. И всё работает.

Далее, поясните, что значит "не определяет содержимое /dev/dvd". В чём это выражается? Не показывает содержимое диска? Не даёт примонтировать?

Или не сходятся контрольные суммы? Тогда покажите, как именно Вы используете связку dd и md5sum.
Команды в студию.

На программном уровне можно удалять файл устройства и снова создавать его (силами udev или кто у Вас там).
Этого должно быть достаточно. Но это, повторяю, крайний случай. Скорее всего, для правильного подсчёта контрольной суммы это не требуется.

И да, лучше всего всё-таки заменить привод. Или привести в порядок лоток. Иначе его когда-нибудь заклинит насовсем. и случится это в самый ответственный момент. Ну и есть шанс получить разбалансировку - тоже ничего хорошего.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: growisofs и выдвигание лотка

Сообщение QWERTYASDF »

fflatx писал(а):
04.08.2013 14:50
что значит "не определяет содержимое /dev/dvd". В чём это выражается? Не показывает содержимое диска? Не даёт примонтировать?

Или не сходятся контрольные суммы? Тогда покажите, как именно Вы используете связку dd и md5sum.
Команды в студию.


Не даёт примонтировать, не сходятся контрольные суммы.

Вызывается с параметром - полным именем файла с образом.

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

#!/bin/bash

wodim dev=/dev/scd0 -dao speed=4 -v $1

MDP5ISO=`md5sum $1`

EXTENTS=`echo $(( $(ls -l $1 | awk '{ print $5 }') / 2048 ))`

MD5DVD=`dd if=/dev/dvd bs=2048 count=$EXTENTS | md5sum`

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

Re: growisofs и выдвигание лотка

Сообщение Hephaestus »

QWERTYASDF писал(а):
07.08.2013 22:21
Не даёт примонтировать, не сходятся контрольные суммы.
А при перезагрузке лотка, стало быть, сходятся? Мда...

QWERTYASDF писал(а):
07.08.2013 22:21
Вызывается с параметром - полным именем файла с образом.
Так. wodim, я так понимаю, выбран потому, что позволяет не выдвигать лоток.

У меня имел место такой глюк: в процессе записи с помощью growisofs удалялся симлинк /dev/dvd из-за чего growisofs не мог выдвинуть лоток, хотя и пытался, в этот момент происходило перечитывание диска.
Попробуйте этот глюк "организовать" у себя.

У Вас схема будет примерно такая:
1. Запускаем запись с помощью growisofs в фоновом режиме, причём к устройству обращаемся через симлинк, например /dev/dvd
2. Удаляем симлинк /dev/dvd
3. growisofs пытается выдвинуть лоток, говорит: не могу.
4. Делаем небольшую задержку (секунд 5-8), чтобы вся эта кухня успела сработать.
5. Восстанавливаем симлинк.
6. Обращаясь к симлинку считаем контрольную сумму.
Идея бредовая, но чем чёрт не шутит - может и сработает.
На всякий случай: удаление симлинка во время записи может выйти боком, поэтому будьте готовы к риску в виде испорченной болванки.

Ещё вариант: удаление и добавление устройств на лету.
Это уже в паре с wodim без выдвижения лотка. После того, как сеанс записи нормально завершен, удаляем устройство, добавляем вновь, диск перечитывается.
Что-то типа этого http://habrahabr.ru/post/102387/
Но опять же, ознакомьтесь внимательно, не торопитесь, не напутайте ничего. Сам я это не пробовал, за последствия не отвечаю.

Самый лучший вариант: смените уже этот чёртов привод. Цена вопроса - 700-800 рублей. Что там за привод у Вас такой драгоценный, что Вы никак с ним не расстанетесь?
Или на худой конец, посмотрите у него транспорт, почему лоток не задвигается, может там пыль набилась - заклинивает.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
QWERTYASDF
Сообщения: 989
Статус: Чайник со свистком
ОС: GNU/Linux

Re: growisofs и выдвигание лотка

Сообщение QWERTYASDF »

fflatx

Спасибо большое. Попробую Ваш совет когда будет время.

Привод у меня на данном компе - pioneer DVR-111D (вроде бы, пишу не с того компа, нет возможности посмотреть). Но вопрос обхода открытия/закрытия лотка принципиальный - на ноутах автоматики такой нету, а я как-раз сейчас основное рабочее место на ноут переношу...
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: growisofs и выдвигание лотка

Сообщение Hephaestus »

QWERTYASDF писал(а):
10.08.2013 17:42
Но вопрос обхода открытия/закрытия лотка принципиальный - на ноутах автоматики такой нету, а я как-раз сейчас основное рабочее место на ноут переношу...
А на ноутовых приводах, возможно, открытие лотка и не понадобится. Я уже говорил, это зависит от привода, и мне встречались приводы, где лоток не перезагружался.
Но, правда, за ноуты ручаться не буду, давно с ними дела не имел. На современных ноутах, вроде и приводов-то нет. Только внешние. А к внешним в полной мере относится то, что и к приводам на десктопах.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: growisofs и выдвигание лотка

Сообщение liaonau »

QWERTYASDF писал(а):
02.08.2013 02:52
У growisofs не нашла опции, запрещающей выдвигание лотка и из-за этого конвеер останавливается.

Есть, но недокументированная -use-the-force-luke=notray.

Некоторым приводам вроде бы необходимо открываться после прожига чтобы правильно читать диск.
Не уверен, но может быть вместо извлечения можно использовать ioctl CDROMRESET?

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

#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/cdrom.h>
#include <unistd.h>

#define DEVICE "/dev/sr0"

int main(int argc, char* argv[])
{
   int fd;
   fd = open(DEVICE, O_RDONLY|O_NONBLOCK);
   if (fd < 0)
   {
      perror("open");
      return fd;
   }
   if (ioctl(fd, CDROMRESET, 1) < 0)
      perror("ioctl");
   close(fd);
   return 0;
}
Спасибо сказали: