我设置了两个 luks 加密驱动器以在系统启动时自动挂载(使用crypttab
luks 文件密钥)。它工作正常,但不幸的是,如果我断开其中一个驱动器的连接,当我再次将它们连接到我的 PC(运行 Fedora)时,“自动解密”过程不会运行,我必须在卸载后手动进行安装。H我可以使用什么命令来触发与 systemd 在系统启动时触发的相同进程,以便在我没有进一步参与的情况下自动挂载和解密驱动器?或者如果失败了,我怎样才能让 systemd 在这种情况下自动解密并挂载它们?
作为参考,这是我用来设置驱动器的教程:https: //www.golinuxcloud.com/mount-luks-encrypted-disk-partition-linux/
在启动或运行时
/etc/crypttab
,systemd 会自动将 其中的每个条目转换为一个单元。例如,假设 LUKS 文件系统的 UUID 为(我不会完整显示)条目systemd-cryptsetup-generator
sudo systemctl daemon-reload
1111...
将生成
/run/systemd/generator/[email protected]
具有依赖关系的文件,BindsTo=dev-disk-by\x2duuid-1111....device
依此类推。该单元cryptsetup
在 UUID 出现在新磁盘上时运行。类似地,systemd 中的每个条目
/etc/fstab
都会自动转换systemd-fstab-generator
为一个 Unit。例如,条目将生成文件
/run/systemd/generator/mnt-mytest.mount
,该文件(可能通过 udev)将在文件/dev/mapper/mytest
出现时进行挂载(它将由创建cryptsetup
)。您可以使用以下命令检查这两个单元的状态
通常,解密和挂载成功后,它们将分别显示为
要干净地删除磁盘,请首先给出命令
再次插入此磁盘时,将自动挂载。
如果在未执行此操作的情况下移除已安装的磁盘,则单元可能会处于故障状态。尾随 systemd 日志
journalctl -f
以查看消息。有时,在没有卸载的情况下拔出,内核会在文件系统上发出有关 i/o 错误的消息,但它成功地卸载了文件系统,并且 crypt detach 成功关闭了设备。在这种情况下,当设备重新插入时,它应该会自动成功安装而无需干预。
但是,有时,在 i/o 错误之后,内核决定以只读方式重新挂载文件系统。这会导致 crypt detach 命令出现问题,该命令失败是因为设备正忙(已安装,而它本应由 systemd 卸载)。由于文件系统通常最终被卸载,因此似乎存在竞争问题。当设备重新插入时,解密表明该卷已经处于活动状态,因此似乎不会触发安装。
在这种情况下,似乎可行的是清除停止作业的失败状态,并手动运行分离命令。当设备再次插入时,解密机制干净利落地启动,挂载完成。命令是
还有一个
dev-mapper-mytest.device
可以检查状态的单元。如果分离失败,它仍然处于活动状态,但在执行上述手动分离命令后将变为非活动状态。