LINUX.ORG.RU

udev rule - auto mounting usb drive

 


0

1

Привет,

пытаюсь написать скрипт для авто-монтирования usb флешки.

cat /etc/udev/rules.d/test.rules:

ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_MODEL}=="DataTraveler_3.0", RUN+="/bin/umount /dev/sdc"

ACTION=="add", SUBSYSTEM=="usb", ENV{ID_MODEL}=="DataTraveler_3.0", RUN+="/bin/mount -t auto /dev/sdc /media/user/mount_dir"

Не работает.

Можете подсказать - почему?

И как можно зафиксировать имя флешки, типа `/dev/sdc`?

И как можно зафиксировать имя флешки, типа `/dev/sdc`?

Сделай вдоль.

anonymous
()

Тебе надо монтировать конкретную флешку или любую? В общем случае правило выглядит так:

ACTION=="add" KERNEL=="sd[b-z][0-9]" RUN+="/bin/mkdir -p /mnt/%k"
ACTION=="add" KERNEL=="sd[b-z][0-9]" RUN+="/bin/mount -o uid=1000 /dev/%k /mnt/%k"
Можешь добавить сюда ID_MODEL если сильно хочешь.

А это глупость, девайс надо демонтировать до отключения:

ACTION=="remove", SUBSYSTEM=="usb", ENV{ID_MODEL}=="DataTraveler_3.0", RUN+="/bin/umount /dev/sdc"

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

Да сейчас в моде udisks2, но может у него одноплатник или какой контроллер, где каждый килобайт на счету.

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

А это глупость, девайс надо демонтировать до отключения:

Ага, и пусть висят мёртвые данные, которые ни прочитать нельзя, ни удалить.

r3lgar ★★★★★
()

ТС, учти, что если не синкнув и не отмонтировав руками, у тебя рано или поздно данные на флэшке гарантированно превратятся в тыкву.

Не работает.

Вот мой рабочий вариант, сверяй.
У тебя systemd?

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

Благодарю за ответ,

1) наверно, можно писать несколько RUN инструкций в одной команде

2) += можно заменить на := (?)

3) не работает

misanthropy
() автор топика
Ответ на: комментарий от r3lgar

Ну когда я использовал udev, то руками демонтировал, зато было правило на удаление осиротевшего каталога по remove, про него забыл. А так да, имеет смысл если не единственный пользователь ПК.

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

А это глупость, девайс надо демонтировать до отключения

На самом деле монтировать можно с sync, а отмонтировать по remove как umount --lazy

Если не делать глупостей (типа выдёргивания флешки в процессе копирования) - то вполне юзабельно.

Stanson ★★★★★
()

Команда `mount` выводит все примонтированные устройства, верно?

Нашёл здесь годный скрипт, - тоже не работает.

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

А так да, имеет смысл если не единственный пользователь ПК.

Даже если единственный. От забыл или прочего тупняка никто не застрахован, увы.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar
lex93ushakov@acer:~$ sudo systemctl status udev
● systemd-udevd.service - udev Kernel Device Manager
   Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
   Active: active (running) since Пан 2016-11-07 14:31:57 +03; 21min ago
     Docs: man:systemd-udevd.service(8)
           man:udev(7)
 Main PID: 8920 (systemd-udevd)
   Status: "Processing..."
    Tasks: 13
   Memory: 7.2M
      CPU: 1.260s
   CGroup: /system.slice/systemd-udevd.service
           ├─ 8920 /lib/systemd/systemd-udevd
           ├─10708 /lib/systemd/systemd-udevd
           ├─10709 /lib/systemd/systemd-udevd
           ├─10710 /lib/systemd/systemd-udevd
           ├─10711 /lib/systemd/systemd-udevd
           ├─10712 /lib/systemd/systemd-udevd
           ├─10713 /lib/systemd/systemd-udevd
           ├─10714 /lib/systemd/systemd-udevd
           ├─10715 /lib/systemd/systemd-udevd
           ├─10716 /lib/systemd/systemd-udevd
           ├─10717 /lib/systemd/systemd-udevd
           ├─10718 /lib/systemd/systemd-udevd
           └─10719 /lib/systemd/systemd-udevd

Ліс 07 14:53:26 acer systemd-udevd[10681]: Process '/bin/mount /dev/files_cache(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10688]: Process '/bin/mount /dev/anon_vma(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10680]: Process '/bin/mount /dev/anon_vma_chain(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10679]: Process '/bin/mount /dev/cred_jar(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10677]: Process '/bin/mount /dev/inode_cache(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10676]: Process '/bin/mount /dev/kmalloc-192(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10675]: Process '/bin/mount /dev/kmalloc-256(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10685]: Process '/bin/mount /dev/vm_area_struct(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10687]: Process '/bin/mount /dev/kmalloc-512(1956:3) /media/removable' failed with exit code 32.
Ліс 07 14:53:26 acer systemd-udevd[10684]: Process '/bin/mount /dev/kmalloc-64(1956:3) /media/removable' failed with exit code 32.
misanthropy
() автор топика
Ответ на: комментарий от misanthropy

да, ubuntu 16.10, с systemd.

Создай файл /etc/systemd/system/systemd-udevd.service.d/99-automount_usb_media.conf, и пропиши в него:

[Service]
MountFlags=shared

Твой вариант у меня тоже не работает.

Ты в dmesg смотрел? Может у вас в убунте что не так лежит?

Нашёл здесь годный скрипт, - тоже не работает.

Мой вариант с него и писался. Обрати внимание на RUN+= и RUN:=.

r3lgar ★★★★★
()
Ответ на: комментарий от misanthropy

Это то самое, о котором я говорил выше:

ТС, учти, что если не синкнув и не отмонтировав руками, у тебя рано или поздно данные на флэшке гарантированно превратятся в тыкву.

Размонтируй, fsck'ни, и пробуй снова.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от Lavos

Нет, но можно через gui-ню отмонтировать в том-же kruader

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

На самом деле монтировать можно с sync

Был у меня знакомый поциент, который монтировал флэшку с ext4 (и не отключённым журналом) с опцией sync, угадай, что стало с флэшкой и через какое время. (=

r3lgar ★★★★★
()
#!/bin/bash

mount_local() {
    local devname=$1
    local mkdir_cmd="mkdir -p /media/$devname"
    echo $mkdir_cmd && $mkdir_cmd || echo "$mkdir_cmd failed"
    local mount_cmd="mount -t vfat -o defaults,flush,errors=continue /dev/$devname /media/$devname"
    echo $mount_cmd && $mount_cmd || echo "$mount_cmd failed"
}

umount_local() {
    local devname=$1
    local umount_cmd="umount -l /media/$devname"
    echo $umount_cmd && $umount_cmd || echo "$umount_cmd failed"
    local rmdir_cmd="rmdir /media/$devname"
    echo $rmdir_cmd && $rmdir_cmd || echo "$rmdir_cmd failed"
}

for i in $(ls /dev/sd*)
do
    tmp=$(basename $i)
    umount_local $tmp
    mount_local $tmp
done
    
while read -r _ _ event devpath _; do
        echo "event->$event"
        echo "devpath->$devpath"
        devname=$(basename "$devpath")
        echo "devname->$devname"
        if [[ $devname != sd[a-z]* ]]; then
            continue
        fi
        if [[ $event == add ]]; then
            echo "add actions:"
            mount_local $devname
        fi
        if [[ $event == remove ]]; then
            echo "remove actions:"
            umount_local $devname
        fi
done < <(udevadm monitor --udev -s block)

mount из правил udev(systemd) с какого то релиза взяли и сломали, он точно работал на 210 и точно не работает на 231 релизе. А выше приведённый скрипт для примера - замечательно работает страннота.

dhampire ★★★
()
Ответ на: комментарий от misanthropy

Обычно — async,noatime,nodiratime. Я в качестве безопасности (в моих правилах ты видел) добавляю noexec в качестве защиты от дурака. И отключить журнал не забудь (как это делается я не помню, у меня все флэшки или под FAT32, или под f2fs), а то она у тебя и месяца не проходит с частым юзанием.

r3lgar ★★★★★
()
Ответ на: комментарий от dhampire

Вот только мне это не поможет ровно никак.

Для этого надо разбираться, а не ныть. Судя по всему, этот тред в это и выльется, так что оставайтесь на линии, ваш звонок очень важен для нас. (=

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

После перезагрузки монтирование заработало, но есть проблемы: * не отображается в выводе команды mount

* соответственно, нельзя демонтировать

* после извлечения флешки директория не удаляется

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

После перезагрузки монтирование заработало

udevadm control --reload надо делать после каждого изменения правил.

не отображается в выводе команды mount

Весьма странно. Ты юзаешь мои правила, или? Кажи dmesg на втыкание флэшки и на её вытаскивание.

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

udevadm control --reload надо делать после каждого изменения правил.

Я делаю так : udevadm control --reload-rules && service udev restart

Ты юзаешь мои правила, или?

Да, твои.

dmesg:

[ 5026.386525] usb 2-1.1: USB disconnect, device number 7
[ 5033.960358] usb 2-1.1: new high-speed USB device number 8 using ehci-pci
[ 5034.101060] usb 2-1.1: New USB device found, idVendor=0951, idProduct=1666
[ 5034.101066] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5034.101070] usb 2-1.1: Product: DataTraveler 3.0
[ 5034.101074] usb 2-1.1: Manufacturer: Kingston
[ 5034.101077] usb 2-1.1: SerialNumber: 60A44C413E29BE614B4C1F07
[ 5034.101856] usb-storage 2-1.1:1.0: USB Mass Storage device detected
[ 5034.102068] scsi host7: usb-storage 2-1.1:1.0
[ 5034.102139] scsi host7: runtime PM trying to activate child device host7 but parent (2-1.1:1.0) is not active
[ 5035.189204] scsi 7:0:0:0: Direct-Access     Kingston DataTraveler 3.0 PMAP PQ: 0 ANSI: 6
[ 5035.190239] sd 7:0:0:0: Attached scsi generic sg3 type 0
[ 5035.886028] sd 7:0:0:0: [sdc] 61440000 512-byte logical blocks: (31.5 GB/29.3 GiB)
[ 5035.888465] sd 7:0:0:0: [sdc] Write Protect is off
[ 5035.888471] sd 7:0:0:0: [sdc] Mode Sense: 23 00 00 00
[ 5035.890927] sd 7:0:0:0: [sdc] No Caching mode page found
[ 5035.890937] sd 7:0:0:0: [sdc] Assuming drive cache: write through
[ 5035.942368] sd 7:0:0:0: [sdc] Attached SCSI removable disk

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

Рестарт удава — это лишнее, ящитаю.

[sdc] Attached SCSI removable disk

И при этом нет /dev/sdc[1-9]?

Судя по всему, это то самое, о чём говорил dhampire, но тут я вам уже ничем помочь не смогу.

На этом наши полномочия как бы всё.

r3lgar ★★★★★
()
Ответ на: комментарий от misanthropy

Теперь - переходить на gentoo с openrc ?)

У меня в Gentoo — systemd (232), причём уже достаточно давно. И я не из тех, кто считает смену софта решением проблемы.

Не знаю, как у вас в убунте (или что у тебя там), но в генте в дополнение к systemd ставится куча всякой скриптоты, в том числе правила удава, может из-за этого у нас работает, а может из-за трёх патчей, что идут в поставке с ебилдом systemd.

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