![如何在关机时自动卸载加密循环设备?](https://linux22.com/image/1387179/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%85%B3%E6%9C%BA%E6%97%B6%E8%87%AA%E5%8A%A8%E5%8D%B8%E8%BD%BD%E5%8A%A0%E5%AF%86%E5%BE%AA%E7%8E%AF%E8%AE%BE%E5%A4%87%EF%BC%9F.png)
我正在使用 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-script
。K
开头的 将导致调用脚本来“停止”相关进程,参数为stop
。