![自动安装加密的外部硬盘](https://linux22.com/image/188897/%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85%E5%8A%A0%E5%AF%86%E7%9A%84%E5%A4%96%E9%83%A8%E7%A1%AC%E7%9B%98.png)
我已使用 cryptsetup 和密钥文件加密了我的外部硬盘。我现在的目标是自动解密并将它们安装在插件上。我曾经用这个这样做过博客帖子(不幸的是用德语)。这曾经在我的旧 Ubuntu 16.04 机器上工作,但自从我升级到 Focal 后,它不再工作了。我具体做的是:
- 添加
/dev/mapper/extdrive /mnt/extdrive xfs defaults,noauto 0 2
到/etc/fstab
。 - 添加
ACTION=="add", SUBSYSTEM=="block", ENV{DEVTYPE}=="partition", ATTRS{serial}=="123456789", RUN+="/sbin/cryptsetup --key-file /root/.kf luksOpen $env{DEVNAME} extdrive"
到/etc/udev/rules.d/85-extdrive.rules
- 添加
ACTION=="add|change", SUBSYSTEM=="block", ENV{DM_NAME}=="extdrive", RUN+="/bin/mount /dev/mapper/$env{DM_NAME}"
到/etc/udev/rules.d/85-extdrive.rules
看起来驱动器是通过 luksOpen 打开但未安装,即“添加|更改”规则不会触发。如何找出自动挂载失败的原因?如果我手动执行相应的命令,一切似乎都很好。额外提示:为什么这种方法过去在 16.04 中有效,但在 20.04 中不再有效?
谢谢你!
答案1
mount
在 UDev 规则中不起作用,因为 UDev 使用自己的挂载命名空间运行。您需要改用systemd-mount
,请参阅这篇维基百科文章了解详情。
来自 udev 联机帮助页:
请注意,由于 systemd-udevd.service 上强制执行默认沙箱,因此在 udev 规则内不允许运行访问网络或挂载/卸载文件系统的程序。
这是相对较新的变化(我认为大约是 3 年前),所以我猜这在 16.04 中还没有出现。