Делается средствами udev, достаточно просто. Есть правило, которое реагирует на все диски /dev/sd[e-z][1-9] (потому как четыре диска sda,sdb,sdc,sdd в системе уже присутствуют). Для такого диска программой blkid загружается информация о нем (нас интересуют метка диска и файловая система), на основе метки диска задается директория, куда он будет смонтирован. На основе файловой системы формируются опции для монтирования и команда монтирования.
Дальше срабатывает команда монтирования.
При извлечении диска он отмонтируется и директория, куда он монтировался, удаляется. Все просто и понятно :)
KERNEL!="sd[e-z][1-9]", GOTO="ro_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}="storage-%k" # Global mount options ACTION=="add", ENV{mount_options}="rw,noauto,user,noexec,nodev,noatime,uid=t,gid=t" # Filesystem-specific mount options ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", ENV{mount_options}="$env{mount_options},umask=002" ACTION=="add", ENV{ID_FS_TYPE}=="msdos", ENV{mount_options}="$env{mount_options},umask=002, quiet" ACTION=="add", ENV{ID_FS_TYPE}=="vfat", ENV{mount_options}="$env{mount_options},umask=002,flush,quiet" ACTION=="add", ENV{ID_FS_TYPE}=="xfs", ENV{mount_options}="norecovery,$env{mount_options}" ACTION=="add", ENV{ID_FS_TYPE}=="jfs", ENV{mount_options}="nointegrity,$env{mount_options}" ACTION=="add", ENV{ID_FS_TYPE}=="reiserfs", ENV{mount_options}="nolog,$env{mount_options}" # Create the mount point ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}" # Mount the device # Special Mounts for ext3, ext4 and hfs # Mount ext2 and ext3 as ext2 ACTION=="add", ENV{ID_FS_TYPE}=="ext2|ext3", RUN+="/bin/mount -t ext2 -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete" # Mount hfs and hfsplus as hfsplus ACTION=="add", ENV{ID_FS_TYPE}=="hfs|hfsplus", RUN+="/bin/mount -t hfsplus -o $env{mount_options} /dev/%k /media/%E{dir_name}", GOTO="mount_complete" # Execute mount with no fstype specified (auto) ACTION=="add", 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="mount_complete" LABEL="ro_auto_mount_end"
Я в процессе поиска решения модифицировал под себя подобный набор правил udev, все заработало, но хотелось еще красивого создания/удаления точек монтирования при условии, что диск может и не иметь метки и тогда он монтируется по имени своего устройства. И тут наткнулся на вот этот набор правил, который радостно и подогнал под себя. Где взял - уже не помню...
Олег, есть более компактное решение:
ОтветитьУдалить$blkid
записываем UUID диска, а потом долбим его в fstab, например:
UUID={blablabla} ext4 defaults 0 0
с ошибкой написал, но думаю суть понятна :)
УдалитьА что будет в таком случае при загрузке системы, если этого винта к ней не подключено? Ну и плюс надо для каждого девайса прописывать что-то. А тут один раз настроил и забыл - все работает...
Удалитьв этом плане да, Вы правы
Удалить