почему udev не запускает событие удаления для смонтированных разделов sdcard?

#systemd #mount #udev #cardreader

#systemd #монтировать #udev #cardreader

Вопрос:

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

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

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

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

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

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

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

Шаг 1:

Создайте новое правило 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"
  

Шаг 2:

Установите ccze (sudo apt install 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:

Теперь извлеките карту USD из гнезда, но не отсоединяйте 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:

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

 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 … etc)

Шаг5:

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

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

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

ДОПОЛНИТЕЛЬНЫЕ ПРИМЕЧАНИЯ (не относящиеся к приведенному выше вопросу):

1) Большая часть информации в Интернете, касающейся udev / systemd / systemd-udevd и сценариев монтирования, устарела. Особенно для 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

Комментарии:

1. Этот вопрос принадлежит суперпользователю .

2. Спасибо @emix, я перенесу это через 40 минут…