У меня есть система Debian sid (Wheezy) (и то же самое для arch), без какой-либо среды рабочего стола (и вообще без Xorg).
Я могу смонтировать свои SD-карты, USB-накопители, внешний жесткий диск по метке в указанную директорию /media/
вручную с помощью mount
/ umount
и подходящими записями в /etc/fstab
, или автоматически во время загрузки, но это убедительно, ограничительно и недостаточно динамично для моих нужд: если я хочу, чтобы они были смонтированы /media/<LABEL>
, каждому устройству с разным <LABEL>
необходимо иметь собственную запись, и каждый <LABEL>
подкаталог должен быть также создан / удален вручную /media/
).
Итак, что это лучший способ , чтобы установить их автоматически в /media/<LABEL>
при вставке (и размонтировать их из файловой системы , как только они не отключены , независимо от того , насколько опасно для данных )?
Идеальное решение будет:
- обнаружить , когда съемный носитель вставлен в (т.е. при добавлении в
/dev/
качествеsdax
,sdbx
... поudev
) - создать каталог в
/media/
соответствии с его меткой (метка съемного носителя) - смонтировать его в каталог
/media/<LABEL>
вRW
режиме (если это поддерживает файловая система) сflush
параметром (для avfat
) - определить, был ли носитель отключен
- если затем, отключите его от файловой системы
- удалить соответствующий каталог из
/media/
(устройства должны монтироваться в синхронном режиме, очевидно, чтобы избежать потери данных при отключении в горячем режиме из-за редактирования кэширования :sync
это слишком много для vfat
съемных носителей, поэтому flush
оно было создано как компромисс , менее безопасно sync
, но менее рискованно в зависимости от срока службы -циклы флэш-воспоминаний)
Я нашел некоторую информацию о autofs
, HAL
, udisks
, udisks2
, и usbmount
т.д., но неясно , какой из них является устаревшим или предпочтительным, и в любом случае, я не понял, как настроить их легко в моей системе , чтобы сделать это, до сих пор ...
источник
sync
, демон может отключить устройство от fs, если обнаружит, что оно было отключено без потери данных. Все настольные дистрибутивы делают это. Я хочу это в терминале.halevt
. Что касается размонтирования, обычно DE ожидает, что вы извлечете устройство из файлового менеджера, прежде чем физически отключите его.fdisk -l
а затемmount
- это две команды, но хорошо, если вы хотите автоматизирован, вам придется разобратьfdisk -l
выход, а затем положить его вmount
- я такие вещи сhead
,tail
,tr
,cut
, и т.д., но профессионалы обычно делают это сawk
или, что еще лучше, ищут данные в правильном месте. По поводу удаления, по крайней мере для меня, когда я подключаюсь/mnt
, это делается автоматически. О триггере (когда вы подключаете) я понятия не имею, но, пожалуйста, сообщите нам, когда вы решите это.Ответы:
Я думаю, что вы ищете
pmount
.Если вам нужен автоматический монтаж при вставке, смотрите раздел «Автоматическое подключение USB-флешек в Debian» .
Если ваша система использует udisks2 , это предпочтительный способ реагирования на установку съемного устройства хранения. Смотрите Arch Wiki для советов по настройке Udisks.
В противном случае программа, которая реагирует на появление нового устройства, называется udev , поэтому автоматическое монтирование запускается по правилу udev . Пакет usbmount предоставляет правила udev для автоматического подключения USB-накопителей и некоторые другие. Вызов
mount
правил из udev не работает для файловых систем FUSE (таких как ntfs-3g), поэтому используйте udisks, если вам это нужно.Вы не можете автоматически размонтировать носители, когда они будут удалены, потому что причинность не работает таким образом. Носитель должен быть размонтирован перед удалением. Для носителей только для чтения вы можете отключить монтирование после удаления, хотя это может привести к путанице в некоторых приложениях, если у них есть файлы, открытые в внезапно исчезнувшей файловой системе. Для записываемых носителей, если вы отключите смонтированную файловую систему, возможно повреждение данных.
источник
flush
опция монтирования, разработанная специально для этого,vfat
позволяет избежать этих проблем: запись выполняется не после каждого блока, а как только устройство кажется неактивным. И флэш-воспоминания также значительно увеличили свои тупиковые жизненные циклы. Теперь, очевидно, пользователь должен знать, чтобы не отключать устройства во время открытия файлов или во время копирования (или вскоре после этого). Но это хороший компромисс./media/usb-*
, что не соответствует моим потребностям. Я хочу иметь возможность автоматически монтировать устройства/media/<DEV_LABEL>
сflush
параметром при их обнаружении (если это возможно при динамическом создании каталога), а также размонтировать их и/media/
автоматически удалять каталоги, если они больше не обнаруживаются. Риск, который я принимаю, зависит от меня.usbmount
больше не поддерживает NTFSjessie
: bugs.debian.org/774149Вот как я недавно это сделал, и теперь я вполне доволен этим подходом. Это для Ubuntu 12.04 + gentoo, но я думаю, что любой дистрибутив, который позволяет установить udev и автозапуск должен работать.
Предварительные условия: Вы должны установить udev + autofs.
Шаг 1)
Создайте следующий файл «/etc/udev/rules.d/90-usbsd-auto.rules» (конечно, вы можете использовать любое имя, если оно оканчивается на «.rules»). :
Что это делает: создает две символические ссылки, одну для раздела запоминающего устройства USB в «/ dev / usbdisks / <...>». Он будет использовать либо метку раздела USB-накопителя, либо имя ядра, если метка отсутствует. Вторая символическая ссылка будет ссылаться с "/ media / usb / <...>" на "/ media / autousb / <...>", это делается для поддержки автомонтирования (см. Шаг 2).
Примечание. Изначально я не использовал правила с переменными ID_FS_LABEL_ENC, поскольку, на мой взгляд, это опасно. Что произойдет, если вы подключите две USB-флешки с одинаковой этикеткой?
Но постер специально хотел использовать метку USB-диска, поэтому я соответствующим образом изменил правила.
Чтобы убедиться, что udev читает эти правила, используйте
С этим файлом правил udev все настроено для автоматического монтирования раздела USB-накопителя. Обратите внимание, что прямо сейчас устройство НЕ будет автоматически подключено (намеренно). Он будет автоматически смонтирован, как только вы используете его
Шаг 2)
Настройте autofs для автомонтирования / media / autousb / <...>: я добавил следующую строку в мой файл /etc/auto.master (для Ubuntu 12.04):
Это означает, что AutoFS отключит устройство после 60 секунд бездействия. Вы можете использовать меньше или больше, в зависимости от вашего вкуса.
Для Gentoo вы должны изменить "/etc/autofs/auto.master", чтобы имело смысл использовать
Теперь я создал "auto.usb" со следующим содержимым:
Этот auto.usb должен быть исполняемым, чтобы autofs использовал его как (bash) скрипт. Так например
Что это делает? Этот скрипт сообщит AutoFS (/ usr / sbin / automount), как монтировать раздел устройства хранения USB.
Сначала сценарий будет использовать «/ sbin / blkid», чтобы выяснить, какая файловая система находится в разделе.
Затем сценарий предоставит правильные параметры монтирования в зависимости от раздела устройства.
Примечание: я включил пример кода для файловых систем "vfat" (вероятно, наиболее распространенных для USB-флешек), "ntfs" и "xfs". Конечно, это довольно легко расширить для поддержки большего количества файловых систем.
Шаг 3) Необязательно ... Чтобы "извлечь" == размонтировать ваши флешки (или разделы на вашей флешке), создайте скрипт в / sbin / usbeject:
С помощью этого сценария вы можете использовать «sudo usbeject» для размонтирования всех подключенных разделов USB-устройств (указав автомонтированию отключить их).
Конечно, вы можете просто убедиться, что раздел нигде не используется; Затем автомонтировщик размонтирует раздел после 60 секундного ожидания ...
Настоящий трюк здесь заключается в использовании символических ссылок от "/ media / usb" на "/ media / autousb":
источник
Хорошо, это было давно, но я все еще отвечу на мой вопрос с лучшим вариантом, который я нашел на данный момент. Подводя итог: создайте
udev
правило, связанное с некоторыми сценариями (которое будет создавать / удалять каталоги и удалять / монтировать съемные устройства), и присоединять кudev
событию типа устройства =partition
.1 - Создание сценариев добавления / удаления
Сохранить следующий сценарий
storage-automount.sh
для/lib/udev/
и сделать его исполняемым (sudo chmod a+x /lib/udev/storage-automount.sh
):Сохранить следующий сценарий
storage-autounmount.sh
для/lib/udev/
и сделать его исполняемым (sudo chmod a+x /lib/udev/storage-autounmount.sh
):2 - Создание
udev
правила для присоединения этих сценариев к событиямИ, наконец, добавьте
udev
правило/etc/udev/rules.d/
, например85-storage-automount.rules
:и сделать так, чтобы у него были те же права доступа, что и у других правил в этой директории / папке
Теперь, когда вы подключите устройство хранения данных, будет создан каталог в
/media/
соответствии с именем раздела (я не помню, но я думаю, что он работает и с разделом NTFS), и ваш раздел будет подключен к нему. Это R / W для пользователей, если у вас естьplugdev
группа в вашей системе. Также устройства монтируются в синхронном режиме, чтобы ограничить риски потери данных в случае горячего отключения.Когда устройство удалено, оно размонтировано и каталог удален из
/media
Кроме того, инструмент для мониторинга
udev
событийudevadm monitor
, с параметрами, такими как--env
или--property
:Это проверено и отлично работает как на Debian, так и на Arch, но, вероятно, работает на всех дистрибутивах, которые используют
udev
.источник
udev
?Я думаю, что уже довольно поздно, но я опубликую это, если кому-то понадобится: (также мой первый ответ StackExchange)
После проверки решения во многих местах я нашел простое решение в Arch Wiki:
Ссылка на Arch Wiki .
Мы можем добавить правило udisks2, чтобы изменить каталог монтирования по умолчанию с
/run/media/$USER/
на/media/<Label>
.Добавьте следующее правило
/etc/udev/rules.d/
с именем вроде99-udisks2.rules
:ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{UDISKS_FILESYSTEM_SHARED}="1"
Тогда мы можем просто установить простой инструмент, такой как Udiskie для автомонтирования.
источник
Пожалуйста, смотрите страницу ArchWiki Udev . Вы не должны выполняться
mount
из правил Udev или из сценариев, которые выполняются правилами Udev.Однако, как показано в проекте udev-media-automount , это довольно просто сделать, вызвав модуль Systemd из правила Udev, которое затем вызывает скрипт, выполняющий монтирование. В отличие от udisks2 и других решений, udev-media-automount ориентирован на простой случай, когда вы хотите смонтировать что-либо как
root
пользователь без необходимости ожидания присутствия среды рабочего стола или «пользовательского сеанса». Похоже, это именно то, о чем просит ОП, и я нашел его функциональным и простым для понимания.источник
Я нашел способ сделать это, отредактировав файл / etc / fstab. Простая запись выглядит так:
/dev/sdb1 /media/robot/hdd1 ntfs defaults 0 0
<file system> <mount point> <type> <options> <dump> <pass>
источник
/etc/fstab
только автоматически монтироваться при загрузке.