当特定磁盘热插拔时,如何让 Linux 执行 bash 脚本?

当特定磁盘热插拔时,如何让 Linux 执行 bash 脚本?

我有一组硬盘,它们会轮换用于异地备份。当重新插入其中一个磁盘时,需要执行几个步骤,我已将其整合到一个简单的 bash 脚本中。我希望当其中一个磁盘热插拔时自动执行该脚本。

理想情况下,我会有一个磁盘 ID 列表 ( /dev/disk/by-id/...),用于触发脚本;当其中一个磁盘插入时,脚本将运行,特定磁盘的 ID 将作为参数传入。作为替代方案,最好为每个磁盘准备一份脚本副本,并让每个脚本针对其各自的磁盘运行。

我正在运行 Ubuntu Server 14.04 LTS,一直在浏览与 USB 驱动器相关的类似问题,并正在查看udevhotplug可能需要使用的两个系统,但希望有人可以为我指出一个满足我需求的具体简洁的解决方案。

答案1

我编写 udev 规则的通常方法是找到与我需要的内容类似的内容/lib/udev,然后通过谷歌搜索或快速查看手册页来补充它。

对于你的情况,大部分魔力都可以在 中找到/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我在这里仅使用驱动器序列号,这应该足够了,但您可以使用以下字符串重建整个 ID,如下所示:

$env{ID_BUS}-$env{ID_SERIAL}

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

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

相关内容