管理多个 LUKS 设备

管理多个 LUKS 设备

我的 Linux 文件服务器有四个 LUKS 加密的 USB-3 磁盘。将它们全部挂载起来有点令人困惑:虽然它们可能获得与上次相同的驱动器号,但也可能不同,这会导致一些反复试验。

为了安装它们,我通常会说这样的话(通常针对 c、d、e 和 f 中的每一个):

sudo cryptsetup open --type luks /dev/sdc d1
sudo mount /dev/mapper/d1 /d1

(请注意,这里的威胁场景是有人窃取了我的硬件。目标是当它断电时,需要我重新启动它。在我不在的时候文件服务器不提供文件是可以接受的。)

我可以在 中看到 UUID /dev/disk/by-uuid/,尽管这些不是 LUKS UUID。我怀疑它们是稳定的。

我还看到了 USB 端口信息/dev/disk/by-path/(不太好,取决于插入的位置)和 WWID /dev/disk/by-id/。在这两种情况下,我都可以编写一个简短的脚本(手动运行),扫描熟悉的名称,用于sed提取驱动器号,然后执行上面的两行来打开和安装卷。

但也许这个问题有更好的解决方案。有什么建议吗?

答案1

我会配置在/etc/crypttab中并使用 UUID 例如

usb1     UUID=d665864f-08e1-49ed-9adc-c608deadbeef

这将从相关磁盘配置 /dev/mapper/usb1。然后您可以使用 fstab 条目等来挂载东西。在启动期间,系统会提示输入密码以解锁磁盘,无需额外的脚本。

答案2

最后,我写了一个简短的 bash 脚本通过 UUID 挂载。

上面的链接将显示当前状态(可能包括死亡),所以今天的情况如下:

#!/bin/bash

# Mount all LUKS partitions that I know about that are connected to
# this machine but not already mounted.

luks_mount() {
    # This is the UUID we can see before luksOpen.
    uuid="$1"
    # Where to mount it.  Should be at the root of the root file
    # system with no trailing slash.  That is, /foo, not /foo/,
    # /foo/bar or simply foo.
    mount_point="$2"
    if [ ! -d $mount_point ]; then
        echo "$mount_point does not exist or is not a directory."
        return
    fi
    root_id=$(stat -c '%D %m' /)
    mount_id=$(stat -c '%D %m' "$mount_point")
    if [ "$root_id" != "$mount_id" ]; then
        echo "$mount_point is already mounted (is not part of the root filesystem)."
        echo "$root_id != $mount_id"
        return
    fi
    if [ ! -e /dev/disk/by-uuid/$uuid ]; then
        echo "LUKS volume for $mount_point not available."
        return
    fi
    drive_letter=$(stat /dev/disk/by-uuid/$uuid -c '%N' | \
                       sed -e 's/^.*sd//;' | \
                       tr -d "'")
    device=/dev/sd$drive_letter;
    mapping=$(echo $mount_point | tr -d /);
    echo "Mounting $mount_point:"
    sudo cryptsetup open --type luks $device $mapping;
    sudo mount /dev/mapper/$mapping /$mapping;
}

luks_mount 4d4bc0a0-e67a-4f9b-8c70-05cfdbf9282c /jma-4t
luks_mount 4b824f8c-94d4-4655-8e56-67ead167ed4c /jma-3t
luks_mount 5d6777f0-f475-451e-bad8-3cdf6e80f7c5 /sb-4t
luks_mount 4ea3852f-8cdd-4ed9-898e-d86a851e0a9c /sb-3t

相关内容