LINUX.ORG.RU

Не получается смонтировать флкшку через udev

 


0

1

Пытаюсь настроить автоматическое монтирование usb-флешки через udev. Написал следующий конфиг с правилами для udev:

cat /etc/udev/rules.d/10-automount.rules

KERNEL!="sd[a-z][0-9]", GOTO="label_automount_end"
SUBSYSTEM!="block", GOTO="label_automount_end"
# Mount the device
ACTION=="add", NAME="%k", GROUP="disk", RUN:="/etc/udev/rules.d/udev_automount.sh add %k"
# Clean up after removal
ACTION=="remove", RUN:="/etc/udev/rules.d/udev_automount.sh del %k"
# Exit
LABEL="label_automount_end"

Сам скрипт выглядит так:

cat /etc/udev/rules.d/udev_automount.sh

#!/bin/sh
destdir=/media/$2
srcdir=/dev/$2
log=/media/1.log
params=relatime,user,async,rw
sleep 3
echo START >>$log
echo $(whoami)/$1/$2 >>$log 2>&1
if [ "$1" == "add" ]; then
    test -d $destdir || mkdir -p $destdir >>$log 2>&1
    chmod a+rwx $destdir >>$log 2>&1
    mount -o $params $srcdir $destdir >>$log 2>&1
elif [ "$1" == "del" ]; then
    umount -l $destdir >>$log 2>&1
    test -d $destdir && rmdir $destdir >>$log 2>&1
fi
echo END >>$log

При полдключении получаю такой лог:

cat /media/1.log

START
root/add/sdb4
START
root/add/sdb1
mount: /media/sdb4: permission denied.
END
mount: /media/sdb1: permission denied.
END
START
START
root/del/sdb1
root/del/sdb4
umount: /media/sdb1: must be superuser to unmount.
umount: /media/sdb4: must be superuser to unmount.
END
END

В dmesg получаю следующие сообщения:

[May 7 13:38] usb 1-1: new high-speed USB device number 20 using ehci-pci
[  +0.162955] usb 1-1: New USB device found, idVendor=13fe, idProduct=1d00, bcdDevice= 1.10
[  +0.000012] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0.000007] usb 1-1: Product: USB DISK 2.0    
[  +0.000007] usb 1-1: Manufacturer:         
[  +0.000005] usb 1-1: SerialNumber: 07770700011F
[  +0.001658] usb-storage 1-1:1.0: USB Mass Storage device detected
[  +0.020658] scsi host4: usb-storage 1-1:1.0
[  +1.009530] scsi 4:0:0:0: Direct-Access              USB DISK 2.0     PMAP PQ: 0 ANSI: 0 CCS
[  +0.199342] sd 4:0:0:0: [sdb] 4030464 512-byte logical blocks: (2.06 GB/1.92 GiB)
[  +0.000837] sd 4:0:0:0: [sdb] Write Protect is off
[  +0.000012] sd 4:0:0:0: [sdb] Mode Sense: 23 00 00 00
[  +0.000741] sd 4:0:0:0: [sdb] No Caching mode page found
[  +0.000022] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[  +0.016281]  sdb: sdb1 sdb4
[  +0.005960] sd 4:0:0:0: [sdb] Attached SCSI removable disk

[May 7 13:39] usb 1-1: USB disconnect, device number 20

Причем вручную все работает, аналогичный конфиг в убунте рабтает, пытаюсь настроить работу в ArchLinux. Директории создаются и удаляются, но монтирования/размонтирования не происходит.

Немного погуглив, получилось такое решение:

cat /etc/udev/rules.d/10-automount.rules
# Mount the device
ACTION=="add", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="/bin/systemctl start udev-mount@%k.service"

# Clean up after removal
ACTION=="remove", KERNEL=="sd[b-z][0-9]", SUBSYSTEM=="block", RUN+="/bin/systemctl stop udev-mount@%k.service"

и

cat /usr/lib/systemd/system/udev-mount@.service
[Unit]
Description=Mount USB Flash Drive
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/pmount --umask 000 /dev/%i %i
ExecStop=/usr/bin/pumount /dev/%i
[Install]
WantedBy=multi-user.target

Сильно не тестировал, вроде как работает, останется только немного допилить. Если кому есть что добавить по теме, буду рад почитать)

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

Файлуху системы лучше через fstab. А тут две строчки текста и все маунтится на автомате. Мне кажется это удобнее чем выяснять как ядро обозвало дивайс, создавать точку монтирования, вспоминать какая там фс и туча опций, а потом ещё и не забыть удалит ненужную директорию, после разминирования.

lintiay ()