Этот вопрос похож, но как бы противоположен тому, что я хочу. Я хочу, чтобы внешние USB-накопители автоматически монтировались при загрузке, чтобы никто не входил в подобные места /media/<label>
.
Я не хочу вводить все данные в fstab, отчасти потому, что это утомительно и раздражающе, но в основном потому, что я не могу предсказать, что я подключу к нему или как изменятся разделы в будущем.
Я хочу, чтобы диски были доступны для таких вещей, как MPD , и были доступны при входе в систему по SSH. gnome-mount
кажется, монтирует вещи только когда вы локально вошли в графический сеанс Gnome.
/usr/local/sbin/udev-automounter.sh mount %k
должно быть/usr/local/sbin/udev-automounter.sh %k
. извиняюсь.\x20
's'. так что это не красиво, но это будет работать. udev не очень хорошо обрабатывает метки с пробелами, но есть еще одна опция, в которой вместо подчеркивания используются подчеркивания\x20
(так что, по крайней мере, это выглядит красиво). Похоже, космическая обработка должна идти в сценарии оболочки.Ответы:
vol_id
команды.vol_id
был замененblkid
. Чтобы исправить скрипт, замените «vol_id» на «blkid -o udev» вudev-auto-mount.sh
скрипте.Некоторое время я бился головой об этом, и я думаю, что нашел рабочее решение. Это разработано и протестировано в системе на основе Debian, поэтому оно должно работать в Ubuntu. Я укажу на предположения, которые он делает, чтобы его можно было адаптировать и к другим системам.
/media/LABEL
каталог для монтирования устройства.gksudo
или подобное.Я не проверял это при загрузке системы, но единственная причина, по которой я вижу, что он может не работать, - это попытка подключить USB-накопитель до того, как система будет готова к монтированию. Если это так, вам, вероятно, понадобится еще одна настройка скрипта монтирования. (Я проверяю с ServerFault, чтобы увидеть, есть ли какой-нибудь совет, но там нет большого интереса к нему.)
Тогда к этому.
UDEV ссылки:
Фон (UDEV? Whuzzat?)
UDEV - это система горячего подключения ядра. Это то, что автоматически настраивает правильные устройства и символические ссылки на устройства (например
/dev/disk/by-label/<LABEL>
), как во время загрузки, так и для устройств, добавляемых во время работы системы.D-Bus и HAL используются для отправки аппаратных событий слушателям, таким как Desktop Environments. Поэтому, когда вы входите в GNOME и вставляете компакт-диск или подключаете USB-накопитель, это событие следует следующей цепочке:
И до того, ваш диск будет установлен. Но в безголовой системе нам не нужно входить в систему, чтобы воспользоваться преимуществами автоматического монтирования.
Правила Удев
Поскольку UDEV позволяет нам писать правила и запускать программы при вставке устройства, это идеальный выбор. Мы собираемся воспользоваться существующими правилами Debian / Ubuntu, позволить им настроить
/dev/disk/by-label/<LABEL>
символическую ссылку для нас и добавить другое правило, которое смонтирует устройство для нас.Правила UDEV хранятся в
/etc/udev/rules.d
(и/lib/udev/rules.d
в Кармическом) и обрабатываются в числовом порядке. Любой файл, не начинающийся с цифры, обрабатывается после нумерованных файлов. В моей системе правила HAL находятся в файле, который называется90-hal.rules
, поэтому я помещаю свои правила89-local.rules
так, чтобы они обрабатывались до того, как они попадут в HAL. Прежде всего, вы должны убедиться, что эти правила применяются после60-persistent-storage.rules
.local.rules
может быть достаточно хорошПоместите это в ваш новый файл правил:
Убедитесь, что после пробела нет пробелов
\
, простоnewline
(\n
).Перейдите
SUBSYSTEMS=="usb"
наSUBSYSTEMS=="usb|ieee1394"
поддержку Firewire.Если вы хотите, чтобы устройство всегда принадлежало определенному пользователю, добавьте
OWNER="username"
предложение. Если вам просто нужны файлы, принадлежащие конкретному пользователю, вместо этого настройте скрипт монтирования.Чтение правила
Это добавляет программу для запуска в список программ устройства для запуска. Он идентифицирует устройства USB-разделов
<LABEL>
, а затем передает эту информацию в скрипт, который выполняет монтирование. В частности, это правило соответствует:ENV{ID_FS_LABEL_ENC}=="?*"
- переменная окружения, установленная более ранним системным правилом. Не существует для не файловых систем, поэтому мы проверяем это. Мы на самом деле хотим использоватьID_FS_LABEL
точку монтирования, но я не убедил UDEV избежать ее для меня, поэтому мы позволим сценарию монтирования обработать это.Эта и другие переменные окружения получаются с помощью
vol_id
команды udev ( устарело ). Это удобный инструмент, чтобы увидеть приятные быстрые детали на разделе:ACTION=="add"
- толькоadd
события матча ...SUBSYSTEMS=="usb"
- сопоставлять только устройства, которые находятся на шине USB. Мы используемSUBSYSTEMS
здесь, потому что это соответствует родителям нашего устройства; интересующее нас устройство на самом деле будет SUBSYSTEM == "scsi". Сопоставление с родительским USB-устройством позволяет избежать добавления нашей программы во внутренние накопители.RUN+="..."
- не совпадение, а действие: добавьте эту программу в список программ для запуска. В аргументах программы%k
расширяется до имени устройства (напримерsdc1
, нет/dev/sdc1
) и$env{FOO}
получает содержимое переменной среды FOO.Тестирование правила
Первая ссылочная ссылка (выше) - отличное руководство по UDEV, но оно немного устарело. Программы, которые он запускает для проверки ваших правил (
udevtest
в частности), были замененыudevadm
универсальной утилитой.После того, как вы добавили правило, подключите ваше устройство. Дайте ему несколько секунд, затем проверьте, на какое устройство ему назначено:
Если ваш съемный диск содержит
label_Baz
, это на устройствеsdc1
. Запустите это и посмотрите на вывод в конце:Ищите имя скрипта из нашего
RUN+=
правила в последних нескольких строках (в этом примере третье снизу). Вы можете увидеть аргументы, которые будут использоваться для этого устройства. Вы можете запустить эту команду сейчас, чтобы проверить правильность аргументов; если он работает в командной строке, он должен работать автоматически при вставке устройства.Вы также можете отслеживать события UDEV в режиме реального времени: run
sudo udevadm monitor
(см.man udevadm
Подробности о коммутаторах). Затем просто подключите новое устройство и наблюдайте за прокруткой событий. (Вероятно, излишне, если вы не в мелочах ...)Перезагрузка правил
После того, как вы убедились, что правило читается правильно, вам нужно сказать UDEV перезагрузить его правила, чтобы новое вступило в силу. Используйте любой из этих методов (если первый не работает, второй должен ... но попробуйте первый первый):
бегать
sudo udevadm control --reload-rules
бегать
sudo /etc/init.d/udev reload
перезагрузка
Сценарий! На самом деле, 2 сценария ...
Вот первый сценарий. Поскольку программа, которую мы запускаем, должна быстро завершиться, это просто раскручивает второй скрипт в фоновом режиме. Поместите это в
/usr/local/sbin/udev-automounter.sh
:Вот второй сценарий. Это немного больше проверяет ввод. Вставь это
/usr/local/sbin/udev-auto-mount.sh
. Вы можете настроить параметры монтирования ниже. Этот скрипт теперь самостоятельно обрабатывает раздел LABEL; UDEV только отправляет имя УСТРОЙСТВА.Если при загрузке возникает проблема с монтированием дисков , вы можете добавить
sleep 60
в этот сценарий длинную строку, чтобы дать системе время полностью загрузиться , прежде чем скрипт попытается смонтировать диск.Я дал предложение в комментариях о том, как проверить (запустите,
ps
чтобы увидеть, работает ли веб-сервер), но вы захотите настроить его для своей системы. Я думаю, что для этой цели подойдет большинство любых сетевых серверов, которые вы могли бы использовать - nfsd, smbd, apache и т. Д. Риск, конечно, состоит в том, что скрипт монтирования завершится неудачно, если служба не запущена, поэтому, возможно, тестирование существование конкретного файла будет лучшим решением.Супер бонус сценарий очистки!
Еще один скрипт. Все это делает размонтирование устройства и удаление каталогов точки монтирования. Предполагается, что для этого у него есть привилегии, поэтому вам нужно будет запустить его
sudo
. Этот скрипт теперь принимает полную точку монтирования в командной строке, например:Поместите это в
/usr/local/sbin/udev-unmounter.sh
:источник
Последний вариант, который другие предложили по сети, -
ivman
но это зависит от тогоpmount
, что вы уже заявили, не работает.pmount
заброшен иivman
почти то же самое.Замена
ivman
естьhalevt
, и это доступно в Кармике. Это переопределениеivman
(читай: «поддерживается» и «не зависит от pmount»). Пакет недоступен в Jaunty, хотя вы можете создать его самостоятельно, если не планируете обновление.Оба эти инструмента находятся над уровнями DBus и HAL и отвечают на события от них. Очевидно, что оба могут работать как системный демон или как менеджер монтирования сеанса пользователя (как Gnome-VFS) -
/etc/defaults/{ivman,halevt}
файлы отвечают за системные настройки.Вот несколько инструкций по настройке
ivman
использования/media/<LABEL>
точек монтирования. Вероятно,halevt
есть более простой способ сделать это, но, возможно, они помогут вам найти ответ.Работа с HALEVT
Обновление : В интересах получения автоматических монтировок компакт-дисков, которые не дает мой ответ UDEV, я посмотрел глубже
halevt
. Я нашел этот пост в блоге, который помог объяснить многое о процессе. Мне пришлось скомпилировать свой собственныйhalevt
пакет для Debian Lenny (к счастью, все зависимости были в разделе lenny-backports). После установки процесс был в основном не-ужасным:/etc/default/halevt
/etc/PolicyKit/PolicyKit.conf
(см. Ниже; источник )/etc/hal/fdi/policy/preferences.fdi
(см. Ниже).eject.hal
скрипт из вышеупомянутого поста блога, измените его и сохраните в/usr/local/bin
./etc/halevt/halevt.xml
Если вам нужно перезапустить демоны HAL и HALEVT, чтобы проверить ваши новые конфигурации, используйте это, чтобы получить их в правильном порядке:
Шаг 1
Проверьте это
START_DAEMON=yes
в/etc/default/halevt
.Шаг 2
В
/etc/PolicyKit/PolicyKit.conf
добавьте это внутри в<config></config>
разделе:Шаг 3
В
/etc/hal/fdi/policy/preferences.fdi
, добавьте это внутри раздела `:Шаг 4
Сценарий хорош, но должен работать
/bin/bash
; некоторые системы могут фактически использовать,/bin/dash
когда/bin/sh
вызывается. Поэтому измените верхнюю строку в скрипте, чтобы убедиться, что вы получите правильную:Шаг 5
Это самая веселая часть. Ваша система может предоставить базовую
/etc/halevt/halevt.xml
уже, поэтому вам придется адаптировать ее для собственного использования. В моем случае моя система уже обеспечивала базовую установку съемных устройств, но мне пришлось добавить поддержку для монтажа на CDROM и кнопку извлечения.В блоге, о котором я упоминал, есть хороший пример конфигурации XML, на который можно посмотреть для ваших собственных настроек. В основном речь идет о настройке замены gnome-mount для
fluxbox
среды автора , поэтому его пример XML делает больше, чем вы хотите, но это отличный способ почувствовать, что вы можете сделать. Есть также несколько хороших примеров в/usr/share/doc/halevt/examples
.Я также должен был бежать,
sudo sh -c "mkdir /var/halevt ; chown halevt:plugdev /var/halevt"
прежде чем все заработало.Вот мои дополнения, чтобы сделать автоматическое подключение CD / DVD:
Шаг 6
После того, как вы запустили систему halevt-daemon, вам нужно отключить ее при входе в GNOME и перезапустить снова при выходе. (См. Мой ответ на этот вопрос для менеджеров входа не в GDM.) Это теоретический материал, поскольку я им не пользуюсь, но он должен работать.
В
/etc/gdm/PreSession/Default
, добавьте это , чтобы остановить систему halevt-демон:В
/etc/gdm/PostSession/Default
, добавьте это , чтобы перезапустить систему halevt-демон:источник
Со временем появляются более простые решения.
Это решение основано на программном пакете udevil, который был написан для этой цели, и не требует вмешательства в правила udevil. Это, вероятно, предпочтительнее (для новых и старых пользователей) в качестве простого решения.
devmon
Скрипт из udevil делает всю магию , а только в зависимости от Udev и бойкий. Работает практически из коробки без необходимости начальной настройки.Все, что я делал на своей рабочей станции, это вызывал devmon
rc.local
примерно так:devmon 2>&1 >> /var/log/devmon &
для вашего удобства вы можете захотеть встроить это в сценарий инициализации вместо
rc.local
использования автоматического инструмента, например,pleaserun
для его создания: https://unix.stackexchange.com/ а / 124609/42673После его запуска проверяется хранилище, которое я подключаю (он ищет разделы и, если найден, смотрит их метки файловой системы), а затем монтируется в него
/media/FILESYSTEM_LABEL
.Невозможно представить что-нибудь более простое, чем это, за исключением, может быть, того, что (в) известной системе будет внедрена эта функция в будущем.
Краткий обзор udevil ( github.io/udevil )
Скрипт: devmon ( igurublog / script-devmon )
источник
quack quixote ответ не работает на Ubuntu Lucid Lynx (10.04) - нет
/sbin/vol_id
команды.Вместо того, чтобы придумывать и использовать udev, поместите это в ваш /etc/rc.local и выполните:
источник
Для систем на основе Debian (например, Ubuntu и т. Д.) Есть пакет usbmount , который автоматически подключает USB-накопители. Он в основном использует подход, основанный на udev, как уже было изложено, - это всего лишь простая установка пакета. Кажется, первоначальный автор пакета исчерпал себя, но Ubuntu / Debian все еще поддерживает его (я думаю, что это не так сложно) - так что он все еще доступен в последних выпусках.
Установленные сценарии можно настроить (/etc/usbmount/usbmount.conf) для предоставления соответствующих точек монтирования.
источник
Чтобы вытащить отличные инструкции Quackote Quixote для удаления:
Добавьте следующую строку в файл правил udev, который вы сделали ранее (/etc/udev/rules.d) "
Затем создайте следующий скрипт и выполните его исполняемый файл (/usr/local/sbin/udev-autounmounter.sh) со следующим содержимым:
Наконец, сам сценарий размонтирования (udev-auto-unmount.sh):
Таким образом, с другими инструкциями каталог будет автоматически появляться и исчезать при событиях udev.
источник
if [ -n "$device_is_mounted" ]; then
должно бытьif [ -z "${MOUNTPT}" ]; then
, не так ли?Вы можете попробовать Pysdm
источник
Вы можете попробовать поместить
su username -c gnome-volume-manager
в /etc/rc.local. Этого может быть достаточно, чтобы просто запустить gnome-volume-manager.Изменить: Кажется, что gnome-volume-manager больше не является частью дистрибутива по умолчанию, даже на рабочем столе Ubuntu.
Однако, возможно, если вы установите его, он все равно будет работать. Стоит попробовать. Если это не работает, удалите его снова.
Также есть
usbmount
пакет, который делает то, что вы хотите, но может помешать нормальному автомонтированию.источник
Мои отредактированные дополнения для решения на основе udev от Quack Quixote были отклонены, поэтому я собираюсь разместить их здесь. Пожалуйста, обратитесь к его сообщению в первую очередь.
Прежде всего, если вы хотите, чтобы правило udev действовало, когда какое-либо устройство подключено через подсистему SCSI (которая включает в себя как USB, FireWire и eSATA), измените соответствие SUBSYSTEMS в правиле udev на
SUBSYSTEMS=="scsi"
.Имейте в виду, однако, что это автоматически подключит почти все, включая внутренние диски, если вы подключите их к сети во время работы системы, так что это может быть не тем, что вы хотите.
Во-вторых, вот сценарий, который я использую, который заменяет все сценарии в этом посте. Он также автоматически очищает созданные точки монтирования в / media /, как только удаленное смонтированное блочное устройство удаляется - нет необходимости в ручном вмешательстве. Кроме того, вместо вызова другого сценария для запуска в фоновом режиме, он помещает себя в фоновый режим, когда он не выполняется с терминала (например, когда выполняется с помощью udev).
Он использует inotifywait для ожидания исчезновения смонтированного устройства, а затем удаляет созданный каталог. Поэтому в вашей системе должны быть установлены inotify-tools. На дистрибутивах на основе Debian (включая Ubuntu)
sudo apt-get install inotify-tools
должно хватить.Вы заметите, что я монтирую устройства без синхронизации и только для чтения. Это потому, что в 99% случаев мой вариант использования - это чтение с внешнего диска, и всякий раз, когда мне нужно записывать на него, я все равно буду активен на сервере и могу легко выполнить
mount -o remount,rw <mountpoint>
команду. Изменить в соответствии с вашими потребностями :)источник
halevt
не похоже на актуальныйapt-get
пакет для современных версий.Попробуйте настроить через mountmanager, чтобы вам не приходилось вводить данные вручную.
Это должно быть частью репозитория Ubuntu.
источник
Если у вас одновременно подключен только один диск, вы можете просто отредактировать его в своем
/etc/fstab
файле. Что-то вроде:Это должно смонтировать его при загрузке и сделать его доступным для всех, у кого есть права доступа. Если у вас есть более одного диска, вы можете сделать это с:
источник