LINUX.ORG.RU

[udev]Монтирование и _размонтирование_ флешки.

 


0

0

Настроил дома Bacul'у, чтобы бэкапила на НЖМД подключаемый через USB переходник, использую несколько НЖМД подключаемых по очереди. Собственно нужно чтобы файловые системы на подключаемых через этот переходник НЖМД монтировались в одно и то же место. Для монтирования создал такое правило в /etc/udev/rules.d/10-local.rules

SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{serial}=="DEF10D89BAC1", SYMLINK+="baculahdd", ACTION=="add", RUN+="/etc/udev/scripts/mount_baculahdd.sh"
#!/bin/sh
# Mount drive on udev 'ACTION==add'
mount /dev/baculahdd /mnt/bacula
При подключении переходника создаётся симлинк /dev/baculahdd направленный на устройство, устройство монтируется куда задумано.

Но есть проблема с размонтированием. В RunBeforeJob Bacul'ы я запихнул проверку «подключен ли НЖМД на который предполагается писать бэкапы?», потому что если он не подключен, то бэкап положится просто в директорию /mnt/bacula в корневой файловой системе, а этого случиться не должно.

RunBeforeJob = "grep -q '/mnt/bacula' /etc/mtab"
В /etc/udev/rules.d/10-local.rules добавил, ну и скриптик тоже создал:
SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{serial}=="DEF10D89BAC1", ACTION=="remove", RUN+="/etc/udev/scripts/unmount_baculahdd.sh"
#!/bin/sh
# Unmount drive on udev 'ACTION==remove'
umount /mnt/bacula
Однако же после отключения USB-переходника запись в /etc/mtab не пропадает. И есть опасность, что я забуду подключить НЖМД, и бэкапы лягут туда куда не должны лечь.

Как добиться от udev размонтирования устройства если оно отключено?

★★★★★

Лениво сейчас копаться в справке по Bacula, но нету ли там по аналогии с RunBeforeJob RunAfterJob, чтобы туда поместить «eject /dev/baculahdd» и все по науке отключится? :)

scholz
()
Ответ на: комментарий от scholz

RunAfterJob не нужен.

Лениво сейчас копаться в справке по Bacula, но нету ли там по аналогии с RunBeforeJob RunAfterJob, чтобы туда поместить «eject /dev/baculahdd» и все по науке отключится?

RunAfterJob есть, но не нужен. Я хочу чтобы бэкап не делался, если НМЖД не подключен. Например кот мой НЖМД отломает, Bacula честно сложит бэкап в /mnt/bacula, забьёт весь основной НЖМД на котором Gentoo стоит, произойдёт какая-нибудь бяка. А должно быть: кот отламывает НЖМД — бэкапы не стартуют с сообщением, что писаться некуда.

Camel ★★★★★
() автор топика
Ответ на: комментарий от CyberTribe

Googledev.

погугли по тому, как люди делали автомонтирование флэшек средствами udev.

Погуглил, собственно так и сделал, но не работает.

Camel ★★★★★
() автор топика
Ответ на: комментарий от Zloddey

^-^

какой суровый кот о_О

Одминске кот :-]

Camel ★★★★★
() автор топика
Ответ на: комментарий от Deleted

/proc/mount

А если вместо /etc/mtab «пасти» /proc/mounts?

Идея.

Но таки как же заставить udev размонтировать ФС при пропадании устройства на котором эта ФС была?

Camel ★★★★★
() автор топика
Ответ на: /proc/mount от Camel

А при umount /mnt/bacula до пропадания устройства строчка из /etc/mtab удаляется?
У самого, как ни странно, при выдёргивании флешки внаглую всё отмонтируется нормально (udev 149, авто(ун)маунт держится на левых shell-скриптах).

Deleted
()
Ответ на: комментарий от Deleted

Later.

А при umount /mnt/bacula до пропадания устройства строчка из /etc/mtab удаляется?

Проверю вечером. Дёрнуть USB-переходник через SSH не получается :-]

Camel ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Не отцепляется.

Строчка остаётся как /proc/mounts, так и в /etc/mtab. ls /mnt/bacula выдаёт Input/Output error.

Camel ★★★★★
() автор топика
Ответ на: Later. от Camel

А без выдёргивания кабеля оно отмонтируется?
(Можно и umount -l сделать).

Deleted
()
Ответ на: комментарий от Deleted

Не помогает.

Да, без выдёргиваня оно отмонтируется. Равно если сделать umount /mnt/bacula после выдёргивания. Изменение сценария unmount_baculahdd.sh, замена umount на umount -l или umount -f эффекта не даёт.

Я ещё touch в этот сценарий добавил, чтобы по изменению времени доступа к одному файлику смотреть скрипт вообще запускается или нет. Оказалось, что нет. А иногда запускается, тогда всё проходит как задумано, ФС отмонтируется. Но почему в одних случаях unmount_baculahdd.sh запускается, а в других нет мне непонятно. Как работает udev? Что служит для udev событием, которое заставляет запустить сценарий из правила в 10-local.rules?

Camel ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Не каждый раз.

Запускаю udevadm monitor, отключаю USB-переходник:

KERNEL[1271269454.307609] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_generic/sg5 (scsi_generic)
KERNEL[1271269454.307670] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_device/20:0:0:0 (scsi_device)
KERNEL[1271269454.307708] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_disk/20:0:0:0 (scsi_disk)
KERNEL[1271269454.370564] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/block/sde/sde1 (block)
KERNEL[1271269454.370624] remove   /devices/virtual/bdi/8:64 (bdi)
KERNEL[1271269454.370718] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/block/sde (block)
KERNEL[1271269454.370761] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0 (scsi)
KERNEL[1271269454.370799] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/scsi_host/host20 (scsi_host)
KERNEL[1271269454.370836] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20 (scsi)
UDEV  [1271269454.372173] remove   /devices/virtual/bdi/8:64 (bdi)
KERNEL[1271269454.372237] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
KERNEL[1271269454.372477] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
UDEV  [1271269454.373213] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/scsi_host/host20 (scsi_host)
UDEV  [1271269454.373993] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/block/sde/sde1 (block)
UDEV  [1271269454.374743] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/block/sde (block)
KERNEL[1271269454.424116] remove   /host20/target20:0:0 (scsi)
UDEV  [1271269454.424393] remove   /host20/target20:0:0 (scsi)
UDEV  [1271269454.427383] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_disk/20:0:0:0 (scsi_disk)
UDEV  [1271269454.428079] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_device/20:0:0:0 (scsi_device)
UDEV  [1271269454.433755] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0/scsi_generic/sg5 (scsi_generic)
UDEV  [1271269454.434135] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20/target20:0:0/20:0:0:0 (scsi)
UDEV  [1271269454.434371] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host20 (scsi)
UDEV  [1271269454.434600] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
UDEV  [1271269454.435161] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
При этом файловая система нормально отмонтировалась.

Camel ★★★★★
() автор топика
Ответ на: Не каждый раз. от Camel

Продолжение.

Подключаю:

KERNEL[1271269520.523136] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
KERNEL[1271269520.523407] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
KERNEL[1271269520.523629] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21 (scsi)
KERNEL[1271269520.523680] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/scsi_host/host21 (scsi_host)
UDEV  [1271269520.648841] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
UDEV  [1271269520.648889] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
UDEV  [1271269520.648917] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21 (scsi)
UDEV  [1271269520.648942] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/scsi_host/host21 (scsi_host)
KERNEL[1271269525.520387] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0 (scsi)
KERNEL[1271269525.520445] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0 (scsi)
UDEV  [1271269525.520485] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0 (scsi)
KERNEL[1271269525.520523] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_disk/21:0:0:0 (scsi_disk)
KERNEL[1271269525.520564] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_device/21:0:0:0 (scsi_device)
KERNEL[1271269525.520606] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_generic/sg5 (scsi_generic)
UDEV  [1271269525.520731] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0 (scsi)
UDEV  [1271269525.521279] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_device/21:0:0:0 (scsi_device)
UDEV  [1271269525.521525] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_disk/21:0:0:0 (scsi_disk)
UDEV  [1271269525.531824] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_generic/sg5 (scsi_generic)
KERNEL[1271269525.541065] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde (block)
KERNEL[1271269525.541121] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde/sde1 (block)
KERNEL[1271269525.541158] add      /devices/virtual/bdi/8:64 (bdi)
UDEV  [1271269525.541194] add      /devices/virtual/bdi/8:64 (bdi)
UDEV  [1271269525.668213] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde (block)
UDEV  [1271269525.971345] add      /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde/sde1 (block)
Устройство монтируется. Отключаю ещё раз:
KERNEL[1271269555.558718] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_generic/sg5 (scsi_generic)
KERNEL[1271269555.558759] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_device/21:0:0:0 (scsi_device)
KERNEL[1271269555.558791] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_disk/21:0:0:0 (scsi_disk)
KERNEL[1271269555.558821] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde/sde1 (block)
KERNEL[1271269555.558846] remove   /devices/virtual/bdi/8:64 (bdi)
KERNEL[1271269555.558874] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde (block)
KERNEL[1271269555.558902] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0 (scsi)
KERNEL[1271269555.558926] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/scsi_host/host21 (scsi_host)
KERNEL[1271269555.558951] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21 (scsi)
KERNEL[1271269555.558982] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
KERNEL[1271269555.559017] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
UDEV  [1271269555.559626] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_device/21:0:0:0 (scsi_device)
UDEV  [1271269555.560437] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_disk/21:0:0:0 (scsi_disk)
UDEV  [1271269555.561879] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/scsi_generic/sg5 (scsi_generic)
UDEV  [1271269555.561931] remove   /devices/virtual/bdi/8:64 (bdi)
UDEV  [1271269555.561971] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/scsi_host/host21 (scsi_host)
UDEV  [1271269555.562077] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde/sde1 (block)
UDEV  [1271269555.562647] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0/block/sde (block)
UDEV  [1271269555.562900] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21/target21:0:0/21:0:0:0 (scsi)
UDEV  [1271269555.563115] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0/host21 (scsi)
UDEV  [1271269555.563327] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5/1-5:1.0 (usb)
UDEV  [1271269555.563828] remove   /devices/pci0000:00/0000:00:03.3/usb1/1-5 (usb)
На этот раз устройство не отмонтируется. Чертовщина какая-то. Ему что, отстоятся нужно?

В первом наборе remove'ов 24 строчки, во втором 20. Сейчас поищу разницу.

Camel ★★★★★
() автор топика

Собственно, жопой чую, что дело вот тут

SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{serial}=="DEF10D89BAC1", ACTION=="remove", RUN+="/etc/udev/scripts/unmount_baculahdd.sh"
в этом

ATTRS{serial}==«DEF10D89BAC1»

проверил, банальный

SUBSYSTEMS=="usb", DRIVERS=="usb", ACTION=="remove", RUN+="etc/udev/scripts/unmount_baculahdd.sh"
работает нормально.

Deleted
()
Ответ на: комментарий от Deleted

Уникальный переходник.

SUBSYSTEMS=="usb", DRIVERS=="usb", ACTION=="remove", RUN+="etc/udev/scripts/unmount_baculahdd.sh"

Я правильно понимаю, что эта штука будет запускать unmount_baculahdd.sh при отключении любого USB'шного накопителя? Оно, на самом деле, некритично, я кроме НЖМД к серверу ничего не подключаю, но как-то неправильно это.

Надо же как-то однозначно идентифицировать USB-переходник, чтобы предусмотренные действия делались только с ним, но не со всеми флешками.

Camel ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Это выход.

Таки да, но отмонтирует оно, в любом случае, только /mnt/baculahdd.

Это выход.

И, кстати, если дать отстояться, то отмонтирует и так. Нэ понимаю. Чем флешка подключенная 5 минут назад отличается от флешки подключенной 5 часов назад?

Camel ★★★★★
() автор топика
Ответ на: Это выход. от Camel

Ещё одно костыльное решение: совершать запуск umount /mnt/baculahdd при удалении самого симлинка /dev/baculahdd чем-то вроде incron.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.