[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: опции монтирования для произвольной флешки



On Wed, 26 Mar 2014, Artem Chuprina wrote:

Хочется аналогичной по функциональности схемы, но способной справиться с
файловой системой, расположенной не только на sd?1, но и на sd? (тут,
впрочем, я, похоже, понял, что делать), и позволяющее ходить к
соответствующей файловой системе по пути, не зависящему от ее типа, но с
нужными опциями монтирования.  Краевое условие: с компьютером я общаюсь
словами, и интересующий компьютер может быть не только ноутбуком, за
которым я сейчас сижу, но и безмониторным сервером на антресолях, на
который я зашел по ssh.  Поэтому гуевые варианты отпадают.

Можете что-нибудь посоветовать?


  У меня udev + autofs настроены. На самом деле решение
  притырено у Stanislav Maslovski, но раз он не пишет,
  расскажу как у меня работает.

  в /etc/udev/rules.d/95-local.rules
---------------------------------------------------------------------
# automount
SUBSYSTEM=="block", \
        ACTION=="add|remove", \
        ENV{DEVTYPE}=="partition|disk", \
        ENV{ID_BUS}=="usb|scsi", \
        ENV{ID_FS_USAGE}=="filesystem", \
        RUN+="/usr/local/sbin/autofs_udev"

  в /usr/local/sbin/autofs_udev
---------------------------------------------------------------------
#!/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
    exit
  fi
fi

MEDIA_NAME=${ID_FS_UUID_ENC}
case ${ID_FS_UUID_ENC} in
B6A1-A66A)
        MEDIA_NAME="Kingston"
        ;;
CAC1-3CDD)
        MEDIA_NAME="JetFlash"
        ;;
46CA8751CA873C65)
        MEDIA_NAME="SilverScreen"
        ;;
E6107A31107A08B7)
        MEDIA_NAME="AGEStar"
        ;;
c0710ba1-19dd-4ef8-b7bb-e5e953102472)
        MEDIA_NAME="ZalmanHE135"
        ;;
"Secure Tool")
        ACTION="remove"
        ID_FS_UUID_ENC=""
        ;;
esac
echo " MEDIA_NAME= $MEDIA_NAME" >> /tmp/autofs_udev.out

case ${ACTION} in
add)
        ln -sfn "/mnt/autofs/udev/${ID_FS_UUID_ENC}" "/media/${MEDIA_NAME}"
        ;;
remove)
        rm -f "/media/${MEDIA_NAME}"
        ;;
esac

echo " " >> /tmp/autofs_udev.out ---------------------------------------------------------------------
  написано давно, но так и работает с отладочной печатью
  т.к. udev имеет привычку  менять формат вывода.

  В /etc/auto.udev
---------------------------------------------------------------------
#!/bin/sh
# use autofs with UDEV for mounting USB removable media
# see /etc/udev/rules.d/95-local.rules
# based on script written by Stanislav.Maslovski@gmail.com

echo " `date +%c`, arg= $*" >> /tmp/auto_udev.out
echo " UID= $UID, GID= $GID" >> /tmp/auto_udev.out

# the name of mount point _must_ be UUID or LABEL of the device
name=$1
if [ -z "$name" ]; then
    echo " name= $name is not the UUID or LABEL. Stop!"
    exit
fi
device=`blkid -U $name`
if [ -z "$device" ]; then
  #  device=`blkid | grep -iv UUID | tail -1 | cut -d: -f1`
  device=`blkid -L "$name"`
  if [ -z "$device" ]; then
    echo " name= $name is not the UUID or LABEL. Stop!"
    exit
  fi
fi

fstype=`blkid -p -u filesystem $device | \
        sed -r 's|^.* TYPE="([^"]+)".*$|\1|'`
echo " name= $name, device= $device, fstype= $fstype" >> /tmp/auto_udev.out

# taken from /etc/fstab (keep noauto,user for compatibility)
case ${fstype} in
     vfat)
        fsopts="rw,noauto,user,async,noatime,noexec"
        fsopts="${fsopts},uid=nefedov,gid=nefedov,dmask=022,fmask=133"
        ;;
     ntfs) # ntfs-3g actually
        fsopts="rw,noauto,user,async,silent,noatime,locale=ru_RU.UTF-8"
        fsopts="${fsopts},uid=nefedov,gid=nefedov,dmask=022,fmask=133"
        ;;
     ext2)
        fsopts="rw,noauto,user,defaults,noatime,check=none"
        ;;
     ext3)
        fsopts="rw,noauto,user,defaults,noatime,check=none,data=journal"
        ;;
     iso9660)
        fsopts="ro,noauto,user"
        ;;
     *)
        fsopts="noauto,user"
esac

echo "-fstype=${fstype},${fsopts} :${device}"

echo " -fstype=${fstype},${fsopts} :${device} " >> /tmp/auto_udev.out
echo " " >> /tmp/auto_udev.out
---------------------------------------------------------------------

 Несколько проверок как работает:
 1) файловая система без всяких партиций:
 > mkdosfs -I -F 32 -S 512 -n TEST /dev/sdb

 Thu Mar 27 10:09:22 2014, ACTION= add
 DEVNAME= /dev/sdb, ID_BUS= usb
 ID_FS_UUID_ENC= 0286-EB96
 MEDIA_NAME= 0286-EB96

 > touch /media/0286-EB96/test.txt
 > ls /media/0286-EB96/
test.txt

2) две партиции
 > fdisk -lu /dev/sdb
Device Boot Start End Blocks Id System /dev/sdb1 63 2000062 1004031 83 Linux
/dev/sdb2         2000063     3919859      955867    b  FAT32

 Thu Mar 27 10:33:20 2014, ACTION= add
 DEVNAME= /dev/sdb1, ID_BUS= usb
 ID_FS_UUID_ENC= 239b80a3-fbc6-466f-a0b6-10a040d42656
 MEDIA_NAME= 239b80a3-fbc6-466f-a0b6-10a040d42656

 Thu Mar 27 10:33:20 2014, ACTION= add
 DEVNAME= /dev/sdb2, ID_BUS= usb
 ID_FS_UUID_ENC= 5D45-8B58
 MEDIA_NAME= 5D45-8B58

ls /media/239b80a3-fbc6-466f-a0b6-10a040d42656/
lost+found  test.ext2
ls /media/5D45-8B58/
test.fat32

 3) cat debian-7.0.0-amd64-netinst.iso > /dev/sdb

 Thu Mar 27 10:40:34 2014, ACTION= add
 DEVNAME= /dev/sdb, ID_BUS= usb
 ID_FS_UUID_ENC=
 ID_FS_LABEL_ENC= Debian\x207.0.0\x20amd64\x201
 MEDIA_NAME= Debian 7.0.0 amd64 1

 Thu Mar 27 10:40:35 2014, ACTION= add
 DEVNAME= /dev/sdb2, ID_BUS= usb
 ID_FS_UUID_ENC= EABC-7C44
 MEDIA_NAME= EABC-7C44

 Thu Mar 27 10:40:35 2014, ACTION= add
 DEVNAME= /dev/sdb1, ID_BUS= usb
 ID_FS_UUID_ENC=
 ID_FS_LABEL_ENC= Debian\x207.0.0\x20amd64\x201
 MEDIA_NAME= Debian 7.0.0 amd64 1

ls /media/EABC-7C44
efi
ls /media/Debian\ 7.0.0\ amd64\ 1
autorun.inf  doc        install      pool                 README.txt
boot         efi        install.amd  README.html          setup.exe
css          firmware   isolinux     README.mirrors.html  tools
debian       g2ldr      md5sum.txt   README.mirrors.txt   win32-loader.ini
dists        g2ldr.mbr  pics         README.source

---------------------------------------------------------------------
 В общем работает как то.

Успехов.
Ю.

Reply to: