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)
Dav*_*lla 101
@Georg Schölly 的回答中的步骤当时对我不起作用,尽管它们现在可能会起作用,但在一些 Ubuntu 版本之后。当时,在这sudo mount /dev/mapper/my_encrypted_volume /media/my_device
一步之后,我得到了错误:
挂载:未知文件系统类型“LVM2_member”
相反,我使用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)
从那里我可以访问数据:)
卸载设备:
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-root
和ubuntu-root
太)。找出名称的一种简单方法是在解锁 LUKS 分区后运行以下命令:
ls -la /dev/mapper
然后查看ls
命令的输出,您需要的名称通常是符号链接到的名称/dev/dm-1
设备映射器名称,替代:上一个命令的替代方法是运行:
lsblk -e7
在那里,您将能够以树视图的形式查看设备名称映射。该-e 7
选项用于从输出中排除由安装的快照创建的循环设备 (ID 7)。只是为了减少混乱。
sudo lvs
命令来查找卷组和逻辑卷的名称sudo lvchange -an ubuntu-vg
命令,然后才能从 GUI 锁定它。小智 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)
ame*_*hes 14
我遇到的一个问题是重复的卷组:我的恢复系统和要恢复的驱动器都是带有 LVM 的 ubuntu 系统。这就是为什么我有两个ubuntu-vg
卷组(vgdisplay
会显示两个,每个都有自己的 UUID,但我无法访问它们的逻辑卷)。
我的解决方案基于 Georg 的回答:
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
任何你喜欢的地方。
上面的所有答案都假设用户已经知道哪个分区是加密的。来自一个不太喜欢命令行的人,我期待一些用户友好的答案......所以我的 2cents 在这里。
/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 -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。sudo pvs -o +vg_uuid
。uuid 将是一直显示在右侧的值,包含 7 个以破折号分隔的值。将它们复制到某个地方,因为我们将在下一步中使用它们。不要混淆 UUID 并复制错误的 UUID。只为您当前的 /dev/mapper/luks-xxx-whatever 设备复制一个。sudo vgrename UUIDOFYOURDISKHERE oldhd
更改旧磁盘的卷组您可以将“oldhd”更改为您想要的任何内容,只要它与当前磁盘的卷组名称不同即可。执行此步骤可消除与卷组名称的冲突,这将允许您现在使卷可用。vgchange -a y
使卷处于活动状态。sudo mkdir /media/<yourUserName>/someDir
sudo mount /dev/oldhd/root /mnt/oldhd
。ubuntu-vg
完文件后,如果您希望卷仍可引导,则应将卷组重命名回。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)