автоматическое монтирование usb flash

From
Eugene Grosbein (2:5006/1)
To
All
Date
2006-11-07T23:59:20Z
Area
RU.UNIX.BSD
Reply-To: eugen@grosbein.pp.ru

Привет!

ftp://www.kuzbass.ru/pub/freebsd/attach-umass-0.1.tgz

shell-cкрипт, автоматически монтирующий USB Flash при втыкании флешки
и отмонтирущий при выдергивании, для FreeBSD. В текущем варианте заточен
под наиболее распространенный случай: на флешке в первом разделе
лежит FAT. В качестве foolproof-меры флешка по дефолту монтируется в r/o.
Поэтому отмонтируется при выдергивании через umount -f (все равно
она уже выдернута). Требует запущенного devd (по дефолту в шестерке),
поэтому в четверке работать не будет, под 5.x не тестировался,
но работать должен если devd там живой. Аналогично на 7.0-CURRENT.
Предполагает использование USB посредством CAM (по дефолту),
то есть когда доступ к umass(4) идет через da(4).

Установка:

tar xvzf attach-umass-0.1.tgz
cd attach-umass
make install

Удаление: make deinstall в том же каталоге.

После распаковки и перед инсталляцией можно заглянуть
в attach-umass, там в начале скрипта есть параметры:

DEV=/dev                                                                       

BASE=/usb                                                                      

USERGROUP=owner:group                                                          

MODE=0755

DEV определяет, куда смонтирована devfs,
BASE - где создавать mount points для флешей (скрипт создат $BASE,
если не её существует)
USERGROUP и MODE - права доступа для новых mount points,
fstab не используется.
 
Еще можно посмотреть/поправить по вкусу функции do_mount/do_umount
там же, они вызываются для собственно монтирования/демонтирования,
им первым аргументом передается имя устройства в виде /dev/daN,
вторым полное имя точки монтирования (возможны пробелы в имени!).
И там же функции notify_success и notify_failure, они вызываются
при успешном/неуспешном монтировании/отмонтировании и получают
аргументом строку do_mount/do_umount соответсвенно. По дефолту
выдают один system bell при успехе и два при неуспехе, можно тут
вставить проигрывание мелодии через sox/mpg123/mplayer/whatever.

Точка монтирования это подкаталог в $BASE с именем в формате:
название-daN, при этом "название" - это как устройство само себя называет.
Например:

$ ls -l /usb
total 52
drwxr-xr-x  1 eugen  all  16384  1 янв  1980 EM732X MP3 Player 1.00-da1
drwxr-xr-x  1 eugen  all   4096  1 янв  1980 Generic USB Flash Disk 0.00-da0
drwxr-xr-x  1 eugen  all  16384  1 янв  1980 Sony Sony Camcorder 5.00-da2

При выдергивании флешки каталог размонтируется и удаляется.
Еще внутри $BASE при монтировании создаются файлы вида .umassN,
туда для последующего успешного размонтирования пишется соответствующие
имя девайса и точки монтирования (после выдергивания определить соответствие
umass/da будет уже крайне затруднительно без такого файл), они тоже
удаляются после размонтирования.

Приветствуются комментарии, особенно интересно узнать, насколько
корректно работает скрипт на машинах, использующих SCSI HDD,
то есть у которых есть девайсы daN помимо флешей. Теоретически
работать должно и там ;-)

Eugene
-- 
Прекрасны тонко отшлифованная драгоценность; победитель, раненный в бою;
слон во время течки; река, высыхающая зимой; луна на исходе; юная женщина,
изнуренная наслаждением, и даятель, отдавший все нищим. (Дхарма)
--- slrn/0.9.8.0 (FreeBSD)
 * Origin: Svyaz Service JSC (2:5006/1@fidonet)
SEEN-BY: 50/12 400/814 450/159 1024 461/43 132 640 469/999 4616/3 4625/8
SEEN-BY: 4641/444 5000/76 5000 5006/1 8 9 10 14 15 16 17 5007/1 5010/70
SEEN-BY: 5011/13 5012/46 5015/28 5019/31 5020/18 175 194 400 545 982 1057 1909
SEEN-BY: 5020/1922 2238 2395 2871 4441 5021/29 5025/3 5026/14 45 5027/12
SEEN-BY: 5030/1080 1957 5034/10 13 5035/3 38 5036/1 5045/7 5049/1 5051/15
SEEN-BY: 5054/1 4 8 9 11 28 35 36 37 45 63 66 67 70 75 84 85 5059/9 5060/88
SEEN-BY: 5061/15 5062/10 5063/3 5064/7 5066/18 5074/9 5075/5 5076/1 5077/70
SEEN-BY: 5080/1003 5084/9 5085/13 5095/20 5096/18 6001/3 10
PATH: 5006/1 5020/400 545 5054/1 37