USB 隨身碟自動mount - BBS
By Kelly
at 2007-12-09T14:14
at 2007-12-09T14:14
Table of Contents
※ 引述《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 <-- 這個我就不知道怎麼解決
--
: ※ 引述《[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 <-- 這個我就不知道怎麼解決
--
Tags:
BBS
All Comments
Related Posts
lighttpd with php 安裝
By Gary
at 2007-12-07T20:32
at 2007-12-07T20:32
安裝 Apache+PHP+MySQL
By Margaret
at 2007-12-07T17:03
at 2007-12-07T17:03
ssh 進去後馬上斷線
By John
at 2007-12-07T16:42
at 2007-12-07T16:42
想請問一下ipfw設定, 有關我這樣怎麼掛了QQ
By Quanna
at 2007-12-07T16:33
at 2007-12-07T16:33
SATA on BSD
By Megan
at 2007-12-07T11:36
at 2007-12-07T11:36