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

Knoppix

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

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

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

Сообщение Rootlexx »

Всем привет.
Итак, имеем Debian GNU/Linux 7.1 wheezy. На днях заметил такую неприятность: если при смонтированном диске нажать на кнопку извлечения, то диск выедет, не размонтировавшись.
В sysctl при этом dev.cdrom.lock = 1, то есть, по идее, привод должен блокироваться, и не позволять извлекать смонтированный диск. При ручном монтировании так и происходит, но у udisks своё мнение на этот счёт.
В принципе, при нажатии на кнопку извлечения udev должен генерировать событие, приняв которое, udisks и должен размонтировать извлекаемый диск. Но запуск udevadm monitor показал, что ни одно событие (нажатие на кнопку, открытие-закрытие лотка, даже смена диска) не создаётся, пока диск смонтирован :huh: .
В squeeze такого не было, но там использовался hal.
С некоторой кривизной имеющегося у меня железа я уже смирился. Посему вопрос такой: у кого-нибудь ещё наблюдается похожее поведение?
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Нет ли чего-нибудь криминального в правилах udev? У меня udev блокировал лоток после вставки диска, даже если он не примонтирован. Так что не исключаю, что это udev "чудит".
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 писал(а):
17.06.2013 23:54
Нет ли чего-нибудь криминального в правилах udev? У меня udev блокировал лоток после вставки диска, даже если он не примонтирован. Так что не исключаю, что это udev "чудит".

На беглый взгляд - нет. Да и не лез я туда.
Блокировка лотка udev'ом - это "нормальное" поведение. Смотрите комментарии в /lib/udev/rules.d/60-cdrom_id.rules.
Как ни странно, с этим проблем нет, и лоток успешно разблокируется тем же udev'ом при нажатии на кнопку (получении события). Но стоит диск смонтировать, и всё - можно делать, что хочешь, udev этого не видит.
Собственно, меня даже не столько пути решения проблемы интересуют - системой пользуюсь лишь я, и мне несложно размонтировать диск вручную - а вопрос: это моё железо чудит, или баг в udev/udisks? Ведь если такое не только у меня, надо оформлять багрепорт.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

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

Сообщение drBatty »

Rootlexx писал(а):
18.06.2013 00:37
а вопрос: это моё железо чудит, или баг в udev/udisks? Ведь если такое не только у меня, надо оформлять багрепорт.

вроде такой багрепорт уже давно висит. Лично я "исправил" этот баг просто тотальным отказом от этих ваших лотков. Уж больно дорогой гигабайт получается, если сравнивать с флешками, да и надёжность никакая.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

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

Сообщение Rootlexx »

drBatty писал(а):
18.06.2013 15:21
вроде такой багрепорт уже давно висит.

Можно ссылку? Всё, что я встречал, относится ещё к эпохе до-udisks.
drBatty писал(а):
18.06.2013 15:21
Лично я "исправил" этот баг просто тотальным отказом от этих ваших лотков.

Так у вас тоже такое наблюдается? Но у вас, насколько понимаю, не Debian?
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Rootlexx писал(а):
18.06.2013 00:37
Блокировка лотка udev'ом - это "нормальное" поведение. Смотрите комментарии в /lib/udev/rules.d/60-cdrom_id.rules.
Как ни странно, с этим проблем нет, и лоток успешно разблокируется тем же udev'ом при нажатии на кнопку (получении события). Но стоит диск смонтировать, и всё - можно делать, что хочешь, udev этого не видит.

Да, я знаю, что это поведение по умолчанию. И у меня с этим поведением возникла проблема: когда я вставляю диск, udev тут же блокирует привод, и после размонтирования блокировка не снимается. Так что, все же, советую поковырять правила udev.
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 писал(а):
18.06.2013 20:51
Да, я знаю, что это поведение по умолчанию. И у меня с этим поведением возникла проблема: когда я вставляю диск, udev тут же блокирует привод, и после размонтирования блокировка не снимается.

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

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

Сообщение Bizdelnick »

Rootlexx писал(а):
19.06.2013 15:10
раз никто не написал, что испытывает такую же проблему в Debian

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

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

Сообщение Rootlexx »

Bizdelnick писал(а):
19.06.2013 15:42
Не факт, что тему вообще читал кто-то, кто пользуется одновременно Debian и оптическим приводом. Я от своего давным-давно отключил питание, потому что шлейфов не хватало, и начисто о нём забыл, например.

Ещё не вечер. Я вот собираюсь разобраться, почему в dolphin не отображается мой флоппик. Подозреваю, правда, что это не баг, а фича, воплощающая дружелюбие к пользователю :) .
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Rootlexx писал(а):
19.06.2013 15:10
Почитал вашу тему. Что странно: по идее, блокировка не должна препятствовать выбросу диска по нажатию кнопки, ибо в том же файле присутствует правило, которое разблокирует привод при нажатии на кнопку на нём. По крайней мере у меня это более-менее работает.

Сейчас проверил на SystemRescueCD 2.4.1, у меня также работает. А в Slackware-current - нифига, как и в 14. Правило в SystemRescueCD такое:

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

$ cat /mnt/cdrom/lib/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"

KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1"
IMPORT{program}="cdrom_id --export $tempnode"

LABEL="cdrom_end"

В Slackware это же правило посложнее :)
Spoiler

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

$ cat /lib/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 --lock-media $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"

При этом в SystemRescueCD udev не проявляет реакции на события от привода, а в Slackware реакция есть на вставку и извлечение диска. Версии пакетов:

Slackware:

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

ls -1 /var/log/packages/{udev,udisks,kernel-huge}*
/var/log/packages/kernel-huge-smp-3.2.29_smp-i686-1
/var/log/packages/udev-182-i486-6
/var/log/packages/udisks2-2.1.0-i486-1


SystemRescueCD:

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

# udevd --version
164

Версия ядра - 3.0.13, udisks отсутствует.
UPD: Если изменить (закомментировать) в Slackware в 60-cdrom_id.rules строку

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

IMPORT{program}="cdrom_id --lock-media $devnode"
то реакции udev'а на кнопку по-прежнему нет, но диск извлекается, будучи смонтированным.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21418
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

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

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

Сообщение Rootlexx »

Bizdelnick писал(а):
20.06.2013 00:11
Проверил, у меня всё один к одному: лоток вылезает, диск не отмонтируется, в udevadm monitor - тишина.

А вот это уже всё меняет. Огромное спасибо за тест.
Загружу парочку других дистрибутивов - проверю, как там. Возможно, это не дистроспецифичная проблема.
Спасибо сказали:
Аватара пользователя
sarbash
Сообщения: 42
ОС: Debian/sid

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

Сообщение sarbash »

Только что проверил - такая же беда, как и у автора топика.
Однако.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

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

Сообщение drBatty »

Rootlexx писал(а):
18.06.2013 17:00
Так у вас тоже такое наблюдается? Но у вас, насколько понимаю, не Debian?

ЕМНИП да, наблюдается. Но проверить сейчас не могу. Slackware64-current.
udevd --version
182
Linux 3.9.5
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

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

Сообщение Rootlexx »

drBatty писал(а):
22.06.2013 06:28
ЕМНИП да, наблюдается

drBatty писал(а):
22.06.2013 06:28
Linux 3.9.5

Если действительно так, то становится весьма интересно.
Я скачал kubuntu 13.04, и там описанной проблемы нет: udev при нажатии на кнопку посылает сообщение DISK_EJECT_REQUEST, и смонтированный udisks носитель размонтируется при извлечении.
Чтобы понять, в какой именно компоненте проблема, я установил в Debian сначала udisks от ubuntu, а потом, убедившись, что это не дало никакого эффекта, и udev оттуда же. Но проблема осталась, и udev всё так же не посылал сообщение при смонтированном диске.
Появилась мысль, в чём может быть проблема. Сейчас проверю и отпишусь.
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

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

Сообщение alv »

Rootlexx писал(а):
22.06.2013 10:31
Я скачал kubuntu 13.04, и там описанной проблемы нет

а в Ubuntu и Xubuntu есть
в openSUSE с KDE - нет
буду прегружаться - проверю, как в openSUSE с Xfce
больше у меня сейчас ничего нету
но похоже, что это не дистроспецифическая проблема
хотя, ИМХО, актуальность её уже приближается к проблеме сгоревшего флоппика

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

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

Сообщение Rootlexx »

alv писал(а):
22.06.2013 12:37
а в Ubuntu и Xubuntu есть

Хм, странно. Я проверял в xubuntu 12.04.1, и там тоже всё в порядке было.
Вы диск вручную монтируете, или это делает xfce?
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

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

Сообщение alv »

Rootlexx писал(а):
22.06.2013 12:44
Я проверял в xubuntu 12.04.1

я - в 13.04
раньше я про такое даже не слышал

Rootlexx писал(а):
22.06.2013 12:44
Вы диск вручную монтируете, или это делает xfce?

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

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

Сообщение Rootlexx »

Rootlexx писал(а):
22.06.2013 10:31
Появилась мысль, в чём может быть проблема. Сейчас проверю и отпишусь.

Похоже, причина найдена.
Spoiler
В правиле udev /lib/udev/rules.d/60-cdrom_id.rules, отвечающем за блокирование привода при вставленном диске, я обратил внимание на следующий комментарий:

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

# import device and media properties and lock tray to
# enable the receiving of media eject button events
IMPORT{program}="cdrom_id --lock-media $tempnode"
- вот как раз события-то и не приходят! Кроме того, как я уже писал, известно, что udisks разблокирует привод после монтирования. Может, в этом и проблема?
Ну, выполнил # /lib/udev/cdrom_id --lock-media /dev/sr1 - привод заблокировался, но на нажатие кнопки не реагировал, однако после размонтирования событие внезапно пришло, как будто всё это время стояло в очереди, ожидая чего-то.
Далее я решил проверить, определит ли udisks, что диска уже нет, если его об этом попросить. Для этого вынул диск, а затем выполнил $ udisks --poll-for-media /dev/sr1 - пришло событие change. Ладно, а если вынуть диск и сразу вставить обратно? - после выполнения команды событие снова пришло. Самое удивительное, что даже если диск вообще не вынимать, событие change после выполнения данной команды приходит, отрабатывает правило udev, и лоток блокируется, как при вставке нового диска :huh: . Причём повторные вызовы этой команды не имеют никакого эффекта вплоть до размонтирования и смены диска. Как будто после монтирования udev "забывает" о диске, а после udisks --poll-for-media "вспоминает", и "помнит" уже вплоть до его замены. То есть poll'инг работает как-то криво.
И тут я вспомнил комментарий в коде udisks, на который наткнулся в поиске кода, разблокирующего привод после монтирования:

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

/* If the kernel and device support sending EJECT_REQUEST change uevents
 * and we use in-kernel polling, keep the door locked, as udev calls
 * eject on pressing the button.  Otherwise unlock it, to keep the
 * hardware button working without userspace support */
if (!device->priv->using_in_kernel_polling)
  unlock_cd_tray (device);

Вспомнив упоминавшийся комментарий в правиле udev, утверждающий, что события кнопки извлечения приходят лишь при заблокированном лотке, решил проверить, используется ли in-kernel polling в Debian и Ubuntu. Результаты:
  • Ubuntu

    user

    $ cat /sys/module/block/parameters/events_dfl_poll_msecs 0 $ cat /sys/block/sr1/events_poll_msecs 2000

    - используется.
  • Debian

    user

    $ cat /sys/module/block/parameters/events_dfl_poll_msecs 0 $ cat /sys/block/sr1/events_poll_msecs -1

    - не используется. Ну так давайте включим: # echo 2000 > /sys/block/sr1/events_poll_msecs - проблема исчезла.

В чём же дело, почему in-kernel polling не используется в Debian? Ответ нашёлся в списке патчей на udev, накладываемых в Ubuntu:

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

Description: Set default polling interval on CD drives as well. The events_dfl_poll_msecs will not trigger if "block" is not a module, but built in. This will avoid udisks etc. having to poll from userspace, and provide proper ejection when the hardware eject button is pressed.
Author: Martin Pitt <martin.pitt@ubuntu.com>
Bug-Ubuntu: https://launchpad.net/bugs/890592

Index: precise/rules/rules.d/60-persistent-storage.rules
===================================================================
--- precise.orig/rules/rules.d/60-persistent-storage.rules    2012-02-06 09:09:39.413371483 +0100
+++ precise/rules/rules.d/60-persistent-storage.rules    2012-03-28 11:33:05.900794721 +0200
@@ -10,6 +10,7 @@

 # enable in-kernel media-presence polling
 ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"
+ACTION=="add", ATTR{removable}=="1", ATTR{events_poll_msecs}=="-1", ATTR{events_poll_msecs}="2000"

 SUBSYSTEM!="block", GOTO="persistent_storage_end"
В Debian block также не является модулем, а вкомпилирован прямо в ядро. Вот и причина несрабатывания правила, включающего in-kernel polling.

Сейчас оформлю всё и отправлю отчёт об ошибке в Debian BTS.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Rootlexx писал(а):
22.06.2013 14:21
В Debian block также не является модулем, а вкомпилирован прямо в ядро

В Slackware, получается, та же проблема с модулем (и это истинная причина моей проблемы):

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

$ zgrep -i "block" /proc/config.gz
CONFIG_BLOCK=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_BLOCK=m
CONFIG_MTD_BLOCK_RO=m
CONFIG_MTD_BLOCK2MTD=m
# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
CONFIG_TCM_IBLOCK=m
CONFIG_I2O_BLOCK=y
CONFIG_SSB_BLOCKIO=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MSPRO_BLOCK=m
CONFIG_ROMFS_BACKED_BY_BLOCK=y
CONFIG_ROMFS_ON_BLOCK=y
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
CONFIG_XOR_BLOCKS=y
# Block modes

Это который в самой первой строке должен быть модулем? И

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

$ cat /sys/module/block/parameters/events_dfl_poll_msecs
0
$ cat /sys/block/sr0/events_poll_msecs
2000
$ grep -e "poll_msecs" /lib/udev/rules.d/*
/lib/udev/rules.d/60-persistent-storage.rules:ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", ATTR{parameters/events_dfl_poll_msecs}="2000"
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
То есть после выполнения # echo 2000 > /sys/block/sr0/events_poll_msecs ваша проблема исчезла? Или это значение уже было там по умолчанию?
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Rootlexx писал(а):
22.06.2013 16:40
То есть после выполнения # echo 2000 > /sys/block/sr0/events_poll_msecs ваша проблема исчезла? Или это значение уже было там по умолчанию?

Нет, проблема не исчезает.
По умолчанию

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

$ cat /sys/block/sr0/events_poll_msecs
2000
$ cat /sys/module/block/parameters/events_dfl_poll_msecs
0

но реакции на кнопку нет, При вставке диска приходит событие change, udisks2 выдает уведомление о том, что он примонтировал диск. Нажимаю кнопку извлечения на приводе - ноль внимания. А вот если ткнуть мышью на значок извлечения, то событие снова приходит, диск отмонтируется и лоток выдвинется. Если диск отмонтировать, то события опять нет.
Slackware64-current/Xfce/Xiaomi Mi Notebook Pro 15.6 | Arch Linux/Xfce/Lenovo G580
-------------
Registered Linux User #557010
Спасибо сказали:
Аватара пользователя
drhouse123
Сообщения: 9
ОС: Debian, Gentoo

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

Сообщение drhouse123 »

Wheezy
Ядро 3.9.6 пакетированное

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

drhouse123@debian-pc:~$ zgrep -i block /proc/config.gz
CONFIG_BLOCK=y
CONFIG_BLOCK_COMPAT=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_HAVE_MEMBLOCK_NODE_MAP=y
CONFIG_ARCH_DISCARD_MEMBLOCK=y
CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_BLOCK=m
CONFIG_MTD_BLOCK_RO=m
CONFIG_MTD_BLOCK2MTD=m
# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
CONFIG_TCM_IBLOCK=m
CONFIG_I2O_BLOCK=m
CONFIG_SSB_BLOCKIO=y
CONFIG_BCMA_BLOCKIO=y
CONFIG_MMC_BLOCK=m
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_MSPRO_BLOCK=m
# CONFIG_ROMFS_BACKED_BY_BLOCK is not set
CONFIG_ROMFS_ON_BLOCK=y
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
CONFIG_XOR_BLOCKS=m
# Block modes


Не дает извлечь, лоток обратно закрывается

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

drhouse123@debian-pc:~$ sudo udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[119234.487235] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
KERNEL[119238.098180] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
UDEV [119238.286795] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
UDEV [119238.410307] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
KERNEL[119255.005979] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
root@debian-pc:/home/drhouse123# echo "dev.cdrom.autoclose = 0" >> /etc/sysctl.conf
root@debian-pc:/home/drhouse123# sysctl -p
vm.swappiness = 5
dev.cdrom.lock = 0
dev.cdrom.autoclose = 0
root@debian-pc:/home/drhouse123# exit
drhouse123@debian-pc:~$ sudo udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
KERNEL[119897.313137] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)
UDEV [119897.340645] change /devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:1/5:0:1:0/block/sr0 (block)



Теперь лоток выезжает, диск отмонтируется.
Меня зовут Керимбеков Галым. Являюсь активным пользователем Linux несмотря на свои ограниченные возможности.
Участвую в переводах вики Debian и KDE UserBase
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21418
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

После echo 2000 > /sys/block/sr1/events_poll_msecs диск стал иногда отмонтироваться. А иногда - нет... Странно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Обновил ядро до 3.9.5, теперь почему-то так (от ядра это же вроде бы не зависит):

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

$ cat /sys/module/block/parameters/events_dfl_poll_msecs
2000
cat /sys/block/sr0/events_poll_msecs
-1

Но после

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

# echo 2000 > /sys/block/sr0/events_poll_msecs
все равно привод блокируется безусловно, т.е, правило все равно не отрабатывает. Попробую пересобрать ядро, сделав block модулем.
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
Думаю, ваша проблема не связана с рассматриваемой здесь. У вас, похоже, ядро вообще не видит нажатия кнопки извлечения на приводе. Возможно, барахлит сам привод.
Спасибо сказали:
Аватара пользователя
yars
Сообщения: 1147
Статус: Slacker!
ОС: Slackware64-current

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

Сообщение yars »

Rootlexx писал(а):
23.06.2013 12:08
Думаю, ваша проблема не связана с рассматриваемой здесь. У вас, похоже, ядро вообще не видит нажатия кнопки извлечения на приводе. Возможно, барахлит сам привод.

Ну, попробую разобраться. Вряд ли это барахлит привод - наблюдаю такое на двух машинах с разным железом.
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 писал(а):
23.06.2013 12:18
Вряд ли это барахлит привод - наблюдаю такое на двух машинах с разным железом.

У меня два привода, и первый как раз точно так же не реагирует на кнопку извлечения. Второй же работает нормально.
Что касается сообщения об ошибке в BTS, то, поразмыслив немного, я уже не так уверен, что баг в udev. По идее, даже из пространства пользователя udisks должен корректно определять отсутствие диска и размонтировать его. И если, вынув диск, дать команду $ udisks --poll-for-media /dev/sr1, то диск размонтируется. Так что похоже, что трюк с udev - лишь обход настоящей проблемы в udisks.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4471
Статус: GNU generation
ОС: Debian GNU/Linux

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

Сообщение Rootlexx »

Rootlexx писал(а):
23.06.2013 13:06
По идее, даже из пространства пользователя udisks должен корректно определять отсутствие диска и размонтировать его.

Поковырялся в коде udisks. Вот нужный кусок:

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

if (is_cdrom)
  {
    /* optical drives need special care
     *
     *  - use O_NONBLOCK to avoid closing the door
     *  - use O_EXCL to avoid interferring with cd burning software / audio playback / etc
     */
    fd = open (device_file, O_RDONLY | O_NONBLOCK | O_EXCL);
    if (fd != -1)
      {
        close (fd);
      }
  }

Проблема в том, что попытка открыть файл устройства с O_EXCL приведёт к EBUSY, если оно смонтировано. Поэтому udisks и не обнаруживает извлечение смонтированного диска.
Если же убрать O_EXCL, то вызов open просто зависнет, если на диск производится запись, что приведёт к остановке пробы всех устройств.
По-хорошему, проба каждого устройства должна быть в отдельном потоке, но переделывать это малой кровью не получится (придётся разбираться с синхронизацией), а большой и бессмысленно, ибо udisks1 уже deprecated, да и патч такого размера в Debian stable не примут.
Выходит, нужно всё же обращаться, чтобы включили in-kernel polling.

Bizdelnick писал(а):
22.06.2013 19:32
После echo 2000 > /sys/block/sr1/events_poll_msecs диск стал иногда отмонтироваться. А иногда - нет... Странно.

Если диск монтировался не с помощью udisks, то он всё равно не размонтируется при извлечении.
Короче говоря, добиться полностью вменяемой работы с ними не получится. Разве что заставить udev этим заниматься.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21418
Статус: nulla salus bello
ОС: Debian GNU/Linux

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

Сообщение Bizdelnick »

Rootlexx писал(а):
23.06.2013 14:34
Если диск монтировался не с помощью udisks, то он всё равно не размонтируется при извлечении.

Монтировал во время экспериментов при посредстве thunar, что он там дёргает - точно не знаю, но логично предположить, что udisks.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: