Видео смотреть бесплатно

Смотреть русское видео

Официальный сайт panajotov 24/7/365

Смотреть видео бесплатно

assaron 23.09.2010 14:44

How-to`sАвтомонтирование и _удобное_ отмонтирование внешних дисков без DE

В этом посте я поделюсь своим опытом в настройке сабжа. В результате,
если Вы захотите, то сможете получить автомонтирование, которое ничего
не требует от пользователя, — легкая часть, и отмонтирование парой нажатий
клавиш без мышкокликанья — чуть посложнее.



Рассказано на примере Debian'а, поэтому для других систем могут быть некоторые
отличия.

Общая идея заключается в том, чтоб с помощью udev монтировать внешние диски
в /media/flash/%k, где %k — имя устройства ядра. А затем по нажатию шортката
спрашивать у пользователя, что он хочет отмонтировать.

Монтирование.

Здесь ничего сложного. Просто добавим несколько правил для udev. Для этого
в /etc/udev/rules.d добавим файл с правилами. На мой взгляд, лучше, чтоб он
выполнялся в конце, поэтому я назвал его z99_automount.rules.

Пару строчек на добавление:

ENV{ID_FS_UUID_ENC}!="ff010feb-a650-4c3b-9f9e-7b534fb58a0e",\
ENV{ID_FS_UUID_ENC}!="4978-CAB3",\
KERNEL!="sda*",\
ACTION=="add",\
ENV{DEVTYPE}=="partition",\
RUN+="/bin/mkdir -p /media/flash/%k",\
RUN+="/bin/mount /dev/%k /media/flash/%k -o umask=000"

Первые две строчки проверяют, что подключаемый раздел не относится к моему
внешнему винту — его я не считаю флешкой, для него есть свои правила. Третья
не позволяет примонтировать основной винт таким образом. Четвертая говорит сама
за себя. Пятая проверяет, что то, что сейчас обрабатывается — это раздел, а не,
скажем, весь диск. Шестая создает точку монтирования. Седьмая — монтирует с
доступом всем пользователям (umask=000).

При извлечении диска, будет происходить удаление лишнего мусора — директории
и записи в mtab'е, если не было правильного отмонтирования:

ENV{ID_FS_UUID_ENC}!="ff010feb-a650-4c3b-9f9e-7b534fb58a0e",\
ENV{ID_FS_UUID_ENC}!="4978-CAB3",\
KERNEL!="sda*",\
ACTION=="remove",\
ENV{DEVTYPE}=="partition",\
RUN+="/bin/umount /dev/%k",'
RUN+="/bin/rmdir /media/flash/%k"

Здесь, я думаю, все понятно.

Отмонтирование.

Во-первых, напишем небольшой скрипт /usr/local/bin/uumount, который будет
принимать на вход имя флешки и отмонтировать ее из /media/flash/.

1
2
3
4
5
6
7
8
#!/bin/bash
device=`echo "$1" | /bin/sed -e 's/^\.*//' -e 's#/##'`
if < -z "$device" >
then
echo "Bad arguments"
exit 1
fi
/bin/umount "/media/flash/$device"



Во второй строчке из имени девайса удаляются слеши и начальные точки, чтоб
нельзя было отмонтировать что-то левое.

Затем добавим этот скрипт в /etc/sudoers:

%floppy ALL=ALL, NOPASSWD: /usr/local/bin/uumount

Теперь пользователи из группы floppy могут использовать его без пароля.

А теперь напишем скрипт, который собственно и будет спрашивать у пользователя,
что он хочет отмонтировать:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash

FLASH_ROOT="/media/flash"
notify="notify-send"
uumount="/usr/local/bin/uumount"

flashes=(`grep -oP "^<^ >* $FLASH_ROOT/<^/ >* " /etc/mtab | awk '{ print $1; }' | sed 's#/dev/##'`)
n=${#flashes<@>}
select="dmenu -l $n"

if < $n -eq 0 >
then
$notify "Nothing to unmount"
exit 0
fi

device=$(
(
i=1
for flash in ${flashes<@>}
do
echo $i $flash: `ls $FLASH_ROOT/$flash`
i=$(($i+1))
done
) | $select | awk -F " " '{ print $2; }' | sed s/://
)

if < -z $device >
then
exit 0
fi

result=`sudo $uumount $device 2>&1 | head -1`
if < $? -eq 0 >
then
$notify $device unmounted
else
$notify $result
fi



Для уведомлений используется notify-send, для выбора — dmenu. Соответственно,
необходимо поставить пакеты libnotify-bin и suckless-tools или подобрать им
альтернативы.

Ну и в конце ставим этот скрипт на горячую клавишу.


Тэги: bash mount udev
+ 11 -
Похожие Поделиться

psyX 23.09.2010 15:04 #
+ 0 -
кто бы подсказал, как отмонтировать через udev карту памяти вытащенную из кардридера? у меня не происходит ACTION=="remove" при выдергивании карты если она смонтирована, remove происходит только при отключении всего картридера :(
assaron 23.09.2010 15:12 #
+ 0 -
ну, во-первых, неправильно отмонтировать _после_ вытаскивания
а во-вторых, попробуй запустаить udevadm monitor и вытащить карту, посмотри, происходят ли вообще какие-то события по этому поводу
psyX 23.09.2010 15:15 #
+ 0 -
происходят только действия change...

такая задумка, хочу выдергивать мотом размонтировать. смонтировать же можно с sync.
assaron 23.09.2010 15:18 #
+ 0 -
sync жутко тормозит запись

ну если change относится к нужному устройству, попробуй что-нибудь на это действие повесить
psyX 23.09.2010 15:41 #
+ 0 -
наверное это не совсем правильно.
segoon 24.09.2010 00:24 #
+ 0 -
Мягко говоря, согласен. Если на флешке (или что там у вас) стоит FAT или ext2, то о сохранности данных не может быть и речи. Нужно делать umount _до_ физического воздействия, иначе вся отложенная (или просто незаконченная) запись не будет завершена.
muhas 23.09.2010 15:11 #
+ 2 -
давно юзаю вот это (udev+скрипт)
отмонтирование через dmenu

в своем бложике писал удев правила для автомаунта и размаунта по выдергиванию(правда выдергивать не очень-то рекомендуется, но может кому и не помешает)
ACTION=="add", KERNEL=="sd<0-9>", RUN+="/usr/bin/pmount -c utf8 -w -s --umask 000 /dev/%k", OPTIONS="last_rule"
ACTION=="remove", KERNEL=="sd<0-9>", RUN+="/usr/bin/pumount -l /dev/%k"

всего две строки =) правда процесс запускаетс от рута. но su на пользователя вашего никто не отменял

Но то что это всё УДОБНОЕ... удобно это что-нить вроде hillman, udiskie, disksystemtray использовать... в общем ищущий да обращет
assaron 23.09.2010 15:17 #
+ -2 -
su на пользователя — это костыль, т.к. может быть не один пользователь, а несколько
ну и отмонтировать через pumount тоже не очень удобно, нужно брать консоль писать много букв, думать, какой же диск надо отмонтировать и т.п.
спасибо за ссылки, посмотрю
muhas 23.09.2010 15:23 #
+ 1 -
ну скрипт в топике тоже всего лишь с одним пользователем работает =) отмантировать через sudo pumount - и писать ничего не надо. в том udev правиле что я привел он применяется автоматом (у меня дома менюшка с помощью dmenu сделана). да и в посте на который я отвечал скрипту отмонтирования тоже задаются параметры ;)
assaron 23.09.2010 15:26 #
+ 0 -
скрипт в топике работает с кем угодно из группы floppy
assaron 23.09.2010 15:28 #
+ 0 -
но в принципе да, если делать pmount от рута, а от пользователя sudo pumount, тогда получится тоже самое
assaron 23.09.2010 15:31 #
+ 0 -
взял бы, и написал уже про dmenu, я бы раньше стал пользоваться, а то мне все лень было писать ;)
muhas 23.09.2010 15:44 #
+ 1 -
#!/bin/sh

LABEL=`/bin/ls -1Q /media/ | /bin/sed 's/\"/\</;s/\"/\>/' | grep -v 'smbnet' | /usr/bin/dmenu -fn '-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*' -nb '#737373' -nf '#e7e3e7' -sb '#e7e3e7' -sf '#737373' -p "Umount:"`
LABEL=`/bin/echo "$LABEL" | /bin/sed 's/\<//;s/\>//'`
RETURN=$(/usr/bin/pumount /media/"$LABEL" 2>&1)

if < ! -z "$LABEL" >; then
if < -z "$RETURN" >; then
/usr/bin/notify-send "Устройство $LABEL успешно размонтировано"
else
/usr/bin/notify-send "Ошибка размонтирования устройства!" "$RETURN"
fi
fi

exit 0


ну а так по dmenu в блог иногда пишу (достаточно уже написал), а что считаю интересным вилинуксовцем пишу тут(кстати, а что записи по тегам не работают уже? о_О нажал на "bash" в списке тегов топика а там пустая страница с надписью записи по тегу и номерами страниц - а контента нет)

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн