我有一组硬盘,它们会轮换用于异地备份。当重新插入其中一个磁盘时,需要执行几个步骤,我已将其整合到一个简单的 bash 脚本中。我希望当其中一个磁盘热插拔时自动执行该脚本。
理想情况下,我会有一个磁盘 ID 列表 ( /dev/disk/by-id/...
),用于触发脚本;当其中一个磁盘插入时,脚本将运行,特定磁盘的 ID 将作为参数传入。作为替代方案,最好为每个磁盘准备一份脚本副本,并让每个脚本针对其各自的磁盘运行。
我正在运行 Ubuntu Server 14.04 LTS,一直在浏览与 USB 驱动器相关的类似问题,并正在查看udev
我hotplug
可能需要使用的两个系统,但希望有人可以为我指出一个满足我需求的具体简洁的解决方案。
答案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