LUKS LVM 设备通过 UUID 映射,而不是 sda5_crypt

LUKS LVM 设备通过 UUID 映射,而不是 sda5_crypt

我有一台笔记本电脑,上面安装的是全新安装的 14.04 系统,我认为是基本的 LUKS 单磁盘。更新到 16.04 系统后,我发现我的 initrd 不支持 LUKS,因此无法启动。

罪魁祸首似乎是我的 /dev/mapper 没有“sda5_crypt”条目,而是通过 physicald 磁盘 UUID 链接了 dm-0。这可能是因为 initrd 中的某些东西执行了相当于 cryptsetup open /dev/sda5 UUID=xxx 的操作(而不是将 sda5_crypt 作为最后一个参数)

$ ls -l /dev/mapper
total 0
crw------- 1 root root 10, 236 Aug  3 13:05 control
lrwxrwxrwx 1 root root       7 Aug  3 13:05 f401322a-1596-47e7-a1c8-844ba27ef326 -> ../dm-0
lrwxrwxrwx 1 root root       7 Aug  3 13:05 ubuntu-root -> ../dm-1
lrwxrwxrwx 1 root root       7 Aug  3 13:05 ubuntu-swap_1 -> ../dm-2


$ sudo sfdisk -l /dev/sda                                                                                                                                             
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors                                                                                                                         
Units: sectors of 1 * 512 = 512 bytes                                                                                                                                                   
Sector size (logical/physical): 512 bytes / 512 bytes                                                                                                                                   
I/O size (minimum/optimal): 512 bytes / 512 bytes                                                                                                                                       
Disklabel type: dos                                                                                                                                                                     
Disk identifier: 0x000a9196                                                                                                                                                             

Device     Boot  Start       End   Sectors   Size Id Type                                                                                                                               
/dev/sda1  *      2048    499711    497664   243M 83 Linux                                                                                                                              
/dev/sda2       501758 500117503 499615746 238.2G  5 Extended                                                                                                                           
/dev/sda5       501760 500117503 499615744 238.2G 83 Linux


 sudo lsblk
NAME                                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                                        8:0    0 238.5G  0 disk  
├─sda1                                     8:1    0   243M  0 part  /boot
├─sda2                                     8:2    0     1K  0 part  
└─sda5                                     8:5    0 238.2G  0 part  
  └─f401322a-1596-47e7-a1c8-844ba27ef326 252:0    0 238.2G  0 crypt 
    ├─ubuntu-root                        252:1    0 230.3G  0 lvm   /
    └─ubuntu-swap_1                      252:2    0   7.9G  0 lvm   [SWAP]
sr0                                       11:0    1  1024M  0 rom   

在 LUKS 的“正常”安装中,/dev/mapper/sda5_crypt 将是 dm-0 的链接。/usr/share/initramfs-tools/hooks/cryptroot 按名称查找此设备,并将其作为 /etc/crypttab 中的第一列进行查找,这让我很困惑。

我如何影响 /dev/mapper 中的名称?

答案1

盲目地回答你的确切问题

我如何影响中的名称/dev/mapper

一般来说,如果你手动将 LUKS 加密硬盘安装为单独的驱动器(而不是你正在运行的系统),那么“sda5_crypt映射名称cryptsetup luksOpen当您运行时声明科文纳已经指出。

由于您是从启动系统启动的,并且系统会要求您输入密码才能继续,因此此过程会自动发生(您无需自己输入命令),并且在后台发生,因此名称由执行脚本声明密码设置

因此,如果您想影响名称,只需修改cryptsetup启动时运行的脚本即可。该脚本位于以下位置之一:

/usr/share/initramfs-tools/scripts/local-top/cryptroot

或者

/etc/initramfs-tools/scripts/local-top/cryptroot

您只需使用sudo vi或修改它sudo nano即可完成您的要求。

可能有一些教科书课程需要在这里修改,但我认为系统范围的更改是合适的,并且可以通过后者完成。完成后,只需记住随后运行以下命令以确保应用更改:

update-initramfs -u

就这些了...你的答案。值得一提的是这个漏洞来自 2012 年这可能是不想更改 root 目标名称的充分理由/etc/crypttab


但问题是!

如果您的目标是解决启动问题,请务必注意,上面提供的参考内容与ls -l /dev/mapper您想象的并不完全一样。

的输出ls -l只是有关给定目录中文件的信息,而-l只是告诉它使用长列表格式。你在右边看到的是dm-1dm-02表明Ubuntu 根目录ubuntu-swap_1是指向dm-1dm-2分别。您可以导航至以下网址亲自查看/dev/mapper

cd /dev/mapper
stat ubuntu-root

将输出类似以下内容的内容:

File:'ubuntu-root' -> '../dm-1'
Size: 7              Blocks: 0    IO Block: 4096   symbolic link
...

那么,这意味着什么?

如果你遇到启动问题,这可能与你的/dev/mapper 目录完全没有。不过,你关于使用磁盘的 UUID 而不是其他映射名称(例如“sda5_crypt“尽管这与您或系统如何调用该分区或与分区交互。实际上,使用 UUID 时,它提供了更强大的参考,系统甚至可以在解密之前看到正确的 UUID,并知道最终它将是它正在寻找的根驱动器。

具体来说,当你运行sudo lsblk上面的命令时,根据当时的输出,可以知道你的系统已经安装了 2LVM 驱动器恰如其分。只是你的“sda5“ 您期望成为”sda5_crypt“解密后,就是所谓的 LVM,或逻辑卷管理形式。所以如果你看到sda5系统现在如何看待它,您实际上会将其视为 3 个分区,而如果您运行lvscan它,可能会将分区报告为:

/dev/ubuntu/root 安装在“/”(即你当前的根目录)
/dev/ubuntu/swap_1 安装为 [SWAP](即无处可去但被标记为 SWAP 设备)

而如果你假设从另一个系统访问它,而将它安装在/mnt代表你访问此驱动器根目录的位置,那么你将使用更精确的“设备映射' 可以这么说:

mount /dev/mapper/ubuntu-root  /mnt
mount /dev/mapper/ubuntu-swap_1 /rfs

注意两者之间的区别,以及系统如何使用它来识别它lvscan,在我假设的外部系统视图中,又称“物理视图”,而第一个是“虚拟视图”。

仅供参考,如果您没有解密驱动器,您将无法通过其映射名称看到 LVM 分区,甚至无法看到 sda5 中有 2 个分区。

无法通过请求的答案解决问题

由于系统似乎已正确安装所有驱动器,此时最好探索与启动相关的问题的其他原因,因为“LUKS 支持”是软件问题并满足具体要求最低硬件要求s,只是为了清楚起见。

总结一下,虽然它似乎表明根驱动器与 dm-1 有关联,但实际上它表明它是dm-1命名方案实际上是 ubuntu-root。如果您有一个脚本,它调用“sda5_crypt“那么应该在脚本中更改这一点,而不是试图改变整个系统。

如果你有理由相信启动问题是由断开连接引起的,我会检查 UUID 是否正确映射fstab

cat /etc/fstab

如果你仍然有疑问,你可以cryptroot使用以下命令检查脚本的目标方案

cat /etc/initramfs-tools/conf.d/cryptroot

您会发现一行cryptroot与映射名称关联并使用驱动器的 UUID 分配源,类似于其内的发音fstab

笔记

对于无法启动的系统的其他有用信息

  • 最简单的运行fsck方法是按住EscShift在启动时进入 Grub 菜单,选择高级设置,然后选择恢复模式,最终将提供菜单来检查文件系统、启动文件等。
  • 有时,LUKS 标头的一部分可能会损坏这可能会导致报头无用,从而使数据无法访问。如果你没有报头的备份,那么用于解密主密钥的损坏密钥可能已被泄露
  • dev_mapper直到系统运行后才能看到驱动器,lvscan因为 LUK 使用 LVM 在物理驱动器顶部作为容器运行。因此需要使用“设备映射器“首先。
  • 也就是说一个脚本在最终被挂载之前要先udev运行init-premount到暴露状态。sda5_cryptfstab

答案2

这个问题的根源似乎是使用 16.04 作为救援 CD 来解锁/挂载/chroot/修复包/更新 initramfs。

如果您在启动 CD 的统一中解锁 LUKS 设备,它会使用 UUID 调用 cryptsetup。 /usr/share/initramfs-tools/hooks/cryptopen然后无法理解略有不同的命名/etc/crypttab并确定您没有带 LUKS 的根设备。

修复方法是再次启动救援 CD,不要双击 Unity 启动器中的设备。运行

cryptsetup -v lukeOpen /dev/sda5 sda5_crypt

并继续执行相同的 mount/chroot/update-initramfs 操作。

相关内容