如何在我的 LUKS 磁盘解锁和挂载之前防止错误的(双重)挂载点(由 docker 服务生成)?

如何在我的 LUKS 磁盘解锁和挂载之前防止错误的(双重)挂载点(由 docker 服务生成)?

情况

过去几年,每次重启后,以下情况都会困扰我,但经过多次尝试后,我决定放弃这个问题。我在使用 Ubuntu 时遇到了这个问题,使用基于 Ubuntu 的 ZorinOS 时仍然遇到这个问题。我的机器连接了两个外部磁盘。两个都是加密的 LUKS 磁盘(ext4)。这些磁盘不会自动挂载,因为它们需要手动输入密钥。这是预期的。但我注意到,重启后,挂载点在磁盘挂载之前就被声明了(我怀疑是 docker 服务所为),因此在解锁后我的磁盘会有一个无效的挂载点。

例子

重启之前(期望):

/media/username/diskA < real mountpoint with all the data from external disk
/media/username/diskB < real mountpoint with all the data from external disk

重新启动并手动解锁加密磁盘后(不需要):

/media/username/diskA < (mostly) empty folder
/media/username/diskB < (mostly) empty folder
/media/username/diskA1 < real mountpoint with all the data from external disk
/media/username/diskB1 < real mountpoint with all the data from external disk

尝试

我尝试过几种方法,但都不成功,包括通过更改/lib/systemd/system/docker.service并添加[Unit]部分RequiresMountsFor=/media/username/diskA /media/username/diskB下的 来告诉 Docker 服务等待挂载准备就绪后再启动其服务systemctl daemon-reload。但这似乎并没有得到我想要的结果。只是 Docker 无法启动。但也许这甚至不是 Docker 服务的问题,而是另一件事导致我的挂载点完全混淆。我总是以停止 Docker 服务、手动删除错误的挂载点、重新挂载磁盘并再次手动启动 Docker 服务告终。按此顺序。

期望的解决方案

在最理想的情况下,我希望重启后挂载点保持不变,并启动 docker 服务,但只是让 docker 在磁盘挂载完成之前不触碰这些点。或者延迟需要这些外部磁盘的容器的启动。或者,我可以在系统重启后完全暂停 docker 服务,只要我的挂载点没有被弄乱。

相关内容