如果我有一个加密的外部磁盘(或不在 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-root
andubuntu-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
以上所有答案都假设用户已经知道哪个分区是加密分区。作为一个不太喜欢命令行的人,我期望得到一些用户友好的答案... 所以这是我的一点看法。
- 打开ubuntu的“磁盘”应用程序。
- 在左侧面板中找到已安装的硬盘。
- 单击名称中带有“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 -v
和sudo vgdisplay
显示了两个具有相同卷组名称的条目。但是,我发现了一种比他的方法更好的解决方法(无需启动 LiveCD 即可重命名卷组!),即关联,我将在上面引用(以防链接坏了……):
如果您运行,ls -la /dev/mapper/
您应该会看到一个luks-xxxxxx-xxxxx-xxxx
或类似的文件。这是当 Ubuntu 使用对话框提示输入加密密码但无法打开时创建的映射(对话框所做的只是调用luksOpen
并将其映射到该 /dev/mapper/luks-xxx 文件)。现在:
- 运行命令以确保物理卷可用
sudo pvdisplay
。它应该是 /dev/mapper/luks-xxx-whatever。 - 通过运行获取卷的 uuid。uuid
sudo pvs -o +vg_uuid
将是显示到最右边的值,包含 7 个以破折号分隔的值。将它们复制到某个地方,因为我们将在下一步中使用它们。不要混淆 UUID 并复制错误的 UUI。只复制当前 /dev/mapper/luks-xxx-whatever 设备的 UUI。 - 通过运行以下命令更改旧磁盘的卷组
sudo vgrename UUIDOFYOURDISKHERE oldhd
您可以将“oldhd”更改为任何您想要的内容,只要它与当前磁盘的卷组名称不同即可。执行此步骤可消除与卷组名称的冲突,从而使您现在可以使卷可用。 - 运行命令
vgchange -a y
以使卷处于活动状态。 - 在某处为挂载点创建一个文件夹,例如:
sudo mkdir /media/<yourUserName>/someDir
- 安装它:
sudo mount /dev/oldhd/root /mnt/oldhd
。 - 处理完文件后,
ubuntu-vg
如果您希望卷仍然可启动,则应该将卷组重命名为。