当特定的磁盘被热插入时,我如何让Linux执行一个bash脚本?

我有一套硬盘驱动器可以进行异地备份。 当其中一个磁盘重新插入时,需要执行几个步骤,我已经将其放入了一个简单的bash脚本。 我想在其中一个磁盘热插拔时自动执行脚本。

理想情况下,我应该有一个磁盘ID的列表( /dev/disk/by-id/... ),以便应该触发脚本的磁盘; 当其中一个被插入时,脚本将被运行,并且特定磁盘的ID将作为参数被传入。 作为替代scheme,每个磁盘都有一个脚本的副本,并为每个磁盘运行每个脚本。

我正在运行Ubuntu Server 14.04 LTS,并且一直在浏览与USB驱动器有关的类似问题,并将udevhotplug看作是我可能需要使用的两个系统,但希望有人能够指向我为我的需求提供一个特定的简洁解决scheme。

我常用的udev编写规则的方法是在/lib/udevfind类似于我需要的内容,并通过谷歌search或快速查看手册页对其进行补充。

对于你的情况,大部分的mojo可以在/lib/udev/rules.d/60-persistent-storage.rulesfind。 我想出了这个规则:

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

每个驱动器都需要一个规则,脚本会将串行驱动器作为参数接收。

我只在这里使用驱动器序列,这应该是足够的,但你可以重build整个ID在/dev/disk/by-id看到这个string:

 $env{ID_BUS}-$env{ID_SERIAL} 

要检查驱动器的序列号,您可以使用:

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