Linux: Автоматическое монтирование USB-накопителей и создание пути
Автоматическое монтирование для FAT и NTFS из консоли.
1. установите usbmount :
Теперь надо сконфигурировать usbmount для использования NTFS :
Найдите строку FILESYSTEMS и замените её на это:
Так же найдите строку MOUNTOPTIONS и замените её на это (добавляется big_writes для нормальной скорости записи ntfs накопителей):
Следующая важная строка это FS_MOUNTOPTIONS , замените её на это:
Теперь создайте файл usbmount.rules в /etc/udev/rules.d/ :
и запишите в него это содержимое:
Следующим шагом создайте файл usbmount@.service в /etc/systemd/system/ :
Проблема в том, что в зависимости от очередности подключения usb-устройств, им назначается разный путь. И иногда необходимо, что бы система точно знала где именно находится смонтированная папка конкретной USB-флешки или USB-винчестера.
1. подключаем USB-накопитель и смотрим какой у него UUID в системе (тут и далее я буду давать пример для моего USB-винчестера)
2. устанавливаем пакет at:
3. в описанном выше
4. создаем файл /root/autofs_udev.sh :
5. создаем файл /root/autofs_udev_bg.sh :
Красным я выделил UUID своего USB-диска и имя символьной ссылки, которая создастся после монтирования диска. Так же в блоке "case ${ID_FS_UUID_ENC} in" вы можете прописать несколько разных устройств. В итоге, после подключения диска получится так:
ну а так как мы теперь знаем что по пути /media/USB_SAMSUNG у нас постоянно находится именно наш конкретный USB-накопитель, то дальше уже можно оперировать с ним как угодно.
Желаю Удачи! :)
---
Найдено и доработано на просторах:
часть первая: Automount various USB stick file systems on Jessie Lite
часть вторая: Опции монтирования для произвольной флешки
Часть первая. Автомонтирование.
1. установите usbmount :
sudo apt-get install usbmount2. установите NTFS драйвер :
sudo apt-get install ntfs-3g
Теперь надо сконфигурировать usbmount для использования NTFS :
sudo nano /etc/usbmount/usbmount.conf
Найдите строку FILESYSTEMS и замените её на это:
FILESYSTEMS="vfat ext2 ext3 ext4 hfsplus ntfs fuseblk"
Так же найдите строку MOUNTOPTIONS и замените её на это (добавляется big_writes для нормальной скорости записи ntfs накопителей):
MOUNTOPTIONS="sync,noexec,nodev,noatime,nodiratime,big_writes"
Следующая важная строка это FS_MOUNTOPTIONS , замените её на это:
FS_MOUNTOPTIONS="-fstype=ntfs-3g,nls=utf8,umask=007,gid=46 -fstype=fuseblk,nls=utf8,umask=007,gid=46 -fstype=vfat,gid=1000,uid=1000,umask=007"
Теперь создайте файл usbmount.rules в /etc/udev/rules.d/ :
sudo nano /etc/udev/rules.d/usbmount.rules
и запишите в него это содержимое:
KERNEL=="sd*", DRIVERS=="sbp2", ACTION=="add", PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c" KERNEL=="sd*", SUBSYSTEMS=="usb", ACTION=="add", PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c" KERNEL=="ub*", SUBSYSTEMS=="usb", ACTION=="add", PROGRAM="/bin/systemd-escape -p --template=usbmount@.service $env{DEVNAME}", ENV{SYSTEMD_WANTS}+="%c" KERNEL=="sd*", ACTION=="remove", RUN+="/usr/share/usbmount/usbmount remove" KERNEL=="ub*", ACTION=="remove", RUN+="/usr/share/usbmount/usbmount remove"
Следующим шагом создайте файл usbmount@.service в /etc/systemd/system/ :
sudo nano /etc/systemd/system/usbmount@.serviceс таким содержимым:
[Unit] BindTo=%i.device After=%i.device [Service] Type=oneshot TimeoutStartSec=0 Environment=DEVNAME=%I ExecStart=/usr/share/usbmount/usbmount add RemainAfterExit=yesТеперь перезагрузитесь и проверьте в какую папку было примонтировано ваше USB-устройство :
cat /etc/mtab
Часть вторая. Создаем постоянный путь
Проблема в том, что в зависимости от очередности подключения usb-устройств, им назначается разный путь. И иногда необходимо, что бы система точно знала где именно находится смонтированная папка конкретной USB-флешки или USB-винчестера.
1. подключаем USB-накопитель и смотрим какой у него UUID в системе (тут и далее я буду давать пример для моего USB-винчестера)
$ blkid /dev/sda1: LABEL="SAMSUNG" UUID="9250B86A50B85727" TYPE="ntfs" PARTUUID="ee2dfeb5-01"идентификатор моего самсунга - это "9250B86A50B85727"
2. устанавливаем пакет at:
sudo apt-get install at
3. в описанном выше
/etc/udev/rules.d/usbmount.rules
добавляем в самый низ строчку:
KERNEL=="sd*", ACTION=="add|remove", RUN+="/root/autofs_udev.sh"
4. создаем файл /root/autofs_udev.sh :
sudo nano /root/autofs_udev.shс таким содержимым:
#!/bin/sh echo /root/autofs_udev_bg.sh | at nowи назначаем права:
sudo chmod 755 /root/autofs_udev.sh
5. создаем файл /root/autofs_udev_bg.sh :
sudo nano /root/autofs_udev_bg.shс таким содержимым:
#!/bin/bash echo " `date +%c`, ACTION= $ACTION" >> /tmp/autofs_udev.out echo " DEVNAME= $DEVNAME, ID_BUS= $ID_BUS" >> /tmp/autofs_udev.out echo " ID_FS_UUID_ENC= $ID_FS_UUID_ENC" >> /tmp/autofs_udev.out if [ -z "${ID_FS_UUID_ENC}" ]; then # try to use LABEL echo " ID_FS_LABEL_ENC= ${ID_FS_LABEL_ENC}" >> /tmp/autofs_udev.out if [ -n "${ID_FS_LABEL_ENC}" ]; then printf -v ID_FS_UUID_ENC "${ID_FS_LABEL_ENC}" else echo " " >> /tmp/autofs_udev.out exit fi fi MEDIA_NAME=${ID_FS_UUID_ENC} case ${ID_FS_UUID_ENC} in 9250B86A50B85727) MEDIA_NAME="USB_SAMSUNG" ;; esac echo " MEDIA_NAME= $MEDIA_NAME" >> /tmp/autofs_udev.out if [ "${MEDIA_NAME}" == '' ]; then echo " " >> /tmp/autofs_udev.out exit fi case ${ACTION} in add) sleep 10 MOUNT_PATH=`mount | grep ${DEVNAME} | awk '{print \$3}'`; echo " $MOUNT_PATH -> $DEVNAME " >> /tmp/autofs_udev.out if [ "${MOUNT_PATH}" != '' ]; then ln -sfn "${MOUNT_PATH}" "/media/${MEDIA_NAME}" fi ;; remove) rm -f "/media/${MEDIA_NAME}" ;; esac echo " " >> /tmp/autofs_udev.outи назначаем права:
sudo chmod 755 /root/autofs_udev_bg.sh
Красным я выделил UUID своего USB-диска и имя символьной ссылки, которая создастся после монтирования диска. Так же в блоке "case ${ID_FS_UUID_ENC} in" вы можете прописать несколько разных устройств. В итоге, после подключения диска получится так:
$ ls -l /media/ lrwxrwxrwx 1 root root 4 дек 5 19:34 usb -> usb0 drwxrwxrwx 1 root root 4096 дек 5 15:49 usb0 drwxr-xr-x 2 root root 4096 дек 5 19:34 usb1 lrwxrwxrwx 1 root root 11 дек 5 23:09 USB_SAMSUNG -> /media/usb0
ну а так как мы теперь знаем что по пути /media/USB_SAMSUNG у нас постоянно находится именно наш конкретный USB-накопитель, то дальше уже можно оперировать с ним как угодно.
Желаю Удачи! :)
---
Найдено и доработано на просторах:
часть первая: Automount various USB stick file systems on Jessie Lite
часть вторая: Опции монтирования для произвольной флешки
Использую Ubuntu Server 20.04
Первая часть работает - USB-носители автоматически монтируются и размонтируются.
Вторая часть почему-то не сработала. В папке /media/ есть только usb0, usb1 и др. Символьного названия папки с USB-диском нет
Настроил по инструкции: подставил UUID своего USB-диска, взятый из выдачи команды blkid, задал символьное имя.
Где копать?
Файл /tmp/autofs_udev.out не создается - по всей видмости, не запускается /root/autofs_udev.sh
Или не запускается /root/autofs_udev_bg.sh