Ошибки при автомонтировании флешки

Имеется sd карта fat32. Подключаю через встроенный разъём ноутбука.

в /ets/fstab такая строчка:
UUID=BCA0-C388		/repository	vfat		rw,users,nofail,noatime,umask=111,dmask=000,uid=1000,gid=1000	0 0

Всё (чтение, запись) работает нормально.

Но при загрузки вылетают ошибки:
 $ dmesg | grep mmcblk0
[    1.384154] mmcblk0: mmc0:1234 SA02G 1.85 GiB
[    1.387816]  mmcblk0: p1
[   18.993064] mmcblk0: error -110 sending status command, retrying
[   19.093179] mmcblk0: error -110 sending status command, retrying
[   19.193295] mmcblk0: error -110 sending status command, aborting

Что это значит, и что с этим делать?
А при загрузке SD карта вставлена в ноут?
Если нет, то ошибки обязательно будут, т.к. система пытается примонтировать диск, которого нет.
И вообще странно монтировать внешние накопители через /etc/fstab, для этого есть udev.
52th
А при загрузке SD карта вставлена в ноут?
Конечно вставленна! Но даже если нет, есть опция nofail, которая как раз на этот случай.

А про udev нечего не слышал... Надо посмотреть...
Посмотел...

Чем этот способ лучше? Подскажите, пожалуйста, как поступить? Задача простая - флешка должна монтироваться в нужном каталоге, при включении компьютера, с владельцем - обычный пользователь.
Чем этот способ лучше? Подскажите, пожалуйста, как поступить?
Тем, что можно гибко настраивать правила и права для каждого устройства, подключённого к ПК. Вот, как например в Этой теме.
Завтра буду возле компьютера, отвечу более развёрнуто.
Как и обещал, приведу свои аргументы, почему для монтирования съёмных носителей лучше использовать udev , чем /etc/fstab.
Извиняюсь, что не отписался сразу, просто дел много навалилось. Ну да это лирика, итак.

Во-первых, файл /etc/fstab в современных системах в принципе и не нужен. Монтированием занимается systemd. Т.е. теоретически, можно совсем обойтись без /etc/fstab, написав соответсвующие mount. - юниты. Если кто так пробовал на практике - отпишитесь, поделитесь опытом.

Во-вторых, с помощью правил udev можно описывать действия каждого устройства, а не только носителей информации.

В-третьих, udev обрабатывает не только момент "появления" устройства в системе, но и момент "удаления".

В качестве примера рассмотрим такую ситуацию - на SD-карте хранятся ключи для ssh соединения. Задача: при подключении карты, ключи копируются на компьютер, а при извлечении - удаляются.

Для начала, соберём нужную информацию о карте, сделать это можно разными способами, но я постараюсь обойтись udev.
Запускаем консоль и набираем в ней udevadm monitor, после чего вставляем карту:
$udevadm monitor
.....
KERNEL[49202.808672] add      /devices/platform/80860F16:00/mmc_host/mmc1/mmc1:c5f8 (mmc)
KERNEL[49202.814808] add      /devices/platform/80860F16:00/mmc_host/mmc1/mmc1:c5f8/block/mmcblk1 (block)
.....
Далее получаем информацию:
$udevadm  info  -a -p /sys/block/mmcblk1
KERNEL=="mmcblk1"
SUBSYSTEM=="block"
..........
ATTRS{serial}=="0xbbcb1f33"
Теперь можно писать правило, которое будет обрабатывать момент подключения карты:
$sudo nano /etc/udev/rules.d/20-usb-mount.rules
ACTION=="add", KERNEL=="mmcblk[0-9]",  ATTRS{serial}=="0xbbcb1f33",  RUN+="/bin/bash /home/net/bin/usb.sh $devnode &"
и скрипт, которому передаём упрвление:
$ nano /home/net/bin/usb.sh
#!/bin/bash
dir=/home/net/mnt
mkdir $dir
mount $1p1 $dir
chown net:users $dir
cp $dir authorized_keys  /home/net/.ssh
#в принципе, карта нам больше не нужна, можно её отмонтировать
umount $dir
rm -r $dir

перезагружаем правила udev и делаем скрипт исполняемым:
$ sudo udevadm control --reload
$ chmod +r  /home/net/bin/usb.sh

Комментарии к коду:
ACTION=="add" - указывает, что правило работает в момент подключения устройства;
KERNEL=="mmcblk[0-9]" - указывает на мультимедийные карты;
ATTRS{serial}=="0xbbcb1f33" - указывает на нужную нам карту, другие будут игнорироваться;
$devnode - переменная, которая передаёт в скрипт имя узла устройства, (/dev/mmcblk1). Чтобы смонтировать нужный раздел на SD карте, нужно указать ещё и номер раздела, в данном случае раздел первый, поэтому в скрипте и появилась конструкция $1p1, на выходе которой получаем /dev/mmcblk1p1.

Таким образом, при подключении нужной нам карты, ключи копируются на компьютер, первую часть задачи выполнили.
Для второй части пишем следующее правило udev
$ sudo nano /etc/udev/rules.d/30-usb-mount.rules
ACTION=="remove", KERNEL=="mmcblk[0-9]",  ATTRS{serial}=="0xbbcb1f33",  RUN+="rm -f /home/net/.ssh/authorized_keys"
Теперь, при извлечении карты, ключи удалятся с компьютера.
52th, я не в теме, но за доступное изложение спасибо! Всё руки не доходили разобраться что по чем...
52th
Отличный мануал !!!
Спасибо )))
Что-то никак я не победю этот udev:
$udevadm monitor
KERNEL[2173.790342] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234 (mmc)
KERNEL[2173.791842] add      /devices/virtual/bdi/179:0 (bdi)
UDEV  [2173.792776] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234 (mmc)
UDEV  [2173.793806] add      /devices/virtual/bdi/179:0 (bdi)
KERNEL[2173.794475] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0 (block)
KERNEL[2173.794574] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1 (block)
UDEV  [2173.869317] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0 (block)
UDEV  [2173.936240] add      /devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1 (block)
$udevadm  info  -a -p /sys/block/mmcblk0p1
 looking at device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0/mmcblk0p1':
    KERNEL=="mmcblk0p1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{inflight}=="       0        0"
    ATTR{partition}=="1"
    ATTR{ro}=="0"
    ATTR{size}=="3885056"
    ATTR{start}=="2048"
    ATTR{stat}=="      66        0      976      100        0        0        0        0        0       70      100"

  looking at parent device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234/block/mmcblk0':
    KERNELS=="mmcblk0"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{alignment_offset}=="0"
    ATTRS{capability}=="10"
    ATTRS{discard_alignment}=="0"
    ATTRS{ext_range}=="8"
    ATTRS{force_ro}=="0"
    ATTRS{inflight}=="       0        0"
    ATTRS{range}=="8"
    ATTRS{removable}=="0"
    ATTRS{ro}=="0"
    ATTRS{size}=="3887104"
    ATTRS{stat}=="     110        0     1768      186        0        0        0        0        0      123      186"

  looking at parent device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0/mmc0:1234':
    KERNELS=="mmc0:1234"
    SUBSYSTEMS=="mmc"
    DRIVERS=="mmcblk"
    ATTRS{cid}=="02544d5341303247092df0288800cc01"
    ATTRS{csd}=="002e00325b5aa3b4ffffff800a800001"
    ATTRS{date}=="12/2012"
    ATTRS{erase_size}=="512"
    ATTRS{fwrev}=="0x9"
    ATTRS{hwrev}=="0x0"
    ATTRS{manfid}=="0x000002"
    ATTRS{name}=="SA02G"
    ATTRS{oemid}=="0x544d"
    ATTRS{preferred_erase_size}=="4194304"
    ATTRS{scr}=="0225800001000000"
    ATTRS{serial}=="0x2df02888"
    ATTRS{type}=="SD"

  looking at parent device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0/mmc_host/mmc0':
    KERNELS=="mmc0"
    SUBSYSTEMS=="mmc_host"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0/rtsx_pci_sdmmc.0':
    KERNELS=="rtsx_pci_sdmmc.0"
    SUBSYSTEMS=="platform"
    DRIVERS=="rtsx_pci_sdmmc"
    ATTRS{driver_override}=="(null)"

looking at parent device '/devices/pci0000:00/0000:00:1c.1/0000:08:00.0':
    KERNELS=="0000:08:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="rtsx_pci"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0xff0000"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{device}=="0x5209"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="25"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{local_cpus}=="0f"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x90ab"
    ATTRS{subsystem_vendor}=="0x104d"
    ATTRS{vendor}=="0x10ec"

  looking at parent device '/devices/pci0000:00/0000:00:1c.1':
    KERNELS=="0000:00:1c.1"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{broken_parity_status}=="0"
    ATTRS{class}=="0x060400"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{d3cold_allowed}=="0"
    ATTRS{device}=="0x1e12"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{enable}=="1"
    ATTRS{irq}=="16"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{local_cpus}=="0f"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{subsystem_device}=="0x90ab"
    ATTRS{subsystem_vendor}=="0x104d"
    ATTRS{vendor}=="0x8086"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Правило сделала простое, чтобы наверняка:
ACTION=="add", KERNEL=="mmcblk0*",  ATTRS{serial}=="0x2df02888",  RUN+="/bin/bash /home/udev/usb.sh $devnode &"

Скрипт, тоже по простому (пробовал разные способы):

#!/bin/bash
#mount $p1 /repository
mount /dev/mmcblk0p1 /repository
Если выполнить sudo /home/udev/usb.sh - всё монтируется.

Делаю reload udev, вытаскиваю - вставляю флешку - и ничего!!!

ЧЯДНТ?

P.S. Создал правило отключения touchpad при подключении мыши (просто взял отсюда) - работает отлично.
Пробовал на старом ноуте, всё работает. Попробовал на свежей системе - не монтирует. Надо покурить ченжлоги на предмет того, что разрабы могли сломать в новых версиях.
 
Зарегистрироваться или войдите чтобы оставить сообщение.