我有一台笔记本电脑,上面安装的是全新安装的 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-1和dm-02表明Ubuntu 根目录和ubuntu-swap_1是指向dm-1和dm-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
方法是按住Esc或Shift在启动时进入 Grub 菜单,选择高级设置,然后选择恢复模式,最终将提供菜单来检查文件系统、启动文件等。 - 有时,LUKS 标头的一部分可能会损坏这可能会导致报头无用,从而使数据无法访问。如果你没有报头的备份,那么用于解密主密钥的损坏密钥可能已被泄露
dev_mapper
直到系统运行后才能看到驱动器,lvscan
因为 LUK 使用 LVM 在物理驱动器顶部作为容器运行。因此需要使用“设备映射器“首先。- 也就是说一个脚本在最终被挂载之前要先
udev
运行init-premount
到暴露状态。sda5_crypt
fstab
答案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 操作。