Автоматически смонтируйте, что внешние диски к/media/LABEL на начальной загрузке без пользователя вошли в систему?

Этот вопрос подобен, но вид противоположности того, что я хочу. Я хочу, чтобы внешние Карты памяти были смонтированы автоматически при начальной загрузке, ни с кем вошел в систему, к местоположениям как /media/<label>.

Я не хочу должным быть вводить все данные в fstab, частично потому что это является утомительным и раздражающим, но главным образом потому что я не могу предсказать то, что я буду включать его или как разделы изменятся в будущем.

Я хочу диски быть доступным для вещей как MPD и доступным, когда я вхожу в систему с SSH. gnome-mount кажется, только монтирует вещи, когда Вы локально зарегистрированы в Gnome графическая сессия.

73
задан 20.03.2017, 12:17

8 ответов

  • Отметьте Сервером Ubuntu 11.10: Этот сценарий приводит к сбою на Сервере Ubuntu 11,10 должных к устаревшему vol_id команда. vol_id был заменен blkid. Для фиксации сценария замените "vol_id" "blkid-o udev" в udev-auto-mount.sh сценарий.

Я ударял по голове вокруг этого некоторое время теперь, и я думаю, что нашел рабочее решение. Это разрабатывается и тестируется в находящейся в Debian системе, таким образом, она должна работать над Ubuntu. Я укажу на предположения, которые это делает так, это может быть адаптировано к другим системам также.

  • Это автоматически смонтирует Карты памяти на плагине и не должно брать много для адаптации к Firewire.
  • Это использует UDEV, таким образом, никакой monkeying с HAL/DeviceKit/GNOME-Anything.
  • Это автоволшебно создает a /media/LABEL каталог для монтирования устройства к.

  • Однако это может вмешаться в другие утилиты автоматического монтирования; я не могу протестировать на это. Я ожидаю, что, с активным Gnome-VFS, оба могут попытаться сделать монтирование..., если Gnome-VFS приводит монтирование к сбою, это не могло бы настроить значок на рабочем столе. Размонтирование от Gnome должно быть возможным, но могло бы потребовать gksudo или подобный.

Я не протестировал это на начальной загрузке системы, но единственная причина I видит, что не могла бы работать, то, если она пытается смонтировать Карту памяти, прежде чем система будет готова к монтированию. Если это так, Вам, вероятно, будет нужна одна дополнительная тонкая настройка к сценарию монтирования. (Я согласовываю с ServerFault, чтобы видеть, существует ли совет, но не много интереса к нему там.)

На нем, затем.


UDEV ссылается:


Фон (UDEV? Whuzzat?)

UDEV является системой замены в горячем режиме ядра. Это - то, что автоволшебно настраивает надлежащие устройства и символьные ссылки устройства (например, /dev/disk/by-label/<LABEL>), и во время начальной загрузки и для устройств, добавленных, в то время как система работает.

D-шина и HAL используются для отправки аппаратных событий слушателям как Настольные среды. Таким образом, когда Вы входите в GNOME и вставляете CD или включаете Карту памяти, то событие следует за этой цепочкой:

kernel -> udev -> dbus -> hal -> gnome-vfs/nautilus (mount)

И престо, Ваш диск смонтирован. Но в бездисплейной системе, мы не хотим должными быть входить в систему, извлекают пользу из автомонтирования.

Правила Udev

Так как UDEV позволяет нам записать правила и запустить программы на установке устройства, это - идеальный выбор. Мы собираемся использовать в своих интересах существующие правила Debian/Ubuntu, позволить им установить /dev/disk/by-label/<LABEL> символьная ссылка для нас, и добавляет другое правило, которое смонтирует устройство для нас.

Правила UDEV удерживаются /etc/udev/rules.d/lib/udev/rules.d на Кармическом), и обрабатываются в числовом порядке. Любой файл, не запускающийся с числа, обрабатывается после пронумерованных файлов. В моей системе правила HAL находятся в названном файле 90-hal.rules, таким образом, я вставил свои правила 89-local.rules таким образом, они обрабатываются, прежде чем они доберутся до HAL. Прежде всего, необходимо удостовериться, что эти правила происходят после 60-persistent-storage.rules. local.rules может быть достаточно хорошим.

Поместите это в свой новый файл правил:

# /etc/udev/rules.d/local.rules 
# /etc/udev/rules.d/89-local.rules
# ADD rule: if we have a valid ID_FS_LABEL_ENC, and it's USB, mkdir and mount
ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="add",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-automounter.sh %k"
  • Удостоверьтесь, что нет никаких пробелов после \, просто a newline (\n).

  • Изменение SUBSYSTEMS=="usb" кому: SUBSYSTEMS=="usb|ieee1394" для поддержки Firewire.

  • Если Вы хотите, чтобы устройство всегда принадлежало конкретному пользователю, добавьте OWNER="username" пункт. Если Вы просто нуждаетесь в файлах, принадлежавших конкретному пользователю, настраиваете сценарий монтирования вместо этого.

Чтение правила

Это добавляет программу для выполнения к списку устройства программ для выполнения. Это определяет устройства раздела USB <LABEL>, затем передают эта информация сценарию, который выполняет монтирование. А именно, это правило соответствует:

  1. ENV{ID_FS_LABEL_ENC}=="?*" - переменная среды установлена более ранним системным правилом. Не существует для нефайловых систем, так вот почему мы проверяем на него. Мы на самом деле хотим использовать ID_FS_LABEL для точки монтирования, но я не убедил UDEV выходить из него для меня, таким образом, мы позволим сценарию монтирования обработать это.

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

    $ sudo vol_id /dev/sdc1
    ID_FS_TYPE=ext2
    ID_FS_UUID=a40d282a-4a24-4593-a0ab-6f2600f920dd
    ID_FS_LABEL=Travel Dawgs
    ID_FS_LABEL_ENC=Travel\x20Dawgs
    ID_FS_LABEL_SAFE=Travel_Dawgs
    
  2. ACTION=="add" - только соответствие add события...

  3. SUBSYSTEMS=="usb" - только соответствуйте устройствам, которые находятся на Шине USB. Мы используем SUBSYSTEMS здесь, потому что это соответствует против родителей нашего устройства; устройством, которым мы интересуемся, на самом деле будет ПОДСИСТЕМА == "scsi". Соответствие против родительского USB-устройства старается не добавлять нашу программу к внутренним дискам.

  4. RUN+="..." - не соответствие, а действие: добавьте эту программу к списку программ для выполнения. В аргументах программы, %k расширен до имени устройства (например, sdc1, нет /dev/sdc1) и $env{FOO} получает содержание НЕЧТО переменной среды.

Тестирование правила

Первая ссылка (выше) является превосходным учебным руководством UDEV, но это немного устарело. Программы это работает за тестированием Ваших правил (udevtest в особенности), были заменены вместилищем udevadm утилита.

После добавления правила включите устройство. Дайте ему несколько секунд, затем проверьте для наблюдения, с каким устройством этому присвоили:

$ ls -l /dev/disk/by-label/*
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Foo -> ../../sda1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Bar -> ../../sdb1
lrwxrwxrwx 1 root root 10 2009-10-25 07:27 label_Baz -> ../../sdc1

Если Ваш диск removeable содержит label_Baz, это находится на устройстве sdc1. Выполните это и посмотрите на вывод к концу:

$ sudo udevadm test /sys/block/sdc/sdc1
parse_file: reading (...)                           (many lines about files it reads)
import_uevent_var: import into environment: (...)   (many lines about env variables)
(...)                                               (many lines tracing rule matches & programs run)
update_link: found 1 devices with name 'disk/by-label/LABEL_BAZ'
update_link: found '/block/sdc/sdc1' for 'disk/by-label/LABEL_BAZ'
update_link: compare (our own) priority of '/block/sdc/sdc1' 0 >= 0
update_link: 'disk/by-label/LABEL_BAZ' with target 'sdc1' has the highest priority 0, create it
udevtest: run: '/usr/local/sbin/udev-automounter.sh sdc1 LABEL_BAZ'
udevtest: run: 'socket:/org/freedesktop/hal/udev_event'
udevtest: run: 'socket:@/org/kernel/udev/monitor'

Ищите название сценария от нашего RUN+= правило в последних нескольких строках (3-й от нижней части в этом примере). Вы видите аргументы, которые использовались бы для этого устройства. Можно выполнить ту команду теперь, чтобы проверить, что аргументы являются звуковыми; если это работает над Вашей командной строкой, это должно работать автоматически, когда устройство вставляется.

Можно также следить за развитием событий UDEV в в реальном времени: выполненный sudo udevadm monitor (см. man udevadm для получения дополнительной информации о переключателях). Затем просто включите новую прокрутку событий устройства и часов. (Вероятно, излишество, если Вы не в детали действительно низкого уровня...),

Перезагрузка правил

После того как Вы проверили, что правило становится прочитанным правильно, необходимо сказать UDEV перезагружать его правила, таким образом, новый вступает в силу. Используйте любой из этих методов (если первое не работает, второе должно..., но попробовать первое первое):

  • выполненный sudo udevadm control --reload-rules

  • выполненный sudo /etc/init.d/udev reload

  • перезагрузка


Сценарий! На самом деле, 2 сценария...


Вот первый сценарий. Начиная с программы мы выполняем потребности завершиться быстро, это просто кружит второй сценарий в фоновом режиме. Вставьте это /usr/local/sbin/udev-automounter.sh:

#!/bin/sh
#
# USAGE: usb-automounter.sh DEVICE 
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-mount.sh ${1} &

Вот второй сценарий. Это действительно немного больше вводит проверку. Вставьте это /usr/local/sbin/udev-auto-mount.sh. Можно хотеть настроить опции монтирования ниже. Этот сценарий теперь обрабатывает нахождение МАРКИРОВКИ раздела самостоятельно; UDEV только отправляет ИМЯ УСТРОЙСТВА.

Если существует проблема, монтирующая диски во время начальной загрузки, можно помещать хорошее долго sleep 60 в этом сценарии для предоставления системного времени для прибытия полностью, прежде чем сценарий пытается смонтировать диск.

Я дал предложение в комментариях для того, как проверить (выполненный ps видеть, работает ли веб-сервер), но Вы захотите настроить это для своей системы. Я думаю большинство любых сетевых серверов, которые Вы могли бы использовать, будет достаточен с этой целью - nfsd, smbd, апач, и т.д. Риск, конечно, состоит в том, что сценарий монтирования перестанет работать, если услуга не будет работать, поэтому возможно, тестирование существования конкретного файла было бы лучшим решением.

#!/bin/sh
#
# USAGE: udev-auto-mount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
# 
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

# test that this device isn't already mounted
device_is_mounted=`grep ${DEVICE} /etc/mtab`
if [ -n "$device_is_mounted" ]; then
   echo "error: seems /dev/${DEVICE} is already mounted"
   exit 1
fi

# If there's a problem at boot-time, this is where we'd put
# some test to check that we're booting, and then run
#     sleep 60
# so the system is ready for the mount below.
#
# An example to experiment with:
# Assume the system is "booted enough" if the HTTPD server is running.
# If it isn't, sleep for half a minute before checking again.
#
# The risk: if the server fails for some reason, this mount script
# will just keep waiting for it to show up.  A better solution would
# be to check for some file that exists after the boot process is complete.
#
# HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# while [ -z "$HTTPD_UP" ]; do
#    sleep 30
#    HTTPD_UP=`ps -ax | grep httpd | grep -v grep`
# done


# pull in useful variables from vol_id, quote everything Just In Case
eval `/sbin/vol_id /dev/${DEVICE} | sed 's/^/export /; s/=/="/; s/$/"/'`

if [ -z "$ID_FS_LABEL" ] || [ -z "$ID_FS_TYPE" ]; then
   echo "error: ID_FS_LABEL is empty! did vol_id break? tried /dev/${DEVICE}"
   exit 1
fi


# test mountpoint - it shouldn't exist
if [ ! -e "/media/${ID_FS_LABEL}" ]; then

   # make the mountpoint
   mkdir "/media/${ID_FS_LABEL}"

   # mount the device
   # 
   # If expecting thumbdrives, you probably want 
   #      mount -t auto -o sync,noatime [...]
   # 
   # If drive is VFAT/NFTS, this mounts the filesystem such that all files
   # are owned by a std user instead of by root.  Change to your user's UID
   # (listed in /etc/passwd).  You may also want "gid=1000" and/or "umask=022", eg:
   #      mount -t auto -o uid=1000,gid=1000 [...]
   # 
   # 
   case "$ID_FS_TYPE" in

       vfat)  mount -t vfat -o sync,noatime,uid=1000 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # I like the locale setting for ntfs
       ntfs)  mount -t auto -o sync,noatime,uid=1000,locale=en_US.UTF-8 /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;

              # ext2/3/4 don't like uid option
       ext*)  mount -t auto -o sync,noatime /dev/${DEVICE} "/media/${ID_FS_LABEL}"
              ;;
   esac

   # all done here, return successful
   exit 0
fi

exit 1

Супер бонусный сценарий очистки!

Еще один сценарий. Все это делает размонтировать устройство и удалить каталоги точки монтирования. Это предполагает, что имеет privs, чтобы сделать это, таким образом, необходимо будет выполнить его с sudo. Этот сценарий теперь берет полную точку монтирования на командной строке, например:

$ /usr/local/sbin/udev-unmounter.sh "/media/My Random Disk"

Вставьте это /usr/local/sbin/udev-unmounter.sh:

#!/bin/sh
#
# USAGE: udev-unmounter.sh MOUNTPT
#   MOUNTPT is a mountpoint we want to unmount and delete.
MOUNTPT="$1"

if [ -z "$MOUNTPT" ]; then
   exit 1
fi


# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1
74
ответ дан 07.12.2019, 08:09

Можно попытаться поместить su username -c gnome-volume-manager в/etc/rc.local. Могло бы быть достаточно просто иметь выполнение менеджера томов гнома.

Править: Кажется, что менеджер томов гнома больше не является частью распределения по умолчанию, даже на рабочем столе Ubuntu.

wajig policy  gnome-volume-manager
gnome-volume-manager:
  Installed: (none)
  Candidate: 2.24.0-0ubuntu1
  Version table:
     2.24.0-0ubuntu1 0
        500 http://ubuntu.secs.oakland.edu jaunty/universe Packages

Однако, возможно, при установке его это будет все еще работать. Это стоит попытки. Если это не работает, удалите его снова.

Существует также usbmount пакет, который делает то, что Вы хотите, но мог бы возможно вмешаться в нормальное автомонтирование.

2
ответ дан 07.12.2019, 08:09
  • 1
    О, я вижу. Был бы пакет, названный менеджером томов гнома, также.Похожие страницы: crunchbanglinux.org/forums/topic/239 / … – endolith 31.10.2009, 02:04
  • 2
    Похоже, что менеджер томов гнома использует HAL для монтирования вещей? И "По состоянию на 2009, HAL в процессе того, чтобы быть удержавшим от использования в пользу DeviceKit". Почему все всегда находится в Linux как это? Они только начинают получать что-то работающее почти право, и затем они разрушают его и заменяют его чем-то новым, которое не работает. – endolith 31.10.2009, 03:00
  • 3
    pmount даже больше не работает.> pmount/dev/disk/by-label/STORAGE Ошибка: устройство/dev/sdc1 не является съемным togaware.com/linux/survivor/Using_Gnome_Volume_Manager.html – endolith 31.10.2009, 03:06

Попытайтесь настроить через mountmanager, так, чтобы Вы не вводили данные вручную.

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

1
ответ дан 07.12.2019, 08:09

Одна заключительная опция, которую другие предложили по всей сети, ivman, но это, кажется, зависит от pmount, то, которое Вы уже заявили, не работает. pmount отказывается и ivman почти то же.

Замена для ivman halevt, и это доступно в Кармическом. Это - переопределение ivman (читайте: "сохраняемый" и "не зависит от pmount"). Пакет не доступен на Бойком, хотя Вы можете создавать его сами, если Вы не планируете обновить.

Оба из этих инструментов находятся выше уровней DBus и HAL и отвечают на события от них. По-видимому, оба могут работать или как системный демон или поскольку сеанс пользователя монтирует менеджер (а-ля Gnome-VFS) - /etc/defaults/{ivman,halevt} файлы отвечают за параметры настройки системы.

Вот некоторые инструкции для тонкой настройки ivman использовать /media/<LABEL> точки монтирования. Это вероятно это halevt имеет более простой способ сделать это, но возможно они помогут Вам найти ответ.


Работа с HALEVT

Обновление: В интересах получения автоволшебного CD монтируется также, который не обеспечивает мой ответ UDEV, я выглядел глубже на halevt. Я нашел это сообщение в блоге, которое помогло объяснить много о процессе. Я действительно должен был скомпилировать свое собственное halevt пакет для Debian Lenny (к счастью, все зависимости были в разделе lenny-бэкпортов). После того, как установленный, процесс был главным образом не - ужасен:

  1. Удостоверьтесь, что в системном halevt-демоне включают /etc/default/halevt
  2. Позвольте системе halevt пользователь монтировать устройства в /etc/PolicyKit/PolicyKit.conf (см. ниже; источник)
  3. Измените политику HAL скопировать метку тома в предпочтительную точку монтирования в /etc/hal/fdi/policy/preferences.fdi (см. ниже),
  4. Если Вы хотите поддержку CD/DVD, захватываете eject.hal сценарий от вышеупомянутого сообщения в блоге, измените и сохраните в /usr/local/bin.
  5. Измените halevt системную конфигурацию для включения, монтируется в /etc/halevt/halevt.xml
  6. Добавьте код к своему менеджеру по входу в систему пред - и сценарии постсессии для остановки системного halevt-демона, когда кто-то входит в систему, и перезапустите его, когда они выходят из системы.

Если необходимо перезапустить HAL и демонов HALEVT для проверки новых конфигураций, используйте это для получения их в правильном порядке:

sudo sh -c "/etc/init.d/halevt stop ; /etc/init.d/hal restart ; /etc/init.d/halevt start"

Шаг 1

Проверьте это START_DAEMON=yes в /etc/default/halevt.

Шаг 2

В /etc/PolicyKit/PolicyKit.conf, добавьте эту внутреннюю часть <config></config> раздел:

<match action="org.freedesktop.hal.storage.mount-removable">
   <match user="halevt">
      <return result="yes"/>
   </match>
</match>

Шаг 3

В /etc/hal/fdi/policy/preferences.fdi, добавьте эту внутреннюю часть 'раздел:

<match key="volume.label" empty="false">
    <match key="volume.label" is_absolute_path="false">
        <merge key="volume.policy.desired_mount_point" type="copy_property">volume.label</merge>
    </match>
</match>

Шаг 4

Сценарий хорош, но должен работать /bin/bash; некоторые системы могут на самом деле использовать /bin/dash когда /bin/sh назван. Так измените верхнюю строку в сценарии, чтобы удостовериться, что Вы получаете правильный:

#!/bin/sh         <------ old first line

#!/bin/bash       <------ new first line

Шаг 5

Это - забавная часть. Ваша система может обеспечить основное /etc/halevt/halevt.xml уже, таким образом, необходимо будет адаптировать это для собственного использования. В моем случае моя система уже обеспечила основное монтирование removeables, но я должен был добавить поддержку монтирования CD-ROM и кнопки выброса.

Сообщение в блоге, которое я упомянул, имеет хорошую конфигурацию XML в качестве примера для взгляда на для собственных тонких настроек. Это главным образом об установке замены монтирования гном для автора fluxbox среда, таким образом, его пример XML делает больше, чем, Вы захотите, но это - отличный способ получить ощущение того, что можно сделать. Существуют также некоторые хорошие примеры в /usr/share/doc/halevt/examples.

Я также должен был работать sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt" прежде чем все работало бы.

Вот мои дополнения, чтобы заставить автомонтирующийся CD/DVD работать:

<!-- CD/DVD mount -->
<halevt:Device match="hal.block.device &amp; hal.block.is_volume = true  &amp; hal.volume.is_disc = true &amp; hal.volume.disc.has_data = true">
   <halevt:Property name="hal.volume.is_mounted">
      <halevt:Action value="true" exec="halevt-mount -u $hal.udi$ -p $hal.volume.policy.desired_mount_point$ -m 002"/>
   </halevt:Property>
</halevt:Device>

<!-- CD/DVD eject button support -->
<halevt:Device match="hal.storage.drive_type = cdrom">
   <halevt:Condition name="EjectPressed" exec='/usr/local/bin/eject.hal $hal.block.device$'/>
</halevt:Device>

Шаг 6

После того как Вы получили системного halevt-демона, работающего, необходимо будет отключить его, когда Вы войдете в GNOME и перезапускаете его снова, когда Вы выходите из системы. (См., что мой ответ на этот вопрос для non-GDM входит в менеджеров.) Этот материал является теоретическим, так как я не использую его, но он должен работать.

В /etc/gdm/PreSession/Default, добавьте это для остановки системного halevt-демона:

/etc/init.d/halevt stop

В /etc/gdm/PostSession/Default, добавьте это для перезапуска системного halevt-демона:

/etc/init.d/halevt start
9
ответ дан 07.12.2019, 08:09

Вы могли бы хотеть испытать Pysdm

2
ответ дан 07.12.2019, 08:09
  • 1
    Это - просто другой fstab редактор, не так ли? – endolith 30.10.2009, 05:20
  • 2
    Да, но "Это также позволяет создание правил udev для динамической конфигурации устройств хранения" – Sathyajith Bhat♦ 30.10.2009, 06:40

Если Вам только смонтировали один диск за один раз, можно просто отредактировать это в Ваш /etc/fstab файл. Что-то вроде:

/dev/sdb1     /mnt/usbdrive     ext3     defaults 0   0

Это должно смонтировать его при начальной загрузке и сделать его доступным для любого с перманентом. Если у Вас есть больше чем один диск, можно все еще сделать это с:

/dev/sdb1     /mnt/usbdrive1     ext3     defaults 0   0
/dev/sdc1     /mnt/usbdrive2     ext3     defaults 0   0
-5
ответ дан 07.12.2019, 08:09
  • 1
    ясно не, что спрашивает вопрос. – quack quixote 30.10.2009, 23:33

ответ quixote's шарлатана не работает над Ubuntu Ясный Lynx (10.04) - существует нет /sbin/vol_id команда.

Вместо того, чтобы быть необычным и использовать udev, помещенный это в Ваш/etc/rc.local и быть сделанным:

for dev in $(ls -1 /dev/disk/by-label/* | grep -v EFI) ; do
  label=$(basename $dev)
  mkdir -p /media/$label
  $(mount | grep -q /media/$label) || mount $dev /media/$label
done
3
ответ дан 07.12.2019, 08:09

Спугивать превосходные инструкции quixote шарлатана для удаления:

Добавьте следующую строку к файлу правила udev, который Вы сделали ранее (/etc/udev/rules.d)"

ENV{ID_FS_LABEL_ENC}=="?*",   ACTION=="remove",      SUBSYSTEMS=="usb", \
         RUN+="/usr/local/sbin/udev-autounmounter.sh %k"

Затем создайте следующий сценарий и chmod это исполняемый файл (/usr/local/sbin/udev-autounmounter.sh) со следующим содержанием:

#!/bin/sh
#
# USAGE: usb-autounmounter.sh DEVICE 
#   DEVICE   is the actual device node at /dev/DEVICE

/usr/local/sbin/udev-auto-unmount.sh ${1} &

Наконец сам сценарий размонтирования (udev-auto-unmount.sh):

#!/bin/sh
#
# USAGE: udev-auto-unmount.sh DEVICE
#   DEVICE   is the actual device node at /dev/DEVICE
# 
# This script takes a device name, looks up the partition label and
# type, creates /media/LABEL and mounts the partition.  Mount options
# are hard-coded below.

DEVICE=$1

# check input
if [ -z "$DEVICE" ]; then
   exit 1
fi

#test that the device is already mounted
MOUNTPT=`mount | grep ${DEVICE} | cut -d ' ' -f 3`
if [ -z "${MOUNTPT}" ]; then
   echo "error: the device is not already mounted"
   exit 1
fi

# test mountpoint - it should exist
if [ -e "${MOUNTPT}" ]; then

   # very naive; just run and pray
   umount -l "${MOUNTPT}" && rmdir "${MOUNTPT}" && exit 0

   echo "error: ${MOUNTPT} failed to unmount."
   exit 1
fi

echo "error: ${MOUNTPT} does not exist"
exit 1

Таким образом с другими инструкциями, каталог будет автоматический появляться и исчезать на udev событиях.

3
ответ дан 07.12.2019, 08:09

Теги

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