Ось як я це нещодавно зробив, і зараз я цілком задоволений таким підходом. Це для Ubuntu 12.04 + gentoo, але, мабуть, будь-який дистрибутив, який дозволяє встановлювати udev і autofs, повинен працювати.
Передумови: Ви повинні встановити udev + autofs.
Крок 1)
Створіть наступний файл "/etc/udev/rules.d/90-usbsd-auto.rules" (звичайно, ви можете використовувати будь-яке ім'я, поки воно закінчується на ".rules"). :
# Add symlink /dev/usbdisks/<label> to /dev/sd[a-z][1-9]
# if partition has a label
# Add symlink /media/usb/<label> to /media/autousb/<label>
# for automounter support
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}", \
RUN+="/bin/ln -sf /media/autousb/$env{ID_FS_LABEL_ENC} /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has a NO label, use kernel name (sd[a-z][1-9])
ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
SYMLINK+="usbdisks/%k", MODE:="0660", \
RUN+="/bin/rm /media/usb/%k", \
RUN+="/bin/ln -sf /media/autousb/%k /media/usb/%k"
# Some FileSystems emit a "change" event when they are unmounted.
# UDEV seems to delete the device symlink in this case :-(
# So we need to re-create it here
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
SYMLINK+="usbdisks/$env{ID_FS_LABEL_ENC}", MODE:="0660"
# Fallback: If partition has NO label, use kernel name
ACTION=="change", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
SYMLINK+="usbdisks/%k", MODE:="0660"
# When device is removed, also remove /media/usb/<label>
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}=="?*", \
RUN+="/bin/rm /media/usb/$env{ID_FS_LABEL_ENC}"
# Fallback: If partition has no label, remove /media/usb/%k
ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", \
ENV{ID_BUS}=="usb", ENV{ID_FS_LABEL_ENC}!="?*", \
RUN+="/bin/rm /media/usb/%k"
Що це робить: це створює два посилання, один для розділу USB-накопичувача у розділі "/ dev / usbdisks / <...>". Він буде використовувати або мітку розділу USB-накопичувача, або ім'я ядра, якщо мітки немає. Друге символьне посилання буде посилатися з "/ media / usb / <...>" на "/ media / autousb / <...>", це робиться для підтримки автозапуску (див. Крок 2).
Примітка: Спочатку я не використовував правила зі змінними ID_FS_LABEL_ENC, оскільки це на мою думку небезпечно. Що станеться, якщо ви підключите дві USB-накопичувачі, які використовують однакову мітку?
Але плакат спеціально хотів використовувати ярлик USB-диска, тому я відповідно змінив правила.
Щоб переконатися, що udev читає ці правила, використовуйте
sudo udevadm control --reload-rules
З цим файлом правил udev все налаштовано для автоматичного налаштування розділу USB-накопичувача. Зауважте, що це зараз, пристрій НЕ буде автоматизовано (навмисно). Після автоматичного використання він буде автоматизований
Крок 2)
Налаштування автофайлів для automount / media / autousb / <...>: я додав наступний рядок до файлу "/etc/auto.master" (для Ubuntu 12.04):
/media/autousb /etc/auto.usb --timeout=60
Це означає, що AutoFS відключить пристрій після 60 секунд бездіяльності. Можливо, ви хочете використовувати менше або більше, залежно від вашого смаку.
Для Gentoo ви повинні змінити "/etc/autofs/auto.master", щоб було доцільно використовувати
/media/autousb /etc/autofs/auto.usb --timeout=60
Тепер я створив "auto.usb" із таким вмістом:
#!/bin/bash
key=${1}
fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${key})
if [ "${fstype}" = "vfat" ] ; then
echo "-fstype=vfat,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ntfs" ] ; then
echo "-fstype=fuse.ntfs-3g,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
exit 0
fi
if [ "${fstype}" = "ext4" ] ; then
echo "-fstype=ext4,sync,nocheck :/dev/usbdisks/${key}"
exit 0
fi
exit 1
Цей auto.usb має бути виконаним, щоб автофіксатори використовували це як (bash) скрипт. Так, наприклад
sudo chmod 0755 /etc/auto.usb
Що це робить: Цей скрипт розповість AutoFS (/ usr / sbin / automount), як змонтувати розділ пристрою зберігання USB.
Сценарій спочатку використовуватиме "/ sbin / blkid", щоб дізнатися, яка файлова система знаходиться на розділі.
Потім сценарій надасть правильні параметри кріплення залежно від розділу пристрою.
Примітка. Я включив зразок коду для файлів "vfat" (мабуть, найбільш поширений для USB-паличок), "ntfs" та "xfs". Звичайно, досить просто поширити це на підтримку більшої кількості файлових систем.
Крок 3) Необов’язково ... Щоб "вийняти" == від'єднати свої USB-накопичувачі (або розділи на вашій палиці usb), створіть сценарій під / sbin / usbeject:
#!/bin/bash
killall -s SIGUSR1 /usr/sbin/automount
За допомогою цього сценарію ви можете використовувати "sudo usbeject" для демонтажу всіх змонтованих розділів USB-пристроїв (сказавши automount зняти їх).
Звичайно, ви можете просто переконатися, що розділ ніде не використовується; Автомобіль відключить розділ після 60 секунд таймауту ...
Справжня хитрість тут полягає у використанні символьних посилань від "/ media / usb" до "/ media / autousb":
- Посилання "/ media / usb" будуть створені udev, даючи користувачеві простий огляд, які розділи пристроїв зберігання даних є там
- AutoFS автоматично автоматизує розділ на вимогу, якщо ви використовуєте його через / media / usb
- За допомогою сценарію "auto.usb" ви можете підтримувати будь-яку файлову систему, а також ви можете підтримувати будь-яку схему іменування.
- Цей підхід підтримує USB-накопичувачі з декількома розділами, навіть якщо ці розділи використовують різні типи файлової системи.