Автомонтирование ЮСБ носителей в консоли

Автор Delta213, 19 марта 2021, 20:51:29

« назад - далее »

0 Пользователи и 5 гостей просматривают эту тему.

Delta213

Всем привет!

Помогите начинающему pls.
Осваиваю линукс и нужно мне минимальный установленный дистрибутив. Он будет крутиться в дальнейшем на распберри. Собственно легкий NAS требуется, графика не нужна и даже вредна. Я для начала установил на РС минимальную сборку с офф. сайта 10.8. Не могу сделать автомонтирование флешек, USB HDD. Уже всякое пробовал, обчитался уже, не получается :( Нашел пакет udevil, в него входит devmon, вот если я этот devmon запускаю, то начинается автомонтирование, криво правда работает, но хоть так. А как теперь его в автозагрузку добавить? Но лучше как нормально и правильно это сделать? Лучше по шагам. Я сейчас снесу все что наковырял, там уже такой мусор, не выгрести и по новой свежую установлю.

ChubaDuba

Цитата: Delta213 от 19 марта 2021, 20:51:29Уже всякое пробовал, обчитался уже, не получается
udisks2 пробовали?

dzhoser

#2
Создайте файл
/etc/udev/rules.d/11-media-by-label-auto-mount.rules
Со следующим содержимым
ЦитироватьKERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end" 
# Import FS infos 
IMPORT{program}="/sbin/blkid -o udev -p %N" 
# Get a label if present, otherwise specify one 
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}" 
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k" 
# Global mount options 
ACTION=="add", ENV{mount_options}="relatime" 
# Filesystem-specific mount options 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002" 
# Mount the device 
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}" 
# Clean up after removal 
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}" 
# Exit 
LABEL="media_by_label_auto_mount_end"
После того, как вы создали свой скрипт и сохранили его, перезагрузите udev с помощью:

udevadm control --reload-rules
Ubuntu->Linux mint->Astra Linux SE->Debian 12
Для новичков

Delta213

#3
Я так уже делал, не работает :(
На 11-media-by-label-auto-mount.rules стоит 755
Флешка подключена.
[attach=1,msg124163]

Та флеха была нтфс, вставил установочную дебиан, читает только корневые каталоги, сейчас покажу.
Вот, каталоги все пустые.
[attach=3,msg124163]
[attach=2,msg124163]

Delta213

#4
Подсмотрел как монтируются диски в одной сборке, попробовал у себя, эффект тот-же, в media появляется пустая папка с именем=LABLE подключенного диска.

там так:
в 11-media-by-label-auto-mount.rules
Открыть содержимое (спойлер)


SUBSYSTEM!="block", GOTO="end_rule"
KERNEL!="sd[a-z][0-9]", GOTO="end_rule"
ACTION=="add", RUN+="/home/root/mount_media %k plugdev"
ACTION=="remove", RUN+="/home/root/mount_media %k unplugdev"
LABEL="end_rule"

[свернуть]

в /home/root/mount_media
Открыть содержимое (спойлер)


if [ "$2" = "plugdev" ]; then
     /home/root/mount.sh
else
TEMPL="^/dev/${1} "
MOUNT_POINT=$(/bin/cat /proc/mounts | grep -w "$TEMPL" | /usr/bin/cut -d ' ' -f 2)
umount -l /dev/${1}
sleep 1
rmdir --ignore-fail-on-non-empty "$MOUNT_POINT"
fi
exit 0

[свернуть]

и сам скрипт mount.sh
Открыть содержимое (спойлер)


#!/bin/sh
mountl=''
rmdir /media/* /q 2>/dev/null
for dev in $(ls -1 /dev/disk/by-label/* | grep -v EFI) ; do
  label=$(basename $dev)
mountl=$mountl$(readlink $dev)
  if [ $label != "raspberrypi" ]; then
     mkdir -p /media/$label
     mount $dev /media/$label -o iocharset=utf8,noatime  2>/dev/null
     if [ -z "$(ls -A /media/$label)" ]; then
   mount $dev /media/$label -o ro,iocharset=utf8,noatime  2>/dev/null
           if [ -z "$(ls -A /media/$label)" ]; then
   mount $dev /media/$label -o noatime 2>/dev/null
                   if [ -z "$(ls -A /media/$label)" ]; then
mount -t xfs $dev /media/$label  2>/dev/null
                       if [ -z "$(ls -A /media/$label)" ]; then 
  mount -t exfat $dev /media/$label  2>/dev/null
                       fi
   fi
           fi
     fi
  fi
done
for dev in $(ls -1 /dev/disk/by-uuid/*) ; do
    alo1=$(readlink $dev | grep mmcblk)
    if [ -z "$alo1" ]; then
    alo2=$(echo "$mountl" | grep "$(readlink $dev)")
    if [ -z "$alo2" ]; then
     label=$(basename $dev)
     mkdir -p /media/$label
     mount $dev /media/$label -o iocharset=utf8,noatime  2>/dev/null
     if [ -z "$(ls -A /media/$label)" ]; then
   mount $dev /media/$label -o ro,iocharset=utf8,noatime  2>/dev/null
           if [ -z "$(ls -A /media/$label)" ]; then
   mount $dev /media/$label -o noatime 2>/dev/null
                   if [ -z "$(ls -A /media/$label)" ]; then
mount -t xfs $dev /media/$label  2>/dev/null
                       if [ -z "$(ls -A /media/$label)" ]; then 
  mount -t exfat $dev /media/$label  2>/dev/null
                       fi
   fi
           fi
fi
     fi
  fi
done

[свернуть]

где посмотреть на чем затык?

ChubaDuba


$ sudo apt-get install udisks2 policykit-1 udiskie --no-install-recommends
$ sudo nano /etc/udev/rules.d/99-udisks2.rules


99-udisks2.rules:

# 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{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"


Запускаем:

udiskie --use-udisks2


И всё монтируется в /media

Delta213

#6
Огромное спасибо!!!
Да, так работает. Но, тысяча извинений, чайник я, как добавить udiskie --use-udisks2 в автостарт?
Добавил в  /etc/rc.local , не срабатывает. И так не срабатывает: exec udiskie --use-udisks2

ChubaDuba


$ sudo nano /opt/udisks2_mount


udisks2_mount:

#!/bin/bash

udiskie --use-udisks2



$ sudo chmod +x /opt/udisks2_mount



$ sudo nano /etc/systemd/system/udisks2_mount.service


udisks2_mount.service:

[Unit]
Description=Start udisks2 mount

[Service]
ExecStart=/opt/udisks2_mount



$ sudo systemctl daemon-reload
$ sudo systemctl enable udisks2_mount.service
$ sudo systemctl start udisks2_mount.service


Должно заработать.

Delta213

#8
Цитата: ChubaDuba от 20 марта 2021, 12:38:18Должно заработать.

Не заработало. Как посмотреть в каком месте косяк? В /var/log/syslog я особо страшного не нахожу, хотя я тот еще "специалист".

На udisks2_mount стоит 755, я и на  udisks2_mount.service на всякий 755 поставил.

ChubaDuba

#9
Цитата: Delta213 от 20 марта 2021, 13:21:01Не заработало.
Да, косякнул...
Тогда вот так:

$ mkdir -p  ~/.config/systemd/user/
$ nano ~/.config/systemd/user/udiskie.service


udiskie.service:

[Unit]
Description=Removable disk automounter using udisks2

[Service]
ExecStart=/usr/bin/udiskie --use-udisks2

[Install]
WantedBy=default.target



$ systemctl --user daemon-reload
$ systemctl --user enable udiskie.service
$ systemctl --user start udiskie.service




ChubaDuba


Delta213

А у меня нет.

То что было в /opt/udisks2_mount
и в /etc/systemd/system/udisks2_mount.service

Надо было оставить? Я удалил.


ChubaDuba


Delta213

Да вроде на месте.

[attach=1]