如何在关机时自动卸载加密循环设备?

如何在关机时自动卸载加密循环设备?

我正在使用 Debian 测试,我有一个文件,它是一个带有 ext4 文件系统的 LUKS 容器。我的系统每次启动时都会挂载它。为了做到这一点,我必须使用以下三个文件:

在/etc/crypttab中

sda2_crypt UUID=727fa348-8804-4773-ae3d-f3e176d12dac 无 luks
crypt_dropbox /媒体/服务器/Dropbox/luks_dropbox sda2_crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived,noauto

/etc/fstab

# Dropbox
UUID=0d959e74-ec19-43bf-b779-60134c676aef /media/Dropbox ext4 默认值,noauto,用户,nofail,noatime,提交=20 0 2

/etc/rc.local

cryptdisks_start crypt_dropbox
挂载/media/Dropbox

无法通过/etc/crypttab+在启动时自动打开和挂载容器/etc/fstab,因为 Dropbox 卷位于分区上,必须在挂载分区之前打开。所以,这就是为什么noauto中存在/etc/crypttab。该容器内的文件系统也无法通过挂载mount -a(至少在启动时),因为还没有设备。nofail存在此选项以抑制“无设备”错误。第一阶段已完成。第二阶段是启动完成时,这就是我使用/etc/rc.local文件的原因。第一行无需密码(由于 /etc/crypttab 中的设置)即可打开 Dropbox 卷,第二行通过 /etc/fstab 挂载它。这样就成功了。

系统尝试卸载 Dropbox 卷所在的分区时发生错误。我不知道具体原因,但可能是因为 Dropbox 卷的文件系统已装载,或者可能是容器已打开,甚至是因为 loop0 设备仍处于活动状态。为了完全关闭 Dropbox 卷,我必须使用以下命令:

卸载/媒体/Dropbox
cryptdisks_stop crypt_dropbox
losetup -d /dev/loop0

有没有办法只在系统关闭时但在卸载任何其他分区之前执行此操作? 是否有一个文件可以插入这些命令,类似于 /etc/rc.local ?

答案1

具体情况取决于您正在运行的发行版以及它的设置方式,但概括地说,当 Linux 系统关闭时,它会进入运行级别 0(关机)或 6(重新启动)。

切换运行级别时,init 进程会执行“kill”和“start”脚本对于输入的运行级别

您可以添加自己的脚本,以便在进入给定的运行级别时执行任意命令。例如,要在 Debian 上添加一个在系统准备重新启动时运行的脚本,请/etc/init.d/my-reboot-prepare-script使用您喜欢的任何命令创建一个 shell 脚本(查看该目录中的其他脚本以了解如何执行此操作的详细信息),然后从 向其添加符号链接/etc/rc6.d/K00my-reboot-prepare-scriptK开头的 将导致调用脚本来“停止”相关进程,参数为stop

相关内容