从命令行挂载加密卷?

cha*_*cha 119 encryption command-line mount

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

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

这个维基页面,以及我能找到的其他文档,只涉及解密设备的 GUI 方法;但这不适用于无头服务器或 SSH 登录。有没有一种简单的方法可以让设备/media像使用 GUI 一样安装到自动位置?

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

Geo*_*lly 111

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

你需要:

sudo apt-get install cryptsetup
Run Code Online (Sandbox Code Playgroud)

要解密卷:

sudo cryptsetup luksOpen /dev/sda1 my_encrypted_volume
Run Code Online (Sandbox Code Playgroud)

现在你可以像往常一样挂载它:

sudo mkdir /media/my_device
sudo mount /dev/mapper/my_encrypted_volume /media/my_device
Run Code Online (Sandbox Code Playgroud)

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

sudo umount /media/my_device
sudo cryptsetup luksClose my_encrypted_volume
Run Code Online (Sandbox Code Playgroud)

要自动放到/media位置,使用udisks工具

sudo udisks --mount /dev/mapper/my_encrypted_volume
Run Code Online (Sandbox Code Playgroud)

  • 所以我也不能以非特权用户身份执行此操作,即使我可以通过 GUI 执行此操作? (2认同)
  • 不幸的是,ubuntu 16.04 对我不起作用。挂载:未知文件系统类型“LVM2_member” (2认同)

Dav*_*lla 101

@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
Run Code Online (Sandbox Code Playgroud)

输入第一个命令后,系统会提示您输入加密密码。一旦加密分区解锁,第二个命令将挂载它。如果成功,您将收到类似于以下内容的消息:

Mounted /dev/dm-1 at /media/dpm/e8cf82c0-f0a3-41b3-ab28-1f9d23fcfa72
Run Code Online (Sandbox Code Playgroud)

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

使用 udiskctl 锁定磁盘

卸载设备:

udisksctl unmount -b /dev/mapper/ubuntu--vg-root
Run Code Online (Sandbox Code Playgroud)

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

sudo lvchange -an ubuntu-vg
Run Code Online (Sandbox Code Playgroud)

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

udisksctl lock -b /dev/sdb5
Run Code Online (Sandbox Code Playgroud)

笔记

  • udisksctl命令被执行,而不 sudo
  • 设备映射器名称:该ubuntu--vg-root命名可能跨越Ubuntu的版本改变(例如我已经看到了所谓的system-rootubuntu-root太)。找出名称的一种简单方法是在解锁 LUKS 分区后运行以下命令:

    ls -la /dev/mapper

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

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

    lsblk -e7

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

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

  • 不幸的是,我收到错误`Object /org/freedesktop/UDisks2/block_devices/dm_2d3 is not a mountable filesystem.` 有什么建议吗? (13认同)
  • 快进 5 年,我发现自己不得不再次拯救加密分区。我使用了 Ubuntu 18.04 live USB 记忆棒,并按照我当时描述的相同步骤进行操作。和以前一样,它们运行良好,我不需要 `sudo` 来执行它们。 (4认同)
  • @wawa 我遇到了同样的问题并在此答案中解决了 http://askubuntu.com/a/895508/334823 (2认同)
  • @Selah,我扩展了答案以更好地解释用于安装的设备路径。致 mwfearnley:查看您登录的用户的权限可能是值得的。 (2认同)

小智 29

如果您收到此错误:

mount: unknown filesystem type 'LVM2_member'
Run Code Online (Sandbox Code Playgroud)

跑:

sudo apt-get install lvm2
sudo lvscan
Run Code Online (Sandbox Code Playgroud)

然后激活您看到的所有 LVM

sudo vgchange -ay
Run Code Online (Sandbox Code Playgroud)

然后重新运行挂载:

sudo mount /dev/mapper/my_encrypted_volume /media/my_device
Run Code Online (Sandbox Code Playgroud)

  • 最后一行不一定正确,因为您最终可能仍会遇到相同的错误。相反,挂载用 lvscan 列出的驱动器之一,而不是 `/dev/mapper/my_encrypted_volume` (11认同)

ame*_*hes 14

我遇到的一个问题是重复的卷组:我的恢复系统和要恢复的驱动器都是带有 LVM 的 ubuntu 系统。这就是为什么我有两个ubuntu-vg卷组(vgdisplay会显示两个,每个都有自己的 UUID,但我无法访问它们的逻辑卷)。

我的解决方案基于 Georg 的回答:

  • 启动一个 live-linux(这样你就不会遇到重复的卷组名称)
  • sudo cryptsetup luksOpen /dev/sdaX my_encrypted_volume
  • 出现提示时输入您的密码
  • sudo vgscan 现在应该拿起包含的卷/组。

  • 未来之龙:我们现在正在更改音量组名称。之后您将无法启动该驱动器!

    用于sudo vgrename ubuntu-vg ubuntu-vg2重命名卷组。

    如果您需要从该驱动器启动,您可以再次执行这些步骤,但将您的卷组重命名ubuntu-vg。另一种可能性是将引导配置更改为新的 vg-name。

现在解决了重复的 vg-name,我可以重新启动到我的常规系统,重做cryptsetup...vgscan然后挂载到/dev/mapper/ubuntu--vg2-root任何你喜欢的地方。

  • 看起来您也可以执行 `sudo vgdispay` 来查找 UUID 并使用它而不是重复名称来重命名一个卷。也就是说,获取 UUID 然后执行 `sudo vgrename <uuid> old` 对我有用。 (2认同)

kno*_*cte 9

上面的所有答案都假设用户已经知道哪个分区是加密的。来自一个不太喜欢命令行的人,我期待一些用户友好的答案......所以我的 2cents 在这里。

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

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

$ sudo cryptsetup luksOpen /dev/sdb4 someNameForMyVolume
Enter passphrase for /dev/sdb4: 
Run Code Online (Sandbox Code Playgroud)

但是得到了这个错误:

Cannot use device /dev/sdb4 which is in use (already mapped or mounted).
Run Code Online (Sandbox Code Playgroud)

好的,所以我猜 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
Run Code Online (Sandbox Code Playgroud)

啊哈!所以是/dev/dm-3

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

$ udisksctl mount -b /dev/dm-3
Object /org/freedesktop/UDisks2/block_devices/dm_2d3 is not a mountable filesystem.
Run Code Online (Sandbox Code Playgroud)

经过多次修补,我发现我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 sudo pvs -o +vg_uuid。uuid 将是一直显示在右侧的值,包含 7 个以破折号分隔的值。将它们复制到某个地方,因为我们将在下一步中使用它们。不要混淆 UUID 并复制错误的 UUID。只为您当前的 /dev/mapper/luks-xxx-whatever 设备复制一个。
  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完文件后,如果您希望卷仍可引导,则应将卷组重命名回。


D.S*_*nap 8

sdb1这里是一个例子,你应该输入你的设备名称,这些命令都不需要 root 权限

解锁加密磁盘

udisksctl unlock -b /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

插入正确的密码后,它将输出如下内容:Unlocked /dev/sdb1 as /dev/dm-3

然后挂载到/media/

udisksctl mount -b /dev/dm-3
Run Code Online (Sandbox Code Playgroud)

它应该输出如下内容:Mounted /dev/dm-3 at /media/yourUserName/sdb

卸载它

udisksctl unmount -b /dev/dm-3
Run Code Online (Sandbox Code Playgroud)

再次锁定

udisksctl lock -b /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

  • disksctl mount -b /dev/dm-4 对象 /org/freedesktop/UDisks2/block_devices/dm_2d4 不是可挂载的文件系统。 (2认同)