indeviral |
|
Темы:
39
Сообщения:
3204
Участник с: 10 августа 2013
|
В интернете полно информации по этому поводу, однако я как то находил всё не то что надо...(может просто плохо искал) Я напишу очень компактно каждый пункт можно расписывать очень долго: 1) Написание компактного скрипта который получит параметр от юнита (сервиса) $ automount.sh #!/bin/bash # format_dev=`lsblk -dnro FSTYPE "/dev/$1"` option_dev="/dev/"$1" /media/usb-"$1"" # if [ -n "$format_dev" ] then mkdir /media/usb-$1 # sudo -u admin notify-send "udev" "/dev/$1($format_dev)" fi # if [ -z $format_dev ] then systemctl stop mount@$1 elif [[ $format_dev == ntfs ]] then mount $option_dev -o utf8 elif [[ $format_dev == vfat ]] then mount $option_dev elif [[ $format_dev == exfat ]] then mount $option_dev else mount $option_dev fi # 2) Написание юнита (сервиса) получающего параметр от udevа. $ mount@.service [Unit] Description=mount_%I [Service] Type=forking ExecStart=/patch/automount.sh %I [Install] WantedBy=multi-user.target 3) Написание правила udeva передающего параметр юниту (сервису). $ 20-automount.rules ACTION=="add" KERNEL=="sd[b-z][0-9]" RUN+="/bin/systemctl start mount@%k" ACTION=="change" KERNEL=="sd[b-z]" RUN+="/bin/systemctl start mount@%k" ACTION=="add" KERNEL=="mmcblk[0-9]" RUN+="/bin/systemctl start mount@%k" ACTION=="remove" KERNEL=="sd[b-z]" RUN+="/bin/umount /dev/%k" RUN+="/bin/rmdir /media/usb-%k" ACTION=="remove" KERNEL=="sd[b-z][0-9]" RUN+="/bin/umount /dev/%k" RUN+="/bin/rmdir /media/usb-%k" ACTION=="remove" KERNEL=="mmcblk[0-9]" RUN+="/bin/umount /dev/%k" RUN+="/bin/rmdir /media/usb-%k" Может кому нить пригодиться) и хотелось бы узнать минусы...
Ошибки в тексте-неповторимый стиль автора©
|
corner |
|
Темы:
6
Сообщения:
773
Участник с: 21 июля 2011
|
А вам не кажется лишним посредник в виде systemctl? |
akorop |
|
Темы:
111
Сообщения:
1756
Участник с: 29 февраля 2012
|
ind.indeviralБывают флэшки без таблицы разделов, то есть с файловой системой прямо на /dev/sdb. А для всяких PDA это особенно часто. Такая флэшка не смонтируется этим правилом. |
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
cornerЭто я посоветовал. Посредник, к сожалению, не лишний – udev убивает запущенные из него процессы (вместе с потомками!) по истечении короткого таймаута, а монтирование может работать довольно долго. Поэтому запуск любых длительных и тяжелых процедур из udev требует посредника, и systemctl из них самый удобный и очевидный. |
domov0y |
|
Темы:
5
Сообщения:
819
Участник с: 09 июля 2011
|
К сожалению такое автомонтирование не отменяет того факта, что уговорить файловый менеджер корректно работать без udisks (или как там его) это нетривиальная задача с вырезанием кода и обманом пкгбилда. хм... "счастливым владельцам" stm32*discovery скорее всего придется проверить порядок правил удева. А то есть шанс что сначала удев сначала попытается примонтировать stlink v1.
Да пребудет с вами знание ip адреса
|
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
akoropСовершенно верно. А если исправить это правило, то некоторые флешки (как неправильно отформатированные, как и некоторые очень специфически работающие), показывающие ФС и на разделе, и на диске, будут монтироваться неправильно. В моём скрипте (который mnt) есть специальный код, который выкидывает из списка монтируемых устройств, к примеру, /dev/sdb , если на нём обнаружены разделы sdb1 и т.д. Бывают ещё MMC/SD-карточки /dev/mmcblk* , MemoryStick/M2 /deb/mspblk* и некоторые другие, менее распространённые типы флешек. Соответственно, разделы на них именуются mmcblk0p1, mspblk0p2 и т.д.. |
indeviral |
|
Темы:
39
Сообщения:
3204
Участник с: 10 августа 2013
|
ACTION=="add" KERNEL=="sd[b-z]" RUN+="systemctl start mount@%k" #!/bin/bash # # Ошибка: format_dev=`blkid /dev/"$1" | awk '{print $3}' | cut -c 7- | sed 's/.$//'` format_dev=`lsblk -dnro FSTYPE "/dev/$1" ` option_dev="/dev/"$1" /media/usb-"$1"" # if [[ -z $format_dev ]] then systemctl stop mount@$1 else mount $option_dev fi как то так, для всего остального аналогично. p.s. Natrio ещё раз спасибо
Ошибки в тексте-неповторимый стиль автора©
|
Natrio |
|
Темы:
48
Сообщения:
4771
Участник с: 08 января 2011
|
ind.indeviralК сожалению, этот винегрет из blkid, awk, sed и cut работает совсем не так, как вы рассчитываете, и из-за изменяющегося порядка вывода blkid, он как правило, выдаёт вместо типа ФС чёрт-те что: $ mls /dev/sdb 3.7G /dev/sdb1 3.7G f2fs k4f2 $ blkid /dev/sdb /dev/sdb: PTUUID="561bf0be" PTTYPE="dos" $ blkid /dev/sdb | awk '{print $3}' | cut -c 7- | sed 's/.$//' ="dos $ blkid /dev/sdb1 /dev/sdb1: LABEL="k4f2" UUID="b6fac8e1-79e2-4e6b-b2e9-1b7d740e144a" TYPE="f2fs" PARTUUID="561bf0be-01" $ blkid /dev/sdb1 | awk '{print $3}' | cut -c 7- | sed 's/.$//' b6fac8e1-79e2-4e6b-b2e9-1b7d740e144a А я ведь советовал использовать lsblk – он гораздо надёжнее, проще и удобнее при разборе вывода. В моём скрипте есть вот такая строчка: TYPE=`lsblk -dnro FSTYPE "$DEV" 2>&-` $ lsblk -dnro FSTYPE /dev/sdb $ lsblk -dnro FSTYPE /dev/sdb1 f2fs |
indeviral |
|
Темы:
39
Сообщения:
3204
Участник с: 10 августа 2013
|
сори не учёл и не проверил(( В дальнейшем будем обязательно использовать lsblk
Ошибки в тексте-неповторимый стиль автора©
|
akorop |
|
Темы:
111
Сообщения:
1756
Участник с: 29 февраля 2012
|
NatrioЭто годится при ручном монтировании, но, к сожалению, это не катит при автомонитировании: sdb может (и, наверно, должен) появиться раньше, чем sdb1, так что в момент появления sdb анализ отсутствия sdb1 ничем не поможет. Поэтому для автомонтирования я не нашёл ничего лучше, чем свои флэшки тщательно почистить от мусора в MBR, ну а с чужими - как повезёт. Неприятный глюк, конечно, эта ложная файловая система на устройстве с разбивкой.akoropСовершенно верно. А если исправить это правило, то некоторые флешки (как неправильно отформатированные, как и некоторые очень специфически работающие), показывающие ФС и на разделе, и на диске, будут монтироваться неправильно. В моём скрипте (который mnt) есть специальный код, который выкидывает из списка монтируемых устройств, к примеру, /dev/sdb , если на нём обнаружены разделы sdb1 и т.д. |