Как автоматически монтировать usb флэшку при вставке?
От: coder9999  
Дата: 28.09.16 05:57
Оценка:
Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.
А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?
При первом обращении к смонтированной флэшке наблюдается некоторая ощутимая (несколько секунд) задержка. С чем это может быть связано и можно ли как-то от нее избавиться?
И еще — можно ли как-то в своей программе (на С, С++) перехватить событие монтирования флэшки и получить какое-то уведомление на это событие?
Re: Как автоматически монтировать usb флэшку при вставке?
От: aik Австралия  
Дата: 28.09.16 06:26
Оценка:
Здравствуйте, coder9999, Вы писали:

C>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

C>А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?

Я сделал /etc/udev/rules.d/automount.rules (где то нагуглил):

# automounting usb flash drives
# umask is used to allow every user to write on the stick
# we use --sync in order to enable physical removing of mounted memory sticks -- this is OK for fat-based sticks
# I don't automount sda since in my system this is the internal hard drive
# depending on your hardware config, usb sticks might be other devices than sdb*
ACTION=="add",KERNEL=="sdb*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
ACTION=="remove", KERNEL=="sdb*", RUN+="/usr/bin/pumount %k"
ACTION=="add",KERNEL=="sdc*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
ACTION=="remove", KERNEL=="sdc*", RUN+="/usr/bin/pumount %k"


Ну, точнее, у меня на pmount/pumount свой враппер, который дополнительно перестартует nfs сервер, а то клиент, зараза, не отпускает маунтпоинт, но это детали.

C>При первом обращении к смонтированной флэшке наблюдается некоторая ощутимая (несколько секунд) задержка. С чем это может быть связано и можно ли как-то от нее избавиться?

C>И еще — можно ли как-то в своей программе (на С, С++) перехватить событие монтирования флэшки и получить какое-то уведомление на это событие?

Этим не интересовался... Ну раз udev может, то и ты можешь, в принципе то
Re[2]: Как автоматически монтировать usb флэшку при вставке?
От: K1RA  
Дата: 16.11.16 09:11
Оценка:
По первому вопросу можно autofs. Тут (https://linuxconfig.org/automatically-mount-usb-external-drive-with-autofs) описано хорошо.
А по второму вопросу очень хороший вариант использовать inotify.
Надо открыть каталог куда идет монтирование и ловить события. Вопрос какие события ловить. Тут я бы сделал простенькую тестовую программу,
которая выведет все события при монтировали и выбрать из полученного потока те, которые будут однозначно характеризовать факт монтированния.
Кстати тестовую программку можно и не на С делать, а взять готовый скрипт на Python-е или Perl-е. Тут (https://github.com/rvoicilas/inotify-tools/wiki) можно увидеть варианты (в конце страницы).

В известной книге The Linux Programming Interface есть пример работы с inotify: http://man7.org/tlpi/code/online/book/inotify/demo_inotify.c.html


Здравствуйте, aik, Вы писали:

aik>Здравствуйте, coder9999, Вы писали:


C>>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

C>>А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?

aik>Я сделал /etc/udev/rules.d/automount.rules (где то нагуглил):

aik>

aik># automounting usb flash drives
aik># umask is used to allow every user to write on the stick
aik># we use --sync in order to enable physical removing of mounted memory sticks -- this is OK for fat-based sticks
aik># I don't automount sda since in my system this is the internal hard drive
aik># depending on your hardware config, usb sticks might be other devices than sdb*
aik>ACTION=="add",KERNEL=="sdb*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
aik>ACTION=="remove", KERNEL=="sdb*", RUN+="/usr/bin/pumount %k"
aik>ACTION=="add",KERNEL=="sdc*", RUN+="/usr/bin/pmount --sync --umask 000 %k"
aik>ACTION=="remove", KERNEL=="sdc*", RUN+="/usr/bin/pumount %k"


aik>Ну, точнее, у меня на pmount/pumount свой враппер, который дополнительно перестартует nfs сервер, а то клиент, зараза, не отпускает маунтпоинт, но это детали.


C>>При первом обращении к смонтированной флэшке наблюдается некоторая ощутимая (несколько секунд) задержка. С чем это может быть связано и можно ли как-то от нее избавиться?

C>>И еще — можно ли как-то в своей программе (на С, С++) перехватить событие монтирования флэшки и получить какое-то уведомление на это событие?

aik>Этим не интересовался... Ну раз udev может, то и ты можешь, в принципе то
Re: Как автоматически монтировать usb флэшку при вставке?
От: rising_edge  
Дата: 16.11.16 12:10
Оценка:
Здравствуйте, coder9999, Вы писали:

C>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

C>А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?

https://packages.altlinux.org/ru/Sisyphus/srpms/polkit-sysvinit
Re: Как автоматически монтировать usb флэшку при вставке?
От: Слава  
Дата: 16.11.16 12:27
Оценка: +2
Здравствуйте, coder9999, Вы писали:

C>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.


"Готовы для десктопа" (с)

Еще и правила для многократнопокорёженного UDEV приходится зачем-то где-то как-то гуглить.

В тред призываются линуксоиды вроде netch (вот в ЖЖ, если упомянуть особым образом некоего юзера, ему придет уведомление, почему такого нет на КЫВТе?)
Re[2]: Кстати, про чукч
От: Sheridan Россия  
Дата: 23.11.16 21:15
Оценка:
Здравствуйте, Слава, Вы писали:

C>>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

С>"Готовы для десктопа" (с)

Чукча писатель?
Matrix has you...
Re: Как автоматически монтировать usb флэшку при вставке?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.11.16 21:20
Оценка:
Здравствуйте, coder9999, Вы писали:

C>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

C>А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?

Поставь винду и не парься
Маньяк Робокряк колесит по городу
Re[2]: Как автоматически монтировать usb флэшку при вставке?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.11.16 21:24
Оценка:
Здравствуйте, Слава, Вы писали:

C>>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.


С>"Готовы для десктопа" (с)


С>Еще и правила для многократнопокорёженного UDEV приходится зачем-то где-то как-то гуглить.


Это вера, старик Не насмехайся над ней, у нас статья в УК есть, можно и присесть
Маньяк Робокряк колесит по городу
Re: Как автоматически монтировать usb флэшку при вставке?
От: Sheridan Россия  
Дата: 23.11.16 21:26
Оценка:
Здравствуйте, coder9999, Вы писали:

C>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

C>А как сделать так, чтобы при вставке флэшки эта команда выполнялась сама и флэшка оказывалась уже примонтированной?
Правильно про udev говорят, но это если init. Если systemd, то там вроде есть готовые юниты, навскидку не скажу, лень лезть то покури это и это

C>При первом обращении к смонтированной флэшке наблюдается некоторая ощутимая (несколько секунд) задержка. С чем это может быть связано и можно ли как-то от нее избавиться?

Ну навскидку: подбитая флешка, нестандартная для линупса фс, большая фс с кучей мелочи в себе, длинный шнурок, порт на передней панели...
В логах чо?

C>И еще — можно ли как-то в своей программе (на С, С++) перехватить событие монтирования флэшки и получить какое-то уведомление на это событие?

Похоже тебе надо это
Matrix has you...
Re[3]: Кстати, про чукч
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.11.16 21:39
Оценка: +1 :))
Здравствуйте, Sheridan, Вы писали:

C>>>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

С>>"Готовы для десктопа" (с)

S>Чукча писатель?


Думаю читатель. Потому что знает, что если в чистой системе без DE просто ничего не работает, то в разных дистрах с разными DE возникают варианты: работает, не работает, работает в зависимости от фазы луны. С учетом количества дистров и DE и их версий обычный пользователь остается без шансов найти какую-то информацию, как заставить это работать
Маньяк Робокряк колесит по городу
Re[4]: Кстати, про чукч
От: Sheridan Россия  
Дата: 24.11.16 04:35
Оценка:
Здравствуйте, Marty, Вы писали:

C>>>>Есть линукс, чистая консоль без какого-либо Desktop Environment. При вставке флэшки приходится делать команду вида mount /dev/sdc /media/flash.

С>>>"Готовы для десктопа" (с)
S>>Чукча писатель?
M>Думаю читатель. Потому что знает, что если в чистой системе без DE просто ничего не работает, то в разных дистрах с разными DE возникают варианты: работает, не работает, работает в зависимости от фазы луны. С учетом количества дистров и DE и их версий обычный пользователь остается без шансов найти какую-то информацию, как заставить это работать

Ну как бы я надеюсь DE и WM ты тоже не путаешь...
Matrix has you...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.