Назад | Перейти на главную страницу

Как я могу заставить Linux выполнить сценарий bash при горячей замене определенного диска?

У меня есть набор жестких дисков, которые повернуты для резервного копирования вне офиса. При повторной установке одного из дисков необходимо выполнить несколько шагов, которые я использовал в простом сценарии bash. Я бы хотел, чтобы сценарий выполнялся автоматически при горячей замене одного из дисков.

В идеале у меня был бы список идентификаторов дисков (/dev/disk/by-id/...) для дисков, которые должны запускать скрипт; когда один из них вставлен, сценарий будет запущен, и идентификатор конкретного диска будет передан в качестве параметра. В качестве альтернативы было бы достаточно иметь копию сценария для каждого диска и запускать каждый сценарий для соответствующего диска.

Я использую Ubuntu Server 14.04 LTS и просматриваю похожие вопросы, связанные с USB-накопителями, и смотрю на udev и hotplug как две системы, которые мне, вероятно, понадобятся, но я надеялся, что кто-то сможет указать мне конкретное краткое решение для моих нужд.

Мой обычный подход к написанию правил udev - найти что-то похожее на то, что мне нужно в /lib/udev и дополните его поиском в Google или беглым просмотром страниц руководства.

В вашем случае большую часть моджо можно найти в /lib/udev/rules.d/60-persistent-storage.rules. Я придумал это правило:

ACTION=="add", SUBSYSTEM=="block", ENV{ID_SERIAL}=="XXXXXXXX", PROGRAM="/opt/bin/myscript $env{ID_SERIAL}"

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

Я использую здесь только серийный номер диска, этого должно быть достаточно, но вы можете восстановить весь идентификатор, как показано на /dev/disk/by-id с этой строкой:

$env{ID_BUS}-$env{ID_SERIAL}

Чтобы проверить серийный номер накопителя, вы можете использовать:

udevadm info -n /dev/disk/by-id/XXXXXXXX | grep -i SERIAL