Скрипт вызова выскочки (для вставленного USB-накопителя)

Я знаю, что Ubuntu (и Fedora) использует Upstart вместо классического демона инициализации System V (SysVinit).

Я хотел бы знать, как определить, когда USB-накопитель вставлен, смонтировать его и скопировать на него какие-то файлы. Я бы хотел, чтобы Upstart называл для этого мой собственный сценарий.

Если возможно, я бы хотел, чтобы Upstart вызывал скрипт для определенного USB-накопителя, чтобы я имел нормальную функциональность для каждого USB-накопителя, кроме моего USB-накопителя «мгновенного резервного копирования».

Если бы Upstart мог отправить строку идентификации USB-накопителя в качестве аргумента моему сценарию, я думаю, это было бы идеальным решением, поскольку я мог бы иметь строку идентификатора в моем сценарии и, возможно, мог бы заставить сценарий обрабатывать два USB-накопителя без много изменений.

И в качестве примечания, знаете ли вы какую-либо другую систему, кроме Upstart, которая хорошо обрабатывает USB-накопители, сетевые файловые системы и тому подобное? (В отличие от SysVinit .)

Ответов (2)

Решение

upstart не похоже, идет с сигналами "USB-устройство подключено" из коробки. До сих пор основное внимание уделялось тому, чтобы сделать почти то же самое, что и init, а «классные разрекламированные функции» появятся в будущем.

Из вики Fedora : «… установка самого Upstart сейчас, даже если он будет работать только так, как сейчас работает SysV, позволит нам начать плавный переход к этой модели».

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

udev уже есть простой способ запуска сценариев при подключении и отключении устройств. Посмотрите, как переименовать имя устройства вашего USB-жесткого диска с помощью правил udev . В моей системе мне пришлось бы использовать udevadm monitor --env вместо учебника udevmonitor --env . Следуя инструкциям по руководству, вы создадите еще одно правило udev, подобное этому:

echo 'SUBSYSTEM=="block", ID_SERIAL_SHORT=="101A9041C67D182E", \
NAME="myusbdrive", \
RUN+="/my/backup/script $env{NAME}"' > /etc/udev/rules.d/S96-mydrive.rules

Замените ID_SERIAL_SHORT его фактическим идентификатором вашего устройства и $env{NAME} любыми переменными среды udev, которые необходимы вашему скрипту для поиска устройства резервного копирования. Вам может потребоваться фоновый сценарий, чтобы избежать блокировки udev.

Если вы хотите использовать выскочку, вы можете запустить правило udev, /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ... а затем написать сценарий в /etc/event.d начале строки start on back-it-up .

См. Также Как я могу прослушивать события «вставлено USB-устройство» в Linux на Python? для подсказок, как сделать то же самое с DBus . DBus может быть более удобным, если вы хотите, чтобы вошедший в систему пользователь запускал в пользовательском режиме демон «наблюдение за резервным диском».

В Ubuntu 9.10 и новее Upstart имеет некоторые возможности udev через upstart-udev-bridge службу.

#thumbdrive_special.conf
start on block-device-added

task

script
   if [ `blkid $DEV` -eq "YOUR-THUMBDRIVES-UUID" ]; then
      /home/you/bin/thumbdrive_special $DEV
   fi
end script

Мне нравится, насколько простым и элегантным может быть выскочка. Однако решение DBus могло бы быть лучше, если бы оно было менее элегантным. С помощью решения DBus вы можете отображать всплывающие уведомления для пользователя и обеспечивать легкий пользовательский контроль.