从命令行挂载加密卷?

从命令行挂载加密卷?

如果我有一个加密的外部磁盘(或不在 fstab 中的内部磁盘),我会在 Nautilus 中看到它的条目——带有类似“X GB 加密卷”的条目。我可以单击此卷,系统会提示我输入密码以解密和安装设备。

但是我如何从命令行执行此操作?

本维基页面以及我能找到的其他文档仅提及了解密设备的 GUI 方法;但这在无头服务器或 SSH 登录的环境中不起作用。有没有一种简单的方法可以让设备像/media使用 GUI 一样安装到自动位置?

(我不是问加密的主目录——我知道ecryptfs-mount-private。这个问题是关于额外的加密卷。)

答案1

您的卷可能使用 LUKS 加密,以下是安装方法:

你需要:

sudo apt-get install cryptsetup

要解密卷:

sudo cryptsetup luksOpen /dev/sda1 my_encrypted_volume

现在你可以照常安装它:

sudo mkdir /media/my_device
sudo mount /dev/mapper/my_encrypted_volume /media/my_device

要再次锁定容器,需要先将其卸载:

sudo umount /media/my_device
sudo cryptsetup luksClose my_encrypted_volume

要自动将其放置在该/media位置,请使用 udisks 工具

sudo udisks --mount /dev/mapper/my_encrypted_volume

答案2

@Georg Schölly 的回答中的步骤当时对我来说不起作用,尽管现在它们可能有效,几个 Ubuntu 版本之后。当时,执行完该sudo mount /dev/mapper/my_encrypted_volume /media/my_device步骤后我收到错误:

挂载:未知文件系统类型“LVM2_member”

使用 udiskctl 解锁并安装磁盘

相反,我使用了udisksctl与服务交互的命令行界面udisksd

以下是有效的方法(/dev/sdb5我的硬盘上的分区标记为crypt-luks):

udisksctl unlock -b /dev/sdb5
udisksctl mount -b /dev/mapper/ubuntu--vg-root

输入第一个命令后,系统会提示您输入加密密码。一旦加密分区解锁,第二个命令就会挂载它。如果成功,您将收到一条消息相似的更改为:

Mounted /dev/dm-1 at /media/dpm/e8cf82c0-f0a3-41b3-ab28-1f9d23fcfa72

从那里我可以访问数据:)

使用 udiskctl 锁定磁盘

卸载设备:

udisksctl unmount -b /dev/mapper/ubuntu--vg-root

您需要ubuntu-vg先停用卷组中的所有逻辑卷。否则,如果您尝试锁定它,您将收到类似“设备繁忙”的错误(更多信息):

sudo lvchange -an ubuntu-vg

然后你就可以锁定加密分区

udisksctl lock -b /dev/sdb5

笔记

  • 命令udisksctl被执行没有 sudo
  • 设备映射器名称ubuntu--vg-root命名可能会在 Ubuntu 版本之间发生变化(例如,我也见过它被称为system-rootand ubuntu-root)。找出名称的一个简单方法是运行以下命令解锁 LUKS 分区后

    ls -la /dev/mapper

    然后查看命令的输出ls,您需要的名称通常是符号链接到的名称/dev/dm-1

  • 设备映射器名称,替代:上一个命令的替代方法是运行:

    lsblk -e7

    您将能够以树状视图的形式看到设备名称映射。该-e 7选项用于从输出中排除已安装的 snap 创建的循环设备 (ID 7)。只是为了减少混乱。

  • 逻辑卷名称:您可以运行该sudo lvs命令来找出卷组和逻辑卷的名称
  • 磁盘应用程序:GNOME 磁盘应用程序不会在锁定分区之前自动停用逻辑卷。即使您已通过 GUI 成功解锁分区,您仍需要转到命令行并执行命令,sudo lvchange -an ubuntu-vg然后才能从 GUI 锁定它。

答案3

如果出现此错误:

mount: unknown filesystem type 'LVM2_member'

跑步:

sudo apt-get install lvm2
sudo lvscan

然后激活你看到的所有 LVM

sudo vgchange -ay

然后重新运行挂载:

sudo mount /dev/mapper/my_encrypted_volume /media/my_device

答案4

以上所有答案都假设用户已经知道哪个分区是加密分区。作为一个不太喜欢命令行的人,我期望得到一些用户友好的答案... 所以这是我的一点看法。

  1. 打开ubuntu的“磁盘”应用程序。
  2. 在左侧面板中找到已安装的硬盘。
  3. 单击名称中带有“LUKS”的分区:这样您就可以在下面的“设备”文本中看到它的挂载点(在我的情况下是:)/dev/sdb4

然后我尝试按照上面的建议安装它:

$ sudo cryptsetup luksOpen /dev/sdb4 someNameForMyVolume
Enter passphrase for /dev/sdb4: 

但出现此错误:

Cannot use device /dev/sdb4 which is in use (already mapped or mounted).

好的,所以我猜 nautilus 已经尝试挂载它了(因为当我连接 USB 时它实际上提示我输入密码,即使它最终没有显示解密树)。但是,错误消息并没有真正帮助,因为它没有告诉我它已经映射/挂载在哪里。但这个命令在这种情况下很有帮助:

$ udisksctl unlock -b /dev/sdb4
Passphrase: 
Error unlocking /dev/sdb4: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Device /dev/sdb4 is already unlocked as /dev/dm-3

啊哈!原来如此/dev/dm-3

但是,当尝试安装它时,它不起作用:

$ udisksctl mount -b /dev/dm-3
Object /org/freedesktop/UDisks2/block_devices/dm_2d3 is not a mountable filesystem.

经过多次尝试,我发现我遇到了duplicate volume groups问题(上面由@amenthes 描述),因为命令sudo vgscan -vsudo vgdisplay显示了两个具有相同卷组名称的条目。但是,我发现了一种比他的方法更好的解决方法(无需启动 LiveCD 即可重命名卷组!),即关联,我将在上面引用(以防链接坏了……):

如果您运行,ls -la /dev/mapper/您应该会看到一个luks-xxxxxx-xxxxx-xxxx或类似的文件。这是当 Ubuntu 使用对话框提示输入加密密码但无法打开时创建的映射(对话框所做的只是调用luksOpen并将其映射到该 /dev/mapper/luks-xxx 文件)。现在:

  1. 运行命令以确保物理卷可用sudo pvdisplay。它应该是 /dev/mapper/luks-xxx-whatever。
  2. 通过运行获取卷的 uuid。uuidsudo pvs -o +vg_uuid将是显示到最右边的值,包含 7 个以破折号分隔的值。将它们复制到某个地方,因为我们将在下一步中使用它们。不要混淆 UUID 并复制错误的 UUI。只复制当前 /dev/mapper/luks-xxx-whatever 设备的 UUI。
  3. 通过运行以下命令更改旧磁盘的卷组sudo vgrename UUIDOFYOURDISKHERE oldhd您可以将“oldhd”更改为任何您想要的内容,只要它与当前磁盘的卷组名称不同即可。执行此步骤可消除与卷组名称的冲突,从而使您现在可以使卷可用。
  4. 运行命令vgchange -a y以使卷处于活动状态。
  5. 在某处为挂载点创建一个文件夹,例如:sudo mkdir /media/<yourUserName>/someDir
  6. 安装它:sudo mount /dev/oldhd/root /mnt/oldhd
  7. 处理完文件后,ubuntu-vg如果您希望卷仍然可启动,则应该将卷组重命名为。

相关内容