автоматическое_монтирование_флешек_без_systemd

This is an old revision of the document!


Автоматическое монтирование флешек без systemd

Cоздать файл /etc/udev/rules.d/10-local-usb-storage.rules следующего содержания

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

Cоздать файл /usr/bin/mount_media

#!/bin/bash

Добавить сюда задание значения переменной PATH

DISK_LABEL=disk_$(echo /dev/${1} | sed 's|/dev/sd||' | sed -E 's|[^a-zA-Z]||g' | tr '[:lower:][:upper:]' '[:upper:][:lower:]')_$(lsblk -o SIZE /dev/${1} | sed -n '2p')
DISK_LABEL=$(echo "${DISK_LABEL}" | tr -d ' ')
DISK_LABEL=$(echo "${DISK_LABEL}" | tr ',' '.')

if [ "$2" = "plugdev" ]
then 


        PART_FS=$(/usr/sbin/blkid -o value -s TYPE /dev/${1})
        mkdir /media/${DISK_LABEL}

        # Determin any loged users excep root
        logged_users=$(who | awk '{print $1}' | grep -v '^root$' | sort -u)
        if [ -n "$logged_users" ]; then
        OWNER=$(echo "$logged_users" | head -n 1)

                BASIC_GROUP=$(id -gn ${OWNER})

                case ${PART_FS} in

                vfat)
                echo /dev/${1} /media/${DISK_LABEL} vfat rw,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=0022,fmask=0022 0 0 >> /etc/fstab
                mount -t vfat -o rw,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=0022,fmask=0022 /dev/${1} /media/${DISK_LABEL}
                ;;

                exfat)
                echo /dev/${1} /media/${DISK_LABEL} exfat rw,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=0022,fmask=0022 0 0 >> /etc/fstab
                mount -t exfat -o rw,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=0022,fmask=0022 /dev/${1} /media/${DISK_LABEL}
                ;;

                ntfs)
                echo /dev/${1} /media/${DISK_LABEL} ntfs rw,relatime,noexec,nosuid,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=000,fmask=111 0 0 >> /etc/fstab
                mount -t ntfs -o rw,relatime,noexec,nosuid,users,uid=${OWNER},gid=${BASIC_GROUP},dmask=000,fmask=111 /dev/${1} /media/${DISK_LABEL}
                ;;

                ext4)
                echo /dev/${1} /media/${DISK_LABEL} auto rw,noatime,nosuid,nodev,users,errors=remount-ro 0 0 >> /etc/fstab
                mount -t ext4 -o rw,users,noatime,nosuid,nodev,errors=remount-ro /dev/${1} /media/${DISK_LABEL}
                ;;

                *)
                echo /dev/${1} /media/${DISK_LABEL} auto,users 0 0 >> /etc/fstab
                mount -t auto -o auto,users 0 0  /dev/${1} /media/${DISK_LABEL}
                ;;

                esac
        fi
elif [ "$2" = "unplugdev" ] 
then
        umount -l /dev/${1}
        rm -rf /media/${DISK_LABEL}*
        #rmdir --ignore-fail-on-non-empty "$(/usr/bin/awk "/${1}/ { print \$2 }" < /etc/fstab)"
        sed "/\/dev\/${1}/d" -i /etc/fstab
fi


exit 0

# NB: The user will not be able to unmount the device, even if the users option was specified in the mount command. There must be an entry about the device in /etc/fstab.

Дать этому файлу права на исполнение

sudo chmod +x /usr/bin/mount_media

Обновить правила для udev без перезагрузки

sudo udevadm control --reload-rules

Разрешить пользователю выполнять команды монтирования и размонтирования от root'а

sudo chmod +s /bin/mount
sudo chmod +s /bin/umount

—————————————————————————-

Добавить одну пустую строку в /etc/fstab По мере подключения съёмных носителей в этот файл добавляются новые строки, нужно, чтобы прошлые строки не испортились.


Исходная статья

https://www.altlinux.org/Automount

автоматическое_монтирование_флешек_без_systemd.1739877848.txt.gz · Last modified: 2025/02/18 11:24 by uf4n