断开/连接时自动卸载/安装驱动器

断开/连接时自动卸载/安装驱动器

有没有一种方法可以让systemd.mount设备检测驱动器的状态,而无需重新启动计算机或重新加载设备?如果没有,还有其他方法可以实现这一目标吗?

我想自动地mount a drive when it is inserted,自动地unmount it when it is disconnected

我当前的systemd.mount配置:

[Unit]
Description=var-test.mount

[Mount]
What=LABEL=TEST_LABEL
Where=/var/test
Type=ext4
Options=defaults,noatime

[Install]
WantedBy=multi-user.target

我想这样做的原因是因为当驱动器断开连接时,它不会被卸载。因此,eg/dev/sda1将保持挂载状态,但不可访问。当插入驱动器时,它将获得一个新分区,例如/dev/sdb1,该分区无法安装到同一安装点,因为它已在使用中。

我可以通过在systemd.mount断开驱动器连接之前停止设备并在再次插入驱动器后启动它来避免这种情况。然而,这是我想要自动化的一个步骤。

编辑:我想我从下面的链接帖子中得到了一个不错的答案。我会调查一下udev rules。也许可以systemd.mountudev rule. https://unix.stackexchange.com/a/44509/540247

答案1

使用 udev 规则对我来说很有效。我只是创建了一个 udev 规则来运行我的安装单元。因此,每次设备连接(下面的 udev 规则中指定的设备属性)时,都会安装它。每次设备断开连接时,它都会被卸载。

看起来像这样:

# Mount when disk is inserted
KERNEL=="sd[a-z][0-9]", KERNELS=="ata[12]", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", ENV{ID_FS_LABEL}=="TEST_LABEL", ACTION=="add", RUN+="/bin/systemctl restart var-test.mount"

# Unmount device when removed (Edit: don't do this)
KERNEL=="sd[a-z][0-9]", KERNELS=="ata[12]", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="ext4", ENV{ID_FS_LABEL}=="TEST_LABEL", ACTION=="remove", RUN+="/bin/systemctl restart var-test.mount"

编辑:正如下面@roaima 所发布的,在设备断开连接后卸载设备是一个坏主意。然而,上述解决方案仍然适用于在插入设备时安装设备。

相关内容