总结:在当前的 Ubuntu 安装中添加新的 SSD 后,启动时间从 8 秒增加到 70 秒。
你好,
我的系统在双启动设置中运行 Windows 10 和 Ubuntu 20.04。当我安装这两个系统时,每个操作系统都有一个自己的 SSD,我还在 LVM 层中的 LUKS 容器内安装了 Ubuntu。输出lsblk
如下所示:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 931,5G 0 disk
├─sda1 8:1 1 1G 0 part /boot
└─sda2 8:2 1 930,5G 0 part
└─sda2_crypt 253:0 0 930,5G 0 crypt
├─ubuntu--vg-swap 253:1 0 40G 0 lvm [SWAP]
├─ubuntu--vg-root 253:2 0 40G 0 lvm /
└─ubuntu--vg-home 253:4 0 850,5G 0 lvm /home
通过此设置,输入磁盘加密密钥和登录提示之间的启动时间约为 8 秒。
几天前,我向系统添加了另一个 SSD。我用与旧 SSD 相同的密码加密了新磁盘,然后将新 SSD 添加到旧 SSD 的卷组中,并将新空间添加到主 LV。现在的输出lsblk
如下所示:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 931,5G 0 disk
├─sda1 8:1 1 1G 0 part /boot
└─sda2 8:2 1 930,5G 0 part
└─sda2_crypt 253:0 0 930,5G 0 crypt
├─ubuntu--vg-swap 253:1 0 40G 0 lvm [SWAP]
├─ubuntu--vg-root 253:2 0 40G 0 lvm /
└─ubuntu--vg-home 253:4 0 1,6T 0 lvm /home
sdb 8:16 1 931,5G 0 disk
└─sdb1 8:17 1 931,5G 0 part
└─sdb1_crypt 253:3 0 931,5G 0 crypt
└─ubuntu--vg-home 253:4 0 1,6T 0 lvm /home
我还将新磁盘添加到 crypttab 文件中:
sda2_crypt UUID=4ee8650c-bb07-4223-aab4-9b6327b9c641 none luks,discard
sdb1_crypt UUID=9c7a67f9-32fb-432d-a21f-5b42553911fc none luks,discard
系统正在启动,但输入磁盘加密密钥和登录提示之间的启动时间已增加到约 70 秒。输入磁盘加密密钥后,会打印两条警告消息,并且系统会挂起约 60 秒:
WARNING: Couldn't find device with uuid T8h7bF-ZJGn-rHTL-o0A5-fKtU-b1E9-dqV2TB.
WARNING: VG ubuntu-vg is missing PV T8h7bF-ZJGn-rHTL-o0A5-fKtU-b1E9-dqV2TB (last written to /dev/mapper/sdb1_crypt).
提到的 UUID 引用新 SSD (sdb1_crypt) 上的 LVM 层。
我试图找出谁是导致启动时间变长的原因,但无济于事。我得出结论,GRUB 不应该是这里的问题,因为它能够启动内核并且不执行任何 LUKS/LVM 特定任务。Systemd 负责缓存加密密钥,但日志显示两个磁盘的解密时间仅相差 2 秒:
Jun 08 16:46:47 nyx lvm[1157]: pvscan[1157] PV /dev/mapper/sda2_crypt online, VG ubuntu-vg incomplete (need 1).
...
Jun 08 16:46:49 nyx lvm[1538]: pvscan[1538] PV /dev/mapper/sdb1_crypt online, VG ubuntu-vg is complete.
systemd-analyze
表明大部分时间都被内核使用了:
Startup finished in 26.113s (firmware) + 3.895s (loader) + 1min 25.304s (kernel) + 7.837s (userspace) = 2min 3.150s
graphical.target reached after 7.830s in userspace
我不知道内核在等什么,也不知道接下来该往哪个方向走。也许有谁对启动过程有更深的理解,可以给我指明正确的方向?
答案1
我想,经过几天的搜索,我在下面的链接中找到了这个问题的答案。
解决方案
我通过在 /etc/crypttab 中添加 initramfs 标志并使用 keyscript=decrypt_keyctl 而不是密钥文件来解决这个问题,以避免为第二个驱动器输入两次密码:
luksSSD UUID=[UUID1] 无
luks,initramfs,丢弃,keyscript=decrypt_keyctl luksHDD UUID=[UUID2]
无 luks,initramfs,keyscript=decrypt_keyctl之后需要执行update-initramfs -c -k all,问题就解决了。