почему udev не вызывает событие удаления для смонтированных разделов sdcard? - PullRequest
0 голосов
/ 09 марта 2019

Вопрос (TL; DR):

Для SD-карты с несколькими разделами, как получить по крайней мере событие «изменения» для смонтированных узлов из udev, когда uSD или SDcardудален из USB-SD-ридера, без отсоединения USB-кабеля от вашего ПК?

Бонус: получить событие «добавить / удалить» для узлов «раздела» (например, «/ dev / sdh2»)

Что не работает:

Когда смонтирован раздел, udev не выводит никакого события для узла раздела, когда извлекается карта !!!

Шаги для воспроизведения:

  • Вам необходим USB-SD ридер (я настоятельно рекомендую: https://www.kingston.com/en/flash/readers/FCR-HS4).Но я тестировал на многих других USB-SD ридерах (таких как основанные на GenesysLogic), ситуация та же.
  • Вам нужна карта памяти USB или SD, как минимум с 1 или 2 разделами.

Step1:

Создайте новое правило udev с именем: /etc/udev/rules.d/98-test.rules Содержимое:

KERNEL!="sd*" , SUBSYSTEM!="block", GOTO="END"
LABEL="WORK"
ACTION=="add", RUN+="/usr/bin/logger *****Received add event for %k*****"
ACTION=="remove", RUN+="/usr/bin/logger *****Received remove event for %k*****"
ACTION=="change", RUN+="/usr/bin/logger *****Received change event for %k*****"

LABEL="END"

Step2:

Установить ccze (sudo apt установить ccze).Это даст вам красивую цветную регистрацию событий.

Откройте терминал, выполните следующую команду:

journalctl -f | ccze -A

Результат:

Mar 09 23:01:32 Ev-Turbo kernel: sd 6:0:0:3: [sdh] 30408704 512-byte logical blocks: (15.6 GB/14.5 GiB) 
Mar 09 23:01:32 Ev-Turbo kernel:  sdh: sdh1 sdh2 
Mar 09 23:01:33 Ev-Turbo root[19519]: *****Received change event for sdh***** 
Mar 09 23:01:33 Ev-Turbo root[19523]: *****Received change event for sdh***** 
Mar 09 23:01:33 Ev-Turbo root[19545]: *****Received add event for sdh2***** 
Mar 09 23:01:33 Ev-Turbo root[19552]: *****Received add event for sdh1*****

Шаг 3:

Теперь выньте карту USB из слота, но не отсоединяйте USB-кабель от вашего ПК.Посмотрите журнал:

Mar 09 23:06:56 Ev-Turbo root[21220]: *****Received change event for sdh***** 
Mar 09 23:06:56 Ev-Turbo root[21223]: *****Received remove event for sdh2***** 
Mar 09 23:06:56 Ev-Turbo root[21222]: *****Received remove event for sdh1***** 

Шаг 4:

Теперь, вставьте карту USB снова, вы увидите:

Mar 09 23:11:21 Ev-Turbo kernel: sd 6:0:0:3: [sdh] 30408704 512-byte logical blocks: (15.6 GB/14.5 GiB) 
Mar 09 23:11:21 Ev-Turbo kernel:  sdh: sdh1 sdh2 
Mar 09 23:11:21 Ev-Turbo root[22652]: *****Received change event for sdh***** 
Mar 09 23:11:21 Ev-Turbo root[22653]: *****Received change event for sdh***** 
Mar 09 23:11:21 Ev-Turbo root[22679]: *****Received add event for sdh2***** 
Mar 09 23:11:21 Ev-Turbo root[22682]: *****Received add event for sdh1*****

А теперь попробуйте смонтировать один изразделы где-то в вашей системе:

sudo mount /dev/sdh2 /media/uSD2

Вы можете дважды проверить, действительно ли он смонтирован (запустите команды: lsblk, mount ... и т.д.)

Шаг 5:

Теперь, пока раздел установлен, извлеките карту памяти из слота.Посмотрите журнал:

Mar 09 23:12:32 Ev-Turbo root[23049]: *****Received change event for sdh*****

Ничего больше ... Почему больше нет события "удалить" ???

БОНУСНЫЕ ЗАМЕТКИ (не имеет отношения к вышеуказанному вопросу):

1) Большая часть информации в Интернете, касающейся сценариев udev / systemd / systemd-udevd и mount, устарела.В частности, для systemd v239 многие из «решенных / рабочих» ответов не пригодны для использования (работая над проблемой в течение 2 недель, прочитайте большинство решений в Интернете, протестировано на Debian 9.7, Linux Mint 18.3, Ubuntu 18.04)

2) Для версий systemd> 212 вам нужны служебные файлы для подключения ваших съемных устройств.Пример: https://serverfault.com/questions/766506/automount-usb-drives-with-systemd

3) Специально для systemd v239 необходимо отключить PrivateMounts для автоматического монтирования через модули systemd.Подробнее: https://unix.stackexchange.com/questions/464959/udev-rule-to-automount-media-devices-stopped-working-after-systemd-was-updated-t

4) Файлы монтирования монтирования не подходят для каждого случая, например, когда вы хотите монтировать определенные каталоги на основе USB-хоста, порта, номеров LUN ... Но дляв некоторых случаях такой подход очень прост: https://dev.to/adarshkkumar/mount-a-volume-using-systemd-1h2f

...