Как смонтировать съемный носитель в / media / <label>автоматически при вставке, без какой-либо среды рабочего стола? </label>

8602
cedbeu

У меня есть система Debian sid (Wheezy) (и такой же вопрос для arch), без какой-либо среды рабочего стола (и вообще без Xorg).

Я могу смонтировать свои SD-карты, USB-накопители, внешний жесткий диск вручную с помощью mount / umount с подходящими входами, /etc/fstabно это неопровержимо и ограничительно: если я хочу, чтобы они монтировались на /media/<LABEL>каждом устройстве с разными <LABEL>потребностями, его собственный вход, и каждый <LABEL>каталог должен быть создан / удален также вручную /media/).

Итак, каков наилучший способ автоматически подключить их /media/<LABEL>при вставке (и отключить их от файловой системы, как только они отключены)?

Идеальное решение будет:

  1. обнаружить, когда съемный носитель вставлен в (добавлен в /dev/качестве sdax, sdbx... по udev)
  2. создать каталог в /media/соответствии с его меткой (метка съемного носителя)
  3. смонтировать его в каталог /media/<LABEL>в режиме RW (если поддерживается его файловая система)
  4. определить, отключен ли носитель
  5. если затем, размонтируйте его из файловой системы
  6. удалить соответствующий каталог из /media/

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

Я нашел некоторую информацию о autofs, HAL, udisks, udisks2и т.д., но неясно, какой из них является устаревшим или предпочтительным, и в любом случае, я не понял, как настроить их легко в моей системе, чтобы сделать это, до сих пор ...

Минимализм, элегантность, KISS, * nix-ориентированный, без сумасшедших невыносимых XML-файлов политик, а также современные высоко ценится.

редактировать: пытаясь сделать мой вопрос более ясным

7
Я разместил свои вопросы на http://unix.stackexchange.com/questions/44454, возможно, у меня будет еще несколько ответов ... Я не уверен, нужно ли их удалять отсюда или нет? cedbeu 12 лет назад 0
Вы сделали один и тот же пост на разных сайтах, с тем же ответом в обоих ответах ... Francisco Tapia 9 лет назад 0

3 ответа на вопрос

3
cedbeu

Ok, it's been a long time, but I'll still answer my question with the best option I found as of now.

The best way is to create a udev rule, associated with some scripts (that will create / remove directories and mount / unmount removable devices), and attached to partition udev device event type.

1 - Creating add / remove scripts

Add this script storage-automount.sh in /lib/udev/ and set it to executable (sudo chmod +x /lib/udev/storage-automount.sh):

#!/bin/sh # set the mountpoint name according to partition or device name mount_point=$ID_FS_LABEL if [ -z $mount_point ]; then mount_point=$ fi # if a plugdev group exist, retrieve its gid set & it as owner of mountpoint plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)" if [ -z $plugdev_gid ]; then gid='' else chown root:plugdev $mount_point gid=",gid=$plugdev_gid" fi # create the mountpoint directory in /media/ (if not empty) if [ -n $mount_point ]; then mkdir -p /media/$mount_point # other options (breaks POSIX): noatime,nodiratime,nosuid,nodev mount -t $ID_FS_TYPE \ -o rw,flush,user,uid=0$gid,umask=002,dmask=002,fmask=002 \ $DEVNAME /media/$mount_point fi 

Add this script storage-autounmount.sh in /lib/udev/ and set it to executable (sudo chmod +x /lib/udev/storage-autounmount.sh):

#!/bin/sh # set the mountpoint name according to partition or device name mount_point=$ID_FS_LABEL if [ -z $mount_point ]; then mount_point=$ fi # remove the mountpoint directory from /media/ (if not empty) if [ -n $mount_point ]; then umount -l /media/$mount_point rm -R /media/$mount_point fi 

2 - Creating the udev rule to attach those scripts to events

And finally, add a udev rule in /etc/udev/rules.d, for instance 85-storage-automount.rules:

ENV=="partition", RUN+="/lib/udev/storage-automount.sh", ENV="/lib/udev/storage-autounmount.sh" 

And that's it.

Now, when you plug a storage device in, a directory will be created in /media/ according to the partition name (I don't remember but I think it's working with NTFS partitions as well) and your partition will be mounted into it. It's R/W for users if you have a plugdev group on your system. Also, the devices are mounted in synchronous mode in order to limit the risks of data loss in case of hot unplugging.

When the device is removed, it's unmounted and the directory is removed from /media.

Also, the tool to monitor the udev events is udevadm monitor, with options like --env or --property:

$ udevadm monitor --env 

This is tested and working fine on both Debian and Arch, but probably works on all distributions that rely on udev.

1
Izzy

Возможно, вы захотите проверить свой /dev/disk/by-uuidкаталог, когда эти конкретные диски подключены. Использование ls -lэтого покажет вам устройства (например /dev/sdb1) вместе с их UUID. Найдя совпадения, обновите свой /etc/fstabсоответственно, заменив /dev/sd*на соответствующую /dev/disk/by-uuid/*запись.

Подробности см. В моем ответе на вопрос « Как запретить USB-накопителю получить новое имя устройства Linux после выхода из спящего режима»? ,

На самом деле, как я уже сказал, устройства подключены, я знаю их UUID / LABEL через каталог `blkid` или` / dev / disk / by-uuid`. И я могу смонтировать их вручную. Теперь у меня уже есть они в `/ etc / fstab`, на самом деле eiter по` label` или `UUID`, оба работают правильно. Это не очень помогает, так как они монтируются только во время загрузки (пока я не указываю `noauto`). Но если я удаляю их и заново вставляю их во время работы системы, они автоматически не отключаются / не монтируются в каталогах, которые я указал в `fstab` ... Это моя проблема. cedbeu 12 лет назад 1
Выглядит как-то странно - я годами использую это для съемных устройств (например, SD-карты от своих камер, мобильные устройства в качестве MP3-плеера, смартфоны, планшеты ... И все они монтируются правильно в назначенной точке монтирования. Если вы удалите их: Размонтируете ли вы раньше и монтируете ли снова при повторной вставке? Вы должны сделать это, и тогда это должно работать. Izzy 12 лет назад 0
Если я размонтирую их и смонтирую вручную, очевидно, все работает нормально. Но моя проблема в том, что я хочу, чтобы они размонтировались (опция `sync` в` fstab`) и монтировали их * автоматически * (и как `user`, а также` root`), когда я их удаляю / вставляю. Вот почему я предполагаю, что либо `AutoFS`,` HAL`, `udisks`,` udisks2` (или `hotplug`, может быть ...?), Либо что-то подобное ... Но не знаю, чего мне не хватает именно так. cedbeu 12 лет назад 1
Вы, вероятно, скучаете по тому, что вы все равно должны размонтировать их вручную - или как система узнает, что вы собираетесь это сделать? Obvioulsy, как только вы отключите его, он больше не может быть синхронизирован, и ни один не отключен. Таким образом, система допускает некоторую ошибку диска - но во многих случаях «старый диск» сбрасывается * только после того, как вы снова подключили «новый диск». Таким образом, при автоматическом монтировании старая точка монтирования все еще занята, что делает «новый» монтирование диска в другом месте. Izzy 12 лет назад 0
Система горячего подключения / отключения, такая как `hal` (среди прочих упомянутых), должна позаботиться о размонтировании устройства fs, если оно больше не подключено. Параметр `sync` в` / etc / fstab` используется в этом случае для синхронизации файлов устройства без кэширования, хотя и позволяет избежать потери данных при горячем отключении (без предварительного отключения вручную). cedbeu 12 лет назад 0
Я знаю, что означают «mount» и «unmounting», и это то же самое, когда я отключаю вручную. Моя проблема не здесь. Я знаю, как монтировать и размонтировать при запуске или вручную, но я ищу ** автоматическое ** решение для горячего подключения и отключения съемных устройств. Я знаю, что `HAL` и другие делают это, но я не знаю, как и какой самый элегантный способ (без сумасшедших XML-файлов политики, только на основе fstab, если это возможно) cedbeu 12 лет назад 0
Теперь я понял - извините за недоразумение. Было не совсем понятно из вопроса о происхождении. Izzy 12 лет назад 0
Нет проблем:] Я знаю, что это не очень понятно в моем вопросе, я не уверен насчет терминологии (я, вероятно, неправильно использую здесь `automounting` и` hotplug`) ... Спасибо за попытку помочь в любом случае:] cedbeu 12 лет назад 0
Пожалуйста. К сожалению, я недостаточно знаком с «горячим подключением», так как вам нужно больше, чтобы помочь вам. Izzy 12 лет назад 0
0
Max Power

Спасибо за ваши советы. Я упростил ваши сценарии монтирования и размонтирования следующим образом:

крепление:

#!/bin/sh  udisks --mount $DEVNAME 

размонтировать:

#!/bin/sh  udisks --unmount $DEVNAME 

Мой файл /etc/udev/rules.d/ выглядит так:

# UDISKS_FILESYSTEM_SHARED # ==1: mount filesystem to a shared directory (/media/VolumeName) # ==0: mount filesystem to a private directory (/run/media/$USER/VolumeName) # See udisks(8) ENV=="filesystem|other|crypto", ENV="1" ENV=="partition", RUN+="/lib/udev/storage-automount.sh", ENV="/lib/udev/storage-autounmount.sh" 

Это просто и должно быть типичным вариантом использования.

Похожие вопросы