| indeviral |
|
|
Темы:
38
Сообщения:
3165
Участник с: 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
Сообщения:
1755
Участник с: 29 февраля 2012
|
ind.indeviralБывают флэшки без таблицы разделов, то есть с файловой системой прямо на /dev/sdb. А для всяких PDA это особенно часто. Такая флэшка не смонтируется этим правилом. |
| Natrio |
|
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
cornerЭто я посоветовал. Посредник, к сожалению, не лишний – udev убивает запущенные из него процессы (вместе с потомками!) по истечении короткого таймаута, а монтирование может работать довольно долго. Поэтому запуск любых длительных и тяжелых процедур из udev требует посредника, и systemctl из них самый удобный и очевидный. |
| domov0y |
|
|
Темы:
5
Сообщения:
819
Участник с: 09 июля 2011
|
К сожалению такое автомонтирование не отменяет того факта, что уговорить файловый менеджер корректно работать без udisks (или как там его) это нетривиальная задача с вырезанием кода и обманом пкгбилда. хм... "счастливым владельцам" stm32*discovery скорее всего придется проверить порядок правил удева. А то есть шанс что сначала удев сначала попытается примонтировать stlink v1.
Да пребудет с вами знание ip адреса
|
| Natrio |
|
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
akoropСовершенно верно. А если исправить это правило, то некоторые флешки (как неправильно отформатированные, как и некоторые очень специфически работающие), показывающие ФС и на разделе, и на диске, будут монтироваться неправильно. В моём скрипте (который mnt) есть специальный код, который выкидывает из списка монтируемых устройств, к примеру, /dev/sdb , если на нём обнаружены разделы sdb1 и т.д. Бывают ещё MMC/SD-карточки /dev/mmcblk* , MemoryStick/M2 /deb/mspblk* и некоторые другие, менее распространённые типы флешек. Соответственно, разделы на них именуются mmcblk0p1, mspblk0p2 и т.д.. |
| indeviral |
|
|
Темы:
38
Сообщения:
3165
Участник с: 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 |
|
|
Темы:
47
Сообщения:
4763
Участник с: 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 |
|
|
Темы:
38
Сообщения:
3165
Участник с: 10 августа 2013
|
сори не учёл и не проверил(( В дальнейшем будем обязательно использовать lsblk
Ошибки в тексте-неповторимый стиль автора©
|
| akorop |
|
|
Темы:
111
Сообщения:
1755
Участник с: 29 февраля 2012
|
NatrioЭто годится при ручном монтировании, но, к сожалению, это не катит при автомонитировании: sdb может (и, наверно, должен) появиться раньше, чем sdb1, так что в момент появления sdb анализ отсутствия sdb1 ничем не поможет. Поэтому для автомонтирования я не нашёл ничего лучше, чем свои флэшки тщательно почистить от мусора в MBR, ну а с чужими - как повезёт. Неприятный глюк, конечно, эта ложная файловая система на устройстве с разбивкой.akoropСовершенно верно. А если исправить это правило, то некоторые флешки (как неправильно отформатированные, как и некоторые очень специфически работающие), показывающие ФС и на разделе, и на диске, будут монтироваться неправильно. В моём скрипте (который mnt) есть специальный код, который выкидывает из списка монтируемых устройств, к примеру, /dev/sdb , если на нём обнаружены разделы sdb1 и т.д. |