我目前有以下脚本。当我需要安装所述磁盘时,我会手动运行此脚本。我不需要/不希望此磁盘在启动时自动安装:
disk1="/dev/disk/by-uuid/84ea2a10-abcd-abcd-abcd-06deabcdabcd"
sudo cryptsetup luksOpen "${disk1}" disk1-crypt
sudo mount /dev/mapper/disk1-crypt /mnt/disk1
是否可以设置 Linux,使其知道在我尝试安装此磁盘时自动执行 luksOpen 命令?如果可能的话,在我卸载它时也执行 luksClose。
答案1
如果你使用 systemd:
- 将 LUKS 配置添加到
/etc/crypttab
,并指定“无”作为密钥文件。 - 将安装配置添加到
/etc/fstab
(可能指定noauto
为选项)。 - 运行
systemctl daemon-reload
以使其获取更改。 - 用于
systemctl start /mnt/disk1
解锁并挂载文件系统。 - 用于
systemctl stop /mnt/disk1
卸载文件系统,这会导致解锁的设备也因不需要而被停止。
如果您正在使用 GNOME(或通常安装了其组件):
- 用于
gio mount -d /dev/disk/by-whatever
直接从其锁定的设备挂载文件系统。这不接受挂载点位置 - 如果磁盘与 crypttab 和 fstab 条目匹配,它将遵守这些条目,否则它将始终默认为/run/media/USER/FSLABEL
。 - 用于
gio mount -u /run/media/ana/disk1
卸载它。
答案2
@user1686 展示了在 systemd 下执行此操作的“正确”方法,但对于那些没有 systemd 的人来说(或者认为 systemd 是用胶水粘合在一起的太多复杂脚本的人!),只需使用@Gabriel 的脚本并将其粘贴进去/usr/local/bin/mount-my-disk
:
#!/bin/bash
if [ $UID != 0 ]; exec sudo "$0" "$@"; fi
disk1="/dev/disk/by-uuid/84ea2a10-abcd-abcd-abcd-06deabcdabcd"
cryptsetup luksOpen "${disk1}" disk1-crypt
mount /dev/mapper/disk1-crypt /mnt/disk1
您可能不想授予 sudo 访问所有这些命令的权限,或者具有sudo mount
访问权限的用户可能会做一些恶作剧:请遵守最小特权原则。
$UID 检查可以让你只为/usr/local/bin/mount-my-disk
答案3
这不是一个优雅的解决方案,但它可能适合您的用例(并且这绝对是我自己解决问题的方法)。
您可以创建一个 bash 脚本,以别名的形式覆盖该命令,检查参数并在传递该精确参数时执行您需要的操作,在传递其他任何内容时mount
返回到实际命令。mount
看一下这个脚本:
#!/bin/bash
mount_disk1 () {
disk1="/dev/disk/by-uuid/84ea2a10-abcd-abcd-abcd-06deabcdabcd"
sudo cryptsetup luksOpen "${disk1}" disk1-crypt
sudo mount /dev/mapper/disk1-crypt /mnt/disk1
}
[[ "$@" == "disk1" ]] && mount_disk1 \
|| mount "$@"
这里有一个函数,它可以执行您想要的操作。如果您传递给它的唯一内容是disk1
它将执行该函数,否则它将执行mount
传递所有参数的原始函数。
~/.bashrc
您可以将此脚本放在文件夹中,并在您的或~/.zshrc
使用中设置别名
alias mount='<path to script>'
然后如果你想使用原来的mount
,你可以\mount
在终端中运行。
希望能帮助到你!