为什么我的加密LVM卷(LUKS设备)在引导时不会挂载?


15

我正在尝试按照本指南设置加密卷

一切都已设置,但在启动时装入加密卷失败,并显示以下错误:

fsck.ext4:尝试打开/ dev / mapper / safe_vault时没有此类文件或目录可能不存在的设备?

这是我的设置:

加密表

$ sudo cat /etc/crypttab
safe_vault  /dev/disk/by-uuid/d266ae14-955e-4ee4-9612-326dd09a463b  none    luks

注意:

uuid来自:

$ sudo blkid /dev/mapper/<my_logical_group>-safe_vault 
/dev/mapper/<my_logical_group>-safe_vault: UUID="d266ae14-955e-4ee4-9612-326dd09a463b" TYPE="crypto_LUKS" 

fstab

$ sudo cat /etc/fstab | grep safe_vault
/dev/mapper/safe_vault      /safe-vault     ext4    defaults    0 2

我做了什么...

因此,我去了devoper的网站,在常见问题常见问题解答中他们说:

检查内核中是否具有设备映射器和crypt目标。“ dmsetup目标”的输出应列出“ crypt”目标。如果不存在或命令失败,则将设备映射器和crypt-target添加到内核。

所以我做到了,结果证明我没有crypt目标:

$ sudo dmsetup targets
striped          v1.4.1
linear           v1.1.1
error            v1.0.1

问题是我不知道如何添加这样的目标。

我认为这(没有crypt目标)可能会导致crypttab配置在引导时被忽略,从而尝试装入该条目fstab失败,因为cryptsetup尚未将我的加密卷映射到/dev/mapper/safe_vault

注意:

可以成功地手动映射,安装和写入加密的卷:

$ sudo cryptsetup luksOpen /dev/mapper/<my_logical_group>-safe_vault safe_vault
Enter passphrase for /dev/mapper/<my_logical_group>-safe_vault: 

$ sudo mount /dev/mapper/safe_vault /safe_vault

这是映射和安装后的外观:

$ sudo lsblk -o name,uuid,mountpoint
NAME                                  UUID                                   MOUNTPOINT
sda                                                                          
├─sda1                                28920b00-58d3-4941-889f-6249357c56ee   
├─sda2                                                                       
└─sda5                                uhBLE7-Kcfe-RMi6-wrlX-xgVh-JfAc-PiXmBe 
  ├─<my_logical_group>-root (dm-0)       1bed9027-3cf7-4f8d-abdb-28cf448fb426   /
  ├─<my_logical_group>-swap_1 (dm-1)     a40c16c4-7d0c-46d7-afc8-99ab173c20bb   [SWAP]
  ├─<my_logical_group>-home (dm-2)       e458abb7-b263-452d-8670-814fa737f464   /home
  ├─<my_logical_group>-other (dm-3)      0a1eec42-6534-46e1-8eab-793d6f8e1003   /other
  └─<my_logical_group>-safe_vault (dm-4) d266ae14-955e-4ee4-9612-326dd09a463b   
    └─safe_vault (dm-5)               9bbf9f47-8ad8-43d5-9c4c-dca033ba5925   /safe-vault
sr0  

更新

  • 事实证明,我确实有crypt目标,但要显示出来,dmsetup targets我必须首先cryptsetup luksOpen <my-device>
  • 我尝试UUID根据@Mikhail Morfikov的回答使用s代替,但是在启动时仍然失败。

我仍然认为问题在于,cryptsetup luksOpen在启动时不以某种方式映射加密卷(用打开),因此不/dev/mapper/<safe_vault or UUID>存在,然后尝试挂载(fstab)失败。

更新2

事实证明,我没有在启动时挂载所需的脚本。请参阅@MikhailMorfikov答案中的注释。


1
手动执行后,会显示加密目标luksOpen吗?我希望如果不存在,luksOpen也将失败。
2014年

好的,在sudo cryptsetup luksOpen出现两个新目标sudo dmsetup targetserror和之后crypt。我想我需要改变这个问题……
pgpb.padilla 2014年

它是分区还是文件容器?
Mikhail Morfikov 2014年

/dev/mapper/<my-logical-volume>-safe_vault是用LVM创建的逻辑卷,并且/dev/mapper/safe_vault是通过do映射到的设备cryptsetup luksOpen /dev/mapper/<my-logical-volume>-safe_vault。您知道是否crypttab可以使用LVM卷吗?
pgpb.padilla 2014年

我在luks分区中有lvm,实际上我已加密了整个1,5TB磁盘(除外/boot)。全部安装在启动时没有问题。确定要initramfs在编辑后更新/etc/crypttab吗?您能否显示lsblk -o name,uuid,mountpoint何时安装并正常运行的输出?
Mikhail Morfikov 2014年

Answers:


16

您必须注意UUID。例如,这是我的配置:

# lsblk -o name,uuid,mountpoint
├─sda2                         727fa348-8804-4773-ae3d-f3e176d12dac
│ └─sda2_crypt (dm-0)          P1kvJI-5iqv-s9gJ-8V2H-2EEO-q4aK-sx4aDi
│   ├─debian_crypt-swap (dm-1) 3f9f24d7-86d1-4e21-93e9-f3c181d05cf0   [SWAP]
│   ├─debian_crypt-tmp (dm-2)  93fc8219-f985-45fb-bd5c-2c7940a7512d   /tmp
│   ├─debian_crypt-home (dm-3) 12e8566c-8f0f-45ec-8524-6d9d9ee91eae   /home
│   └─debian_crypt-root (dm-4) 9685570b-4c9e-43ea-815e-49d10dc7a1bf   /

我有一个带有4个卷(LVM)的加密分区(sda2)。我需要在正确的文件中设置两个UUID。sda2 UUID转到,/etc/crypttab卷UUID(例如debian_crypt-root)转到/etc/fstab

因此,它将是:

# cat /etc/crypttab
sda2_crypt              UUID=727fa348-8804-4773-ae3d-f3e176d12dac   none        luks

# cat /etc/fstab
UUID=9685570b-4c9e-43ea-815e-49d10dc7a1bf       /               ext4    defaults,errors=remount-ro              0 1

更改/etc/crypttab文件后,您必须重建initramfs:

# update-initramfs -u -k all

注意

cryptsetup必须安装该软件包,因为它具有启动脚本,这些脚本提供了在引导时自动挂载加密卷的支持。

为什么要提这个呢?好吧,如果安装Debian的喘息期间,您设置LVM安装软件包cryptsetup斌libcryptsetup4lvm2而不是cryptsetup,因此你可以使用工具来设置LVM和陆氏设备,但没有脚本需要在引导时挂载LUKS设备。这些都在cryptsetup软件包中。


我尝试使用,UUID但出现相同的错误。我将详细更新问题。
pgpb.padilla 2014年

嗨,这太长了,我们可以聊天吗?
pgpb.padilla 2014年

顺便说一句,即使您不编辑/ etc / crypttab,如果您更改某些加密设置,磁盘似乎也会为您编辑它。这个答案帮助我解决了磁盘上的错误(以及尝试撤消磁盘时可能犯的更多错误)。
sage

0

@mikhail Morfikov的答案似乎涵盖了initramfs阶段的安装过程。替代方法(如果不是根文件系统)是在加载linuz内核之后,通过systemd自动解密并安装分区。当然,只有在运行systemd时这才可能。我将在这里说明方法:

/etc/crypttab条目:

crypt2 UUID=e412-blahblah /path/to/crypt2.key luks,noauto

noauto是一条指令,不要initramfs阶段尝试解密磁盘。

上面e412-blahblah是包含luks系统的分区的UUID,在我的情况下是一个partition /dev/sdb2

# blkid | grep sdb2
/dev/sdb2: UUID="e41274d8-fd83-4632-b560-ad0ba113ae75" TYPE="crypto_LUKS" PARTUUID="5673a908-02"

在linuz内核启动期间,systemd将读取该/etc/crypttab文件并创建一个运行时服务文件/run/systemd/generator/systemd-cryptsetup@crypt2.service。但是,该服务不会自动运行。您可以手动运行

systemctl start systemd-cryptsetup@crypt2.service

但要解密然后在启动期间将其挂载,/etc/fstab可能需要如下所示:

/dev/mapper/crypt2--vg-data /media/crypt-data ext4 defaults,noauto,user,x-systemd.automount,x-systemd.requires=systemd-cryptsetup@crypt2.service 0 2

x-systemd.automount是对systemd进行安装的指令/media/crypt-data,并且x-systemd.requires=systemd-cryptsetup@crypt2.service是对systemd的指示crypt2,在可能之前需要解密。

systemd中,直到第一次访问该目录时,它才真正挂载该目录,例如ls /media/crypt-data,它将及时挂载并在之后出现/proc/mounts


有关

您可能会问“ *为什么在根文件系统中有一个带有密钥的加密数据磁盘?”。这是因为根文件系统也已加密,因此密钥是安全的。根文件系统在启动的initramfs阶段被解密,这是米哈伊尔的回答。我在/etc/crypttab文件中有另一个条目:

crypt1 UUID=8cda-blahbalh none luks,discard,lvm=crypt1--vg-root

在这里介绍了设置方法和启动USB

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.