我的设置:先决条件:
- 双启动 Windows 10/以前为 Ubuntu 24.04(来自 22.04)
- 分区表:
/dev/nvme0n1p7 202G 96M 202G 1% /ntfs_data /dev/nvme0n1p3 230G 54G 177G 24% /windows /dev/nvme0n1p5 3,0G 288M 2,6G 11% /boot /dev/mapper/ubuntu--vg-home 2,8T 1,7T 964G 64% /home /dev/nvme0n1p1 256M 158M 99M 62% /boot/efi tmpfs 1,6G 300K 1,6G 1% /run/user/1000 /home/xxx/.Private 2,8T 1,7T 964G 64% /home/xxx /dev/mapper/usb1TB_202304_crypt 938G 890G 559M 100% /backup1TB /backup1TB/home_xxx_bck 938G 890G 559M 100% /backup1TB/home_xxx_bck
- /dev/nvme0n1p6 是配置了 LVM 的 luks 加密设备:
- 根 (243 GB)
- 家庭 (2.8 TB)
- 交换 ( 16 GB)
安装导致initramfs出错的步骤:
我使用了 Linux Mint 22 USB 安装程序(图片下载于 2025 年 1 月)。我设法安装了 LVM2 和 cryptsetup 包以获得 LVM 和 LUKS 的帮助。我在 2022 年在 Ubuntu 22.04 下配置了 LVM,如下所示:
# vgs
WARNING: Couldn't find device with uuid CQVk01-WJQL-pjIi-opcT-oESN-UOb1-judhlH.
WARNING: Couldn't find device with uuid I5OUXJ-OkxW-403c-rEVJ-BmyG-Rd4M-r7SSFs.
WARNING: VG ubuntu-vg is missing PV CQVk01-WJQL-pjIi-opcT-oESN-UOb1-judhlH (last written to /dev/mapper/ubuntu-vg1).
WARNING: VG ubuntu-vg is missing PV I5OUXJ-OkxW-403c-rEVJ-BmyG-Rd4M-r7SSFs (last written to /dev/mapper/ubuntu-vg2).
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 3 4 0 wz-pn- <6,01t <180,97g
# pvs
WARNING: Couldn't find device with uuid CQVk01-WJQL-pjIi-opcT-oESN-UOb1-judhlH.
WARNING: Couldn't find device with uuid I5OUXJ-OkxW-403c-rEVJ-BmyG-Rd4M-r7SSFs.
WARNING: VG ubuntu-vg is missing PV CQVk01-WJQL-pjIi-opcT-oESN-UOb1-judhlH (last written to /dev/mapper/ubuntu-vg1).
WARNING: VG ubuntu-vg is missing PV I5OUXJ-OkxW-403c-rEVJ-BmyG-Rd4M-r7SSFs (last written to /dev/mapper/ubuntu-vg2).
PV VG Fmt Attr PSize PFree
/dev/mapper/ubuntu-luks ubuntu-vg lvm2 a-- 3,21t <180,97g
[unknown] ubuntu-vg lvm2 a-m <1,40t 0
[unknown] ubuntu-vg lvm2 a-m <1,40t 0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
backupHome ubuntu-vg -wi-----p- 2,79t
home ubuntu-vg -wi-ao---- 2,78t
root ubuntu-vg -wi-ao---- <247,33g
swap_1 ubuntu-vg -wi-ao---- 16,00g
我打开了一个 bash,然后打开 LUKS 并将 LVM 设置为活动状态(LVM 以前是在 2022 年的 22.04 下创建的):
# cryptsetup luksOpen /dev/nvmeon1p6 ubuntu-luks
# lvchange -ay ubuntu-vg
然后我启动了安装应用程序,并选择手动模式,在分配分区时,我按照上面所示进行配置,将根和 /dev/nvme0n1p5 格式化为(未加密)/boot 分区。
之后,我启动了新安装的 Linux Mint 22。但有趣的是,除了第一次启动时,启动顺序中的图形密码对话框只弹出一次并解密了 luks,但无法正确分配 LVM 分区。之后甚至找不到或检测到 LUKS 加密卷,在每种情况下,我最终都在繁忙的盒装 initramfs 中等待了很长时间。
在这里我总是必须重复上述两个指令,然后才能退出 initramfs 并继续启动我的系统。
我发现 /etc/crypttab 中没有 crypttab,于是我安装了一个
# cat /etc/crypttab
# <target name> <source device> <key file> <options>
# mounted /, /home, swap_1
ubuntu-luks UUID=b910aded-9314-403f-a350-7892ba95ffd5 none luks
# mounted as /backupHome LV part1, partial Loading (mustn't be present during boot)
ubuntu-luks_backupHome1 UUID=b1d9ec9c-7dac-445f-998b-695b2ddf6daa none luks
#ubuntu-luks_backupHome1 UUID=b1d9ec9c-7dac-445f-998b-695b2ddf6daa none luks,noauto
# mounted as /backupHome LV part2, partial loading (mustn't be present during boot)
ubuntu-luks_backupHome2 UUID=9c5b65e8-5785-44be-85c7-3009cbc1e02a none luks
#ubuntu-luks_backupHome2 UUID=9c5b65e8-5785-44be-85c7-3009cbc1e02a none luks,noauto
usb1TB_202304_luks UUID=4c4b603f-9146-4cb0-9621-9aa098ec592c none luks
# ubuntu-luks UUID=b910aded-9314-403f-a350-7892ba95ffd5 none luks # mounted on /
# ubuntu-luks_backupHome1 UUID=b1d9ec9c-7dac-445f-998b-695b2ddf6daa none luks,noauto # mounted as /backupHome, part1
# ubuntu-luks_backupHome2 UUID=9c5b65e8-5785-44be-85c7-3009cbc1e02a none luks,noauto # mounted as /backupHome, part2
和 /etc/fstab:
# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/nvme0n1p5 during installation
UUID=712868f5-29cc-429a-b535-375a3d868fa3 /boot ext4 defaults 0 2
# /boot/efi was on /dev/nvme0n1p1 during installation
UUID=E079-2792 /boot/efi vfat umask=0077 0 1
/dev/mapper/ubuntu--vg-home /home ext4 defaults 0 2
# /ntfs_data was on /dev/nvme0n1p7 during installation
UUID=3B269E2A1843CA0B /ntfs_data ntfs defaults,umask=007,gid=46 0 0
# /windows was on /dev/nvme0n1p3 during installation
UUID=4C30FF1730FF06AC /windows ntfs defaults,umask=007,gid=46 0 0
/dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
/dev/mapper/ubuntu--vg-backupHome /backupHome ext4 defaults,nofail 0 2
然后我更新了 initramfs
$ sudo update-initramfs -k all -c
现在我永久修复了 luks 加密(因此对话框每次启动时都会出现,就像描述的一样)但是 lvm 的激活
$ lvchange -ay ubuntu-vg
不是在 initramfs 中完成的!
我如何才能实现最后一步——激活 LV 组?
- 注意:作为 USB 驱动器的备份 lvm 媒体通常在启动期间不存在!
# mounted as /backupHome LV part1, partial Loading (mustn't be present during boot) ubuntu-luks_backupHome1 UUID=xxx none luks #ubuntu-luks_backupHome1 UUID=xxx none luks,noauto # mounted as /backupHome LV part2, partial loading (mustn't be present during boot) ubuntu-luks_backupHome2 UUID=xxx none luks #ubuntu-luks_backupHome2 UUID=xxx none luks,noauto
[编辑 101502013]:今天它启动时出现类似以下错误
/sbin/lvchange not found
在 initramfs 中。我发现在 中有一个不同之处initrams
,那就是lvm
的命令(如lvs, pvs, vgs, lvchange, lvcreate
等)仅使用主命令lvm
作为前缀。我还发现在/sbin
中initramfs
只有一个符号链接,即奇怪的别名 lvm -> vgchange,似乎在应用链接后 arg0 变成了 arg1。这是我接下来尝试的方法,将此链接放入 initramfs 中。
[EDIT2] 我首先将 lvm 启动和激活脚本放入 local-top,然后放入 init-bottom,最后放入 local-bottom,并相应地更新了 initramfs,
update-initramfs -k all -c
但没有任何成功,LUKS 已解密,但脚本要么未运行,要么运行得太早,每次它最终都会出现在 initramfs 控制台及其 busybox 中。当我手动执行脚本并退出时,它每次都会继续启动。但这非常不舒服,而且由于时间滞后很多,因此同样耗时,它不是执行脚本,而是无休止地重复产生此输出行:
mdadm: No array found in config file or automatically
这是我的脚本的实际位置:
# tree /etc/initramfs-tools/
/etc/initramfs-tools/
├── conf.d
│ └── cryptsetup
├── hooks
├── initramfs.conf
├── modules
├── scripts
│ ├── init-bottom
│ ├── init-premount
│ ├── init-top
│ ├── local-bottom
│ │ └── lvm
│ ├── local-premount
│ ├── local-top
│ ├── nfs-bottom
│ ├── nfs-premount
│ ├── nfs-top
│ └── panic
└── update-initramfs.conf
14 directories, 5 files
该脚本看起来可以执行如下:
#!/bin/sh
# Check and activate LVM volumes regardless of input arguments
# Log the intention to activate LVM volumes
echo "Activating LVM volumes..." > /dev/console
# Activate the volume group
if /sbin/vgchange -ay ubuntu-vg; then
echo "Logical volume group ubuntu-vg successfully activated." > /dev/console
/sbin/lvm lvchange -ay ubuntu-vg --activationmode partial
else
echo "Failed to activate logical volume group ubuntu-vg." > /dev/console
fi
在这期间,我压缩了一个 initrd 映像以查看 cryptsetup 命令的运行位置,但它似乎有点复杂:
unmkinitramfs -v initrd.img-6.8.0-53-generic /tmp/initrd
然后我搜索了cryptsetup
:
# find /tmp/initrd/ -type f -iname "*" -exec grep -Hn "cryptsetup " {} \;
grep: /tmp/initrd/main/usr/sbin/cryptsetup: binary file matches
grep: /tmp/initrd/main/usr/lib/x86_64-linux-gnu/libcryptsetup.so.12.10.0: binary file matches
grep: /tmp/initrd/main/usr/lib/x86_64-linux-gnu/libmount.so.1.1.0: binary file matches
/tmp/initrd/main/usr/lib/cryptsetup/functions:320: if [ -e "$CRYPTTAB_OPTION_header" ] && /sbin/cryptsetup isLuks -- "$CRYPTTAB_OPTION_header"; then
/tmp/initrd/main/usr/lib/cryptsetup/functions:324: if /sbin/cryptsetup isLuks -- "$s"; then
/tmp/initrd/main/usr/lib/cryptsetup/functions:366: /sbin/cryptsetup -T1 \
/tmp/initrd/main/usr/lib/cryptsetup/functions:396: /sbin/cryptsetup -T1 \
/tmp/initrd/main/usr/bin/cryptroot-unlock:89:# birth date) of the cryptsetup process with same $CRYPTTAB_NAME.
/tmp/initrd/main/usr/bin/cryptroot-unlock:118: # find the cryptsetup process with same $CRYPTTAB_NAME
/tmp/initrd/main/usr/bin/cryptroot-unlock:173: echo "cryptsetup: cryptsetup failed, bad password or options?" >&2
/tmp/initrd/main/scripts/local-top/cryptroot:127: # our `cryptroot-unlock` script searches for cryptsetup processes
/tmp/initrd/main/scripts/local-top/cryptroot:164: cryptsetup_message "ERROR: $CRYPTTAB_NAME: cryptsetup failed, bad password or options?"
/tmp/initrd/main/scripts/local-top/cryptroot:177: /sbin/cryptsetup remove -- "$CRYPTTAB_NAME"