作者psilotum (好小孩)
看板FreeBSD
标题Re: [help]USB 随身碟自动mount
时间Sun Dec 9 14:14:38 2007
※ 引述《psilotum (好小孩)》之铭言:
: ※ 引述《[email protected] (淡)》之铭言:
: : 应该是要找 usbd 之类的 daemon 下手
: : 试试看把下列加到 /etc/rc.conf
: : usbd_enable="YES"
: : 然後参考 usbd.conf(5)
: : 再依据你的 USB 随身碟相关资讯(如 device id/name) 来修改 /etc/usbd.conf
: : 最後,打 /etc/rc.d/usbd start 应该就可以了
: : ==
: : 以上是不负责任发言
: 最近想了一下这个问题,我想用 devd 来作业
: 我写了一个简单的 shell script:
: automount:
: ###############################################
: #!/bin/sh
: VENDOR=`devinfo -v | grep umass0 | awk -F' ' '{print $3}' | sed -e 's/vendor=//g'`
: PRIORITY=20
: MOUNT_POINT=/media/flashdisk
: DEVD_CONF=/etc/devd.conf
: DEV_NODE=/dev/da0s1
我把这个地方改了一下
DEV_NODE_CHK=`dmesg | tail -20 | grep "byte sectors" | awk -F':' '{ print $1 }'`
DEV_NODE=`ls /dev | grep $DEV_NODE_CHK | tail -1`
因为有些多合一读卡机之类的会把一些空的插槽也读进去 da0, da1, da2, da3, da4
之类的,但是如果有插上卡的,才会显示有多少 byte sectors
其他的会显示 NOT READY
因此 $DEV_NODE_CHK 这个地方先去读 dmesg 最後 20 行,确认有插上卡的装置,然後把
对应於 /dev/da0 (也许是 1, 2, 3, 或 4) 这部份抓出来
接下来去 list /dev/ ,加 DEV_NODE 这个目的其实是个笨方法
因为有些卡或随身碟并不是用 da0s1 ,而是采用 da0 ,所以这样就可以正确喂给下面的
devd.conf
不过最好的方式可能是要判断一个 filesystem 的 guid/uuid ,据说是 linux 上面的作法
我没有用过 linux ,不知道实做的方式如何
我想如果能判断档案系统,这样不管插上什麽东西都能正确 mount XD
我有想到一个笨方法
if
mount $dev_node $mount_point
elif
mount_msdosfs ...
elif
mount_ntfs ...
elif
mount_ext2fs ...
else
...
fi
要不然就是从 GEOM 下手,这我就不知道怎麽做比较好
* 另外网路上有人用 amd 的方法来自动 mount
不过感觉比较麻烦....
: # check the existence of mount point
: if [ -d $MOUNT_POINT ] ; then
: echo ""; # do nothing
: else
: mkdir -p $MOUNT_POINT
: fi
: # before modifying the /etc/devd.conf, backup original first!
: cp $DEVD_CONF $DEVD_CONF.bak
: cat >> $DEVD_CONF << _EOF
: attach $PRIORITY {
: device-name "umass0";
: match "vendor" "$VENDOR";
: action "sleep 2 ; \\
: sh /etc/rc.d/devfs restart ; \\
: /sbin/mount_msdosfs -L zh_TW.Big5 -D cp950 $DEV_NODE $MOUNT_POINT" ;
: };
: _EOF
: # after add devd rules, mount it!
: /sbin/mount_msdosfs -L zh_TW.Big5 -D cp950 $DEV_NODE $MOUNT_POINT
: # NOTE: before you mount msdosfs filesystem, you must make sure
: # you have options MSDOSFS and MSDOSFS_ICONV in your kernel config,
: # otherwise you have to load kernel module as following:
: # kldload msdosfs
: # kldload msdosfs_iconv
: # restart devd
: /etc/rc.d/devd restart
: ################ <END OF AUTOMOUNT> ##################################
: 本来我是想把它加入 /etc/devd.conf
: 写成
: attach $PRIORITY {
: device-name "umass0" ;
: action "$PATH/TO/automount";
: }
: 但是 priority 我不知道怎麽下比较好,因为 man devd.conf 里头有说
: 如果同样的情形下, devd 会先去执行数字比较大的
: 所以我就用以下的方法解决
: 1. 第一次使用(插入这台电脑)的随身碟,先下 automount 指令,让
: automount 把设定写入 /etc/devd.conf,并且自动 mount 上去
: 2. 之後只要这支随身碟插上去,就可以自动挂载
: BUG:
: 1. 如果随身碟的 device node 不是 /dev/da0s1 ,我没有加入自动判断的部份
: 这点就要自行修改
: 2. 同时很多随身碟插入,可能只有一只会正常 mount <-- 这个我就不知道怎麽解决
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.82.16