Извлечение диска без размонтирования

Knoppix

Модераторы: Warderer, Модераторы разделов

Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

Rootlexx писал(а):
22.06.2013 14:21
Сейчас оформлю всё и отправлю отчёт об ошибке в Debian BTS.

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

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Проверил у себя.
Выглядит это так: если в настройках файлового менеджера/графической оболочки понаставить всяких галочек насчет автомонтирования и т.п., тогда вроде всё работает правильно (нажатие кнопки на приводе приводит к отмонтированию ФС и извлечению лотка).
Если же галочки автомонтирования в настройках не выставлены, тогда проблема проявлется: по нажатию кнопки выдвигается лоток, но ФС остается смонтированнной.

Вот это

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

echo 2000 > /sys/block/sr1/events_poll_msecs
не даёт никакого эффекта.

Всё это при условии, что в /etc/fstab отсутствуют записи для cdrom.

А вот если в /etc/fstab есть запись типа

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

dev/sr0 /media/cdrom0 udf,iso9660 ro,norock,mode=0444,user,noauto        0       0
тогда совсем всё грустно: по нажатию кнопки выдвигается лоток и ФС размонтируется, но происходит это в любом случае, даже если диск занят (например плеер что-то проигрывает с этого диска). Естественно в плеере сыплются ошибки.
При этом в файловых менеждерах/оболочках диск вообще не виден и примонтировать его кроме как из командной строки невозможно.

Проверялось на Debian Wheezy 7.0,
Оболочки: LXDE, XFCE.
ФМ: PCManFM, Thunar.

Мне всегда очень нравилась эта фишка: система не отдаст диск, пока не отмонтируешь.
Сейчас этого нет. Жаль. Не подскажете, это возможно как-нибудь устроить, а?

А то прямо виндовое поведение получается. Разве что синий экран не выплёвывает.




Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
24.06.2013 01:04
Вот это

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

echo 2000 > /sys/block/sr1/events_poll_msecs
не даёт никакого эффекта.
...
А вот если в /etc/fstab есть запись типа

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

dev/sr0 /media/cdrom0 udf,iso9660 ro,norock,mode=0444,user,noauto        0       0

Обратите внимание, что в команде и в строке из fstab указаны разные устройства. Вы точно на том приводе включили in-kernel polling?
fflatx писал(а):
24.06.2013 01:04
Мне всегда очень нравилась эта фишка: система не отдаст диск, пока не отмонтируешь.
Сейчас этого нет. Жаль. Не подскажете, это возможно как-нибудь устроить, а?

  • Включите in-kernel polling.
  • Скопируйте /lib/udev/rules.d/60-cdrom_id.rules в /etc/udev/rules.d.
  • Закомментируйте два последних правила в скопированном файле.

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

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
24.06.2013 12:21
Обратите внимание, что в команде и в строке из fstab указаны разные устройства. Вы точно на том приводе включили in-kernel polling?
Да точно, точно. Привод у меня один. На несуществующем устройстве это бы не сработало.
Это я просто команду привёл не свою, а из чужого поста. Более того, я даже патч накладывал из Вашего багрепорта. Это уж точно должно быть правильно? Кстати, он не хотел накладываться из-за переносов строк в оригинальном файле. Это так должно быть или я что-то упустил? Ну, в общем наложил патч, проверил - без толку.

Сейчас обновился до 7,1. Поведение изменилось. Теперь наличие строки в fstab не препятствует появлению привода в файловом менеджере. Однако in-kernel polling не помогает. По нажатию кнопки лоток выдвигается безусловно, ФС не отмонтируется. Ну, то есть как и было на 7.0.
Зато в отсутствие записи в fstab всё стало ещё интереснее - привод виден в ФМ, но даже не монтируется, говорит нет доступа.
У Вас, кстати, как? В fstab про привод чего-нибудь написано? Ибо эта запись кардинально меняет поведение.


Мда, мне никогда не нравилась вся эта автоматика касательно съемных устройств. Вечно она норовит сработать, когда её не спрашивают.

Посему вот за это
Rootlexx писал(а):
24.06.2013 12:21
Включите in-kernel polling.
Скопируйте /lib/udev/rules.d/60-cdrom_id.rules в /etc/udev/rules.d.
Закомментируйте два последних правила в скопированном файле.
спасибо. Попробую - отпишусь.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
24.06.2013 13:10
Кстати, он не хотел накладываться из-за переносов строк в оригинальном файле. Это так должно быть или я что-то упустил?

Патч, который я прикрепил к багрепорту, - это патч, накладываемый в Ubuntu. Это просто пример, как можно сделать. Естественно, он требует небольшой модификации для использования в Debian.
fflatx писал(а):
24.06.2013 13:10
Ну, в общем наложил патч, проверил - без толку.

Перезагружались?
Добавляемое правило должно лишь включать in-kernel polling для сменных устройств. Если это произошло, но диск всё равно выезжает, не будучи размонтированным, - это другой вопрос.
Я так понимаю, монтирование осуществляется файловым менеджером? Попробуйте смонтировать командой $ udisks --mount /dev/устройство и проверьте.
Если же смонтированный с помощью udisks диск всё равно не размонтируется при извлечении, то это уже интереснее. Можете тогда запустить $ /sbin/udevadm monitor --property, вставить диск, смонтировать его, нажать кнопку извлечения, и вывод команды показать здесь? Если наличие строки в fstab у вас меняет поведение, то попробуйте оба варианта.
fflatx писал(а):
24.06.2013 13:10
У Вас, кстати, как? В fstab про привод чего-нибудь написано? Ибо эта запись кардинально меняет поведение.

Я проверял по-всякому, и у меня разницы нет.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

Добавлю на всякий случай: после включения in-kernel polling необходимо перезапустить все процессы udisks, что были запущены ранее, иначе он всё ещё будет считать, что используется userspace polling, и потому - разблокировать лоток после монтирования, отчего сообщения DISC_EJECT_REQUEST посылаться не будут. Проще всего выполнить # pkill udisks; возможно, потребуется перезайти в DE.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
24.06.2013 14:37
Перезагружались?
Добавляемое правило должно лишь включать in-kernel polling для сменных устройств.
Сейчас проверил - работает. Вчера не работало. Может, и впрямь перезагрузку надо было, но я вроде делал, не помню.
По нажатию кнопки привода ФС отмонтируется, лоток выдвигается. Монтировал через ФМ.

Rootlexx писал(а):
24.06.2013 14:37
Я проверял по-всякому, и у меня разницы нет.
Сейчас у меня разница состоит в том, что при наличии записи в fstab диск отмонтируется в любой момент (например, проигрывание).
Соответственно плеер ругается.

Если же записи в fstab нет, то система не отдаёт диск, пока он занят, то есть кнопка на приводе не срабатывает. Что в принципе радует. Именно этого мне и надо.
Единственное неудобство - привык я к команде mount из командной строки, здесь придется, видимо использовать udisks.

Попробовал смонтировать командой udisks --mount /dev/sr0. Результат такой же - не отдаёт диск, пока не отмонтируешь. Хорошо. Ну, чуть длиннее команда, чуть менее удобно.


А вот это
Rootlexx писал(а):
24.06.2013 12:21
Включите in-kernel polling.
Скопируйте /lib/udev/rules.d/60-cdrom_id.rules в /etc/udev/rules.d.
Закомментируйте два последних правила в скопированном файле.
не сработало.
Если закомментировать IMPORT, то диск вообще не монтируется. Никак.
Если IMPORT оставить, а закомментировать {DISK_EJECT_REQUEST}, тогда диск монтируется, но потом по кнопке привода уже не отдаётся. Только командой eject. Кстати, вчера это поначалу работало как надо, потом перестало. Но это уже не актуально.

ПЫСЫ. Я тут попробовал монтировать диски командой pmount. Прекрасно монтируется и не отдаётся без спросу.
Тоже вариант. И как это я раньше не сообразил...


Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
24.06.2013 20:36
Если закомментировать IMPORT, то диск вообще не монтируется. Никак.

Да, я ошибся: программа cdrom_id, запускаемая udev, не только блокирует привод, но и отдаёт информацию о диске. Поэтому правильно сделать так: в скопированном файле правил закомментировать то, что с EJECT_REQUEST, а у другого просто убрать опцию --lock-media - и можете монтировать, как хотите: хоть с fstab, хоть без.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

Rootlexx писал(а):
24.06.2013 20:56
Да, я ошибся: программа cdrom_id, запускаемая udev, не только блокирует привод, но и отдаёт информацию о диске. Поэтому правильно сделать так: в скопированном файле правила закомментировать то, что с EJECT_REQUEST, а у другого просто убрать опцию --lock-media - и можете монтировать, как хотите: хоть с fstab, хоть без.

Собственно, я пришел именно к такому решению, но у меня это приводит к тому, что диск можно извлечь без размонтирования :(
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

yars писал(а):
24.06.2013 21:37
Собственно, я пришел именно к такому решению, но у меня это приводит к тому, что диск можно извлечь без размонтирования

Видимо, у вас не включён in-kernel polling, или параметр sysctl dev.cdrom.lock равен 0.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
24.06.2013 01:04
Мне всегда очень нравилась эта фишка: система не отдаст диск, пока не отмонтируешь.
Сейчас этого нет. Жаль.

Да, меня тоже такое положение вещей разочаровывает. Какие-то костыли везде.
Должно быть единообразие поведения: уж если лоток выдвигается, то диск должен размонтироваться всегда - или же не должен выдвигаться вообще. А сейчас то он вообще не размонтируется, то размонтируется, но лишь если был смонтирован с помощью udisks, а если просто командой mount - выдвинется, но останется смонтированным. И это, блин, всё в upstream! А чтобы разобраться во всём этом в условиях наличия отсутствия вменяемой документации, приходится лезть в исходники :angry: .
udisks вообще не настраиваем фактически: чего стоит только безусловное разблокирование лотка при отсутствии in-kernel polling. А как, например, указать свои опции монтирования по умолчанию для сменных устройств? И вообще, почему этим всем занимается целый отдельный сервис, если можно было просто с помощью того же udev динамически добавлять/удалять записи в fstab для подключаемых/отключаемых устройств, и монтировать их уже простым вызовом mount? Зато теперь подключённое устройство нельзя смонтировать от обычного пользователя с помощью mount, но можно - с помощью udisks :inv: ...
Такое ощущение, что чем дальше, тем больше quick'n'dirty решения начинают преобладать над заранее продуманной архитектурой. Грустно, но факт...
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
25.06.2013 18:42
udisks вообще не настраиваем фактически
Совсем что ль никак? Ну опции-то он откуда-то берет, не хардкодом же они записаны...
В мане сказано, что можно передать опции монтирования. Правда насчёт умолчаний не знаю.

Rootlexx писал(а):
25.06.2013 18:42
И вообще, почему этим всем занимается целый отдельный сервис, если можно было просто с помощью того же udev динамически добавлять/удалять записи в fstab для подключаемых/отключаемых устройств, и монтировать их уже простым вызовом mount?
Динамическую запись в fstab помню по Мандриве. Ничего хорошего. Была там какая-то приблуда, которая этим занималась.
Не знаю, должны ли были эти записи динамически удаляться, но они оставались в fstab по одной на каждую новую флешку. Да ещё и с явно прописанными именами устройств. В результате для каждой флешки надо было помнить имя устройства и монтировать именно его. Иначе оно монтироваться не хотело. В общем, тоже ничего хорошего.

Rootlexx писал(а):
25.06.2013 18:42
Зато теперь подключённое устройство нельзя смонтировать от обычного пользователя с помощью mount, но можно - с помощью udisks
Ну я вот флешки давно уже монтирую/отмонтирую при помощи pmount/pumount - вполне нормально. А теперь, оказывается и диски тоже так можно (раньше нельзя было).
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
26.06.2013 03:49
Ну опции-то он откуда-то берет, не хардкодом же они записаны...

Именно хардкодом.
fflatx писал(а):
26.06.2013 03:49
Динамическую запись в fstab помню по Мандриве. Ничего хорошего. Была там какая-то приблуда, которая этим занималась.
Не знаю, должны ли были эти записи динамически удаляться, но они оставались в fstab по одной на каждую новую флешку. Да ещё и с явно прописанными именами устройств. В результате для каждой флешки надо было помнить имя устройства и монтировать именно его. Иначе оно монтироваться не хотело. В общем, тоже ничего хорошего.

Ну так дело не в принципе, а в кривой реализации. Естественно, записи должны удаляться при отключении устройства.
Да и не помню что-то я таких приблуд в Mandriva, хотя пользовался ей ещё с 2005LE. За Mandrake не скажу.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
26.06.2013 10:53
Именно хардкодом.
Гкм... Ну, допустим, это какая-то начальная инициализация на случай отсутствия конфигов.
И что же на этом всё? Никакого способа это переопределить нет?
Посмотрел состав пакетов, посмотрел маны - конфигов не видать.
Оно конечно принимает опции командной строки, но...
Если всё так, то грустно.
Была у меня мысль выпилить этот udisks к чертям - не вышло. Там целая цепочка зависимостей.
Мда...

Rootlexx писал(а):
26.06.2013 10:53
Да и не помню что-то я таких приблуд в Mandriva
Было-было. Mandriva 2008. Вам видимо повезло не столкнуться с проблемой.
Записи добавлялись в fstab и оставались там. Udev тогда вроде там не было. Стало быть, это что-то другое.
Когда записей для внешних устройств в fstab стало больше трёх, начались нестыковки.
То ли на каждое устройство своя запись, то ли на каждый usb-порт - не помню, но помню, что мне руками пришлось удалять лишнее из fstab - чего-то там неправильно срабатывало.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21406
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Bizdelnick »

fflatx писал(а):
26.06.2013 12:38
Было-было. Mandriva 2008. Вам видимо повезло не столкнуться с проблемой.
Записи добавлялись в fstab и оставались там.

Было дело. Насколько помню, это был не баг, а фича. При использовании небольшого числа флешек не напрягало, видимо на это и был расчёт.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

fflatx писал(а):
26.06.2013 12:38
Оно конечно принимает опции командной строки, но...
Если всё так, то грустно.
Однако есть ещё надежда. :)
udisks-glue позволяет назначать событиям udisks пользовательские действия.
Имеет конфиг, кучу опций, в том числе и опции монтирования.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

fflatx писал(а):
26.06.2013 12:38
Была у меня мысль выпилить этот udisks к чертям - не вышло. Там целая цепочка зависимостей.
Мда...
А без учета зависимостей нельзя? Тоже попробую, но мне чуть проще - зависимости учитываю я.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

yars писал(а):
26.06.2013 18:56
А без учета зависимостей нельзя?
В Debian нельзя, насколько я знаю. Пакетный дистрибутив.
Зависимости прописаны в пакетах.
Цепочка udisks -> libgdu0 ->gvfs-daemons->gvfs->libgnome2-0 без этого в общем, можно жить, но дальше в зависимостях уже куча всякой всячины, в том числе нужные программы.

yars писал(а):
26.06.2013 18:56
Тоже попробую, но мне чуть проще - зависимости учитываю я.
Вы меня прямо заинтриговали. Это как же? Если для работы программы требуется библиотека, куда ж от неё деваться? Или там можно сделать так, что зависимости не пересекаются?
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

fflatx писал(а):
26.06.2013 20:00
Вы меня прямо заинтриговали. Это как же? Если для работы программы требуется библиотека, куда ж от неё деваться?

В Slackware управление пакетами осуществляется через pkgtools - pkgtool, {install,upgrade,remove,slack}pkg, и зависимости не проверяются. Вместо этого решение о установке любого пакета лежит на плечах администратора. Поэтому я (теоретически, потому что есть некоторый минимум пакетов, без которых работа системы невозможна вообще) могу удалить любой пакет из системы , равно как и поставить только часть пакетов, тем самым достигается более-менее оптимальный состав пакетов в зависимости от нужной функциональности. Если же какой -нибудь программе не хватает библиотеки, то программа не запустится. Диагностировать можно либо с помощью ldd, либо запустив программу из эмулятора терминала и проанализировав её вывод. В общих чертах, как-то так, не зря же система позиционируется как система для опытных пользователей ;)
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
26.06.2013 20:00
В Debian нельзя, насколько я знаю. Пакетный дистрибутив.
Зависимости прописаны в пакетах.

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

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
26.06.2013 21:30
Если очень хочется, то можно.
Интересная штука. Это типа, если куча пакетов требует udisks, создаём фиктивный udisks и подсовываем.
А настоящий udisks давно уже прибили. Так? Не понятно только, как это работает.

Я не знаю, что такого есть в udisks, что от него зависит куча пакетов, но думаю, дело всё-таки в содержимом пакета, а не просто в его наличии. Да, я наивно полагаю, что мантейнеры не часто совершают глупости вроде ненужных зависимостей.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21406
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Bizdelnick »

fflatx писал(а):
27.06.2013 12:12
Да, я наивно полагаю, что мантейнеры не часто совершают глупости вроде ненужных зависимостей.

Тем более что большая часть зависимостей генерируется скриптами, которые писали не дураки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

fflatx писал(а):
27.06.2013 12:12
Не понятно только, как это работает.

Я не знаю, что такого есть в udisks, что от него зависит куча пакетов, но думаю, дело всё-таки в содержимом пакета, а не просто в его наличии.

Потому я и написал "если очень хочется" :).
На беглый взгляд разделяемых библиотек в пакете udisks нет, так что падать от его отсутствия ничто не должно. А вот какой-то части функциональности можно и лишиться. Например, не будет работать (авто)монтирование в DE, а возможно, и вообще обнаружение внешних носителей.
Тем не менее, если очень хочется, можно превратить систему в слакварь. Но не нужно :).
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

Ну, не будет работать автомонтирование дисков в DE, и все. Падать от отсутствия udisks ничего и не должно - не такой он архиважный пакет. Тем более, это зависимости, нужные для работы самого udisks, а не для работы чего-нибудь еще. Плюс в Slackware все собирается так, чтобы дерево зависимостей было минимально ветвистым.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Извлечение диска без размонтирования

Сообщение Hephaestus »

Rootlexx писал(а):
27.06.2013 13:28
Потому я и написал "если очень хочется" smile.gif.
На беглый взгляд разделяемых библиотек в пакете udisks нет, так что падать от его отсутствия ничто не должно. А вот какой-то части функциональности можно и лишиться. Например, не будет работать (авто)монтирование в DE, а возможно, и вообще обнаружение внешних носителей.
Тем не менее, если очень хочется, можно превратить систему в слакварь. Но не нужно smile.gif.
Да я, в общем-то не спорю. Я просто говорю, непонятно, как работает эта штука.
Если в результате отваливается часть нужных функций, то вряд ли это удовлетворит юзера. Значит, нужна замена.

К примеру.
Взяли udisks, заменили фиктивным пакетом, ничего не упало, часть функций отвалилась, посмотрели, не понравилось, вернули всё как было. Смысл?
Udisk-то хочется выпилить не потому, что функции его не нужны, а потому реализация не устраивает.
Замена-то есть для udisks? Чем восполнить то, что отвалилось? Я не знаю.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

fflatx писал(а):
28.06.2013 15:50
Замена-то есть для udisks?

Я пока тоже не знаю, разве что udisks2. Но, похоже, он тоже не айс...
Rootlexx писал(а):
24.06.2013 23:56
Видимо, у вас не включён in-kernel polling, или параметр sysctl dev.cdrom.lock равен 0

Я это в очередной раз перепроверил, поначалу действительно, было выключено и то, и другое. Я аж обрадовался, но не тут-то было, после включения in-kernel polling (патчем, найденным вами), записи в sysctl.conf

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

dev.cdrom.check_media = 1
dev.cdrom.lock = 1

и перезагрузки(!) все остается по-прежнему: лоток наглухо блокируется, udevadm monitor показывает только событие change при вставке диска. Но хотя бы диск не отдает без размонтирования (собственно, так и было изначально), что уже плюс (и минус, это как посмотреть).... :( Пойду качать исходники udisks2 и смотреть их (хотя, честно говоря, шансов, что я что-то там найду, маловато - не хватает опыта и знаний).
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

yars писал(а):
30.06.2013 19:25
поначалу действительно, было выключено и то, и другое. Я аж обрадовался, но не тут-то было, после включения in-kernel polling (патчем, найденным вами), записи в sysctl.conf

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

dev.cdrom.check_media = 1
dev.cdrom.lock = 1

и перезагрузки(!) все остается по-прежнему: лоток наглухо блокируется, udevadm monitor показывает только событие change при вставке диска. Но хотя бы диск не отдает без размонтирования (собственно, так и было изначально), что уже плюс (и минус, это как посмотреть).... :(

Так, давайте по порядку.
  • После вставки диск блокируется правилом udev в /lib/udev/rules.d/60-cdrom_id.rules:

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

    IMPORT{program}="cdrom_id --lock-media $devnode"
  • При монтировании диск блокируется, если параметр sysctl dev.cdrom.lock равен 1.
  • При монтировании с помощью udisks:
    • если in-kernel polling выключен, то привод безусловно разблокируется после монтирования;
    • если in-kernel polling включён, то состояние привода не меняется.
  • При заблокированном лотке за извлечение по нажатию кнопки отвечает правило udev в /lib/udev/rules.d/60-cdrom_id.rules:

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

    ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

Принимая во внимание всё написанное выше, чтобы добиться такого поведения: диск не блокируется после вставки, но блокируется после монтирования и не извлекается до размонтирования - вам нужно:
  • Убрать опцию --lock-media в первом правиле.
  • Выставить значение параметра sysctl dev.cdrom.lock в 1.
  • Включить in-kernel polling.
  • Закомментировать второе правило.

Пожалуйста, проверьте, что вы всё выполнили.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

Re: Извлечение диска без размонтирования

Сообщение yars »

Ну вот, как и обещал, поднимаю эту тему. Имеем чистую Slackware 14.0 с Xfce, по умолчанию:

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

# cat /sys/module/block/parameters/events_dfl_poll_msecs
2000
# cat /sys/block/sr0/events
media_change eject_request
# cat /sys/block/sr0/events_poll_msecs
-1

При этом диск не извлекается кнопкой на приводе, вне зависимости, смонтирован он или нет. Более того, после автоматического примонтирования диска udisks2 и его извлечения кнопочкой в Thunar'е лоток блокируется без диска намертво, помогает только перезагрузка (ну или я не нашел способа извлечь программно - eject как бы отрабатывает, но лоток не извлекается). Начинаю экспериментировать с информацией из с сообщения №57.
UPD: Поэкспериментировал.
Spoiler

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

/etc/udev/rules.d/60-cdrom_id.rules
# do not edit this file, it will be overwritten on update

ACTION=="remove", GOTO="cdrom_end"
SUBSYSTEM!="block", GOTO="cdrom_end"
KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end"
ENV{DEVTYPE}!="disk", GOTO="cdrom_end"

# unconditionally tag device as CDROM
KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1"

# media eject button pressed
#ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end"

# import device and media properties and lock tray to
# enable the receiving of media eject button events
IMPORT{program}="cdrom_id $devnode"

# create default links to the first detected device
KERNEL=="sr0", ENV{ID_CDROM}=="1",        SYMLINK+="cdrom", OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdr",   OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdwriter",   OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_CD_RW}=="1",  SYMLINK+="cdrw",  OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_DVD}=="1",    SYMLINK+="dvd",   OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdr",  OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdwriter", OPTIONS+="link_priority=-100"
KERNEL=="sr0", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw", OPTIONS+="link_priority=-100"

# create all other device links
KERNEL=="sr[0-9]*", ENV{ID_CDROM}=="1",        SYMLINK+="cdrom%n", OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdr%n",   OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_R}=="1",   SYMLINK+="cdwriter%n",   OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_CD_RW}=="1",  SYMLINK+="cdrw%n",  OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD}=="1",    SYMLINK+="dvd%n",   OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdr%n",  OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_R}=="1",  SYMLINK+="dvdwriter%n", OPTIONS+="link_priority=-100"
KERNEL=="sr[0-9]*", ENV{ID_CDROM_DVD_RW}=="1", SYMLINK+="dvdrw%n", OPTIONS+="link_priority=-100"

LABEL="cdrom_end"

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

sysctl -q dev.cdrom.lock
dev.cdrom.lock = 1

In-kernel-polling включен, диск монтируется, но по кнопке на приводе не отдается. Эксперименты проводились без перезагрузок (просто перезапускал udisks, udev...). Попробую еще добавить в правила udev включение in-kernel-polling и перезагрузиться.
UPD2: Добавил, перезагрузился. Диск кнопкой не отдается (как и было изначально). Это хорошо, но хочется, чтобы диск по кнопочке размонтировался и отдался, а если это невозможно, выводить уведомление, что, мол, диск занят и отдать его нельзя. Вывод -- придется писать скриптик, который это реализует, затолкать его в правила udev и сделать как мне посоветовал вначале bormant - отключить блокировку диска по умолчанию.
UPD3: Комментирование строки с DISK_EJECT_REQUEST влияния не оказывает, раскомментировал обратно.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
moonglow
Сообщения: 90
ОС: CentOS

Re: Извлечение диска без размонтирования

Сообщение moonglow »

Fedora 19 LXDE, такое же поведение
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

Re: Извлечение диска без размонтирования

Сообщение Rootlexx »

Спасибо сказали: