Como posso fazer com que o Linux execute um script bash quando um disco específico é colocado em hotswap?

3

Eu tenho um conjunto de discos rígidos que são girados para backup externo. Há várias etapas que precisam ser executadas quando um dos discos é reinserido, o que eu insiro em um script simples. Eu gostaria de executar o script automaticamente quando um dos discos é hot-swap em.

Idealmente, eu teria uma lista de IDs de disco ( /dev/disk/by-id/... ) para os discos que deveriam acionar o script; quando um deles é inserido, o script seria executado e o ID do disco específico seria transmitido como um parâmetro. Como alternativa, seria bom o suficiente ter uma cópia do script por disco e ter cada script executado em seu respectivo disco.

Estou executando o Ubuntu Server 14.04 LTS, e estou examinando questões semelhantes relacionadas a drives USB e estou olhando para udev e hotplug como os dois sistemas que provavelmente precisarei usar, mas esperava que alguém pode ser capaz de me indicar uma solução sucinta específica para as minhas necessidades.

    
por STW 30.12.2014 / 20:06

1 resposta

1

Minha abordagem usual para a escrita de regras do udev é encontrar algo semelhante ao que eu preciso em /lib/udev e complementá-lo com uma pesquisa no google ou uma rápida olhada nas páginas do manual.

Para o seu caso, a maior parte do mojo pode ser encontrada em /lib/udev/rules.d/60-persistent-storage.rules . Eu criei esta regra:

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

Você precisaria de uma regra para cada unidade e seu script recebe a serial do inversor como um parâmetro.

Estou usando apenas a serial da unidade aqui, isso deve ser suficiente, mas você pode reconstruir toda a ID como visto em /dev/disk/by-id com essa string:

$env{ID_BUS}-$env{ID_SERIAL}

Para verificar o número de série da unidade, você pode usar:

udevadm info -n /dev/disk/by-id/XXXXXXXX | grep -i SERIAL
    
por 31.12.2014 / 16:00