AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 790990
Accepted
pedda
pedda
Asked: 2025-02-13 09:20:18 +0800 CST2025-02-13 09:20:18 +0800 CST 2025-02-13 09:20:18 +0800 CST

Linux Mint 22:initramfs 的设置问题(luks 加密分区,带有用于 root、home、swap 的 LVM)

  • 772

我的设置:先决条件:

  • 双启动 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
    
    我的 SSD 分区表的 gparted 屏幕截图
  • /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"

**有什么想法吗?我做错了什么,或者可以做些什么不同的事情?**

linux-mint
  • 1 1 个回答
  • 53 Views

1 个回答

  • Voted
  1. Best Answer
    pedda
    2025-02-18T17:53:41+08:002025-02-18T17:53:41+08:00

    根据上面@frostschutz 的评论,解决方案是从任何 initramfs 脚本目录中删除我的自定义脚本。

    问题:它是如何增长的以及我最终如何减少它的:

    2个根本原因:

    1. 系统一定有一个启动顺序,尤其是虚拟安装的 LVM(dm-1 到 dm-7)的启动顺序,每次我将另一个 USB 棒放入系统时,该顺序最终都会改变(出于不同的原因,我有几个 USB 棒)。系统出现故障,启动过程中 LUKS 登录屏幕不知何故从 initramfs 中消失,或者 crypttab 在任何情况下都不存在。
    2. 使用可选的 USB 备份设备扩展我的 VG。

    解决问题的两个一般步骤和一个由于某些原因不起作用的步骤,我不明白

    1. 主要步骤 1:在系统上创建 /etc/crypttab(查看问题上方的示例),并提供 LVM 的 UUID
      • LUKS 加密物理卷的物理设备的 UUID
      • 我保存了每个配置的逻辑卷的 LVM(虚拟)的 UUID,并使用以下方法更新了 initramfs sudo update-initramfs -k all -c
    2. 编写一个小的激活脚本的步骤,使用部分模式激活 VG 的缺失部分失败,无论脚本被放置在 init-bottom 或 local-bottom 文件夹或 /etc/initramfs/scripts 中,在启动过程中都没有产生任何效果:
      • 所以我最终再次从 initramfs 中删除了它
    3. 主要 2:我删除了备份 USB 解决方案(因此有两个物理卷和一个逻辑卷),其中包含 vgsplit ubuntu-vg ubuntu-vg-backup /dev/mapper/ubuntu-luks_backupHome1 /dev/mapper/ubuntu-luks_backupHome2参数主 VG(参数 1)、新 VG 和虚拟逻辑卷
    4. 更新 initramfs 最终解决了这个问题,笔记本电脑通过 LUKS 登录屏幕启动

    仍然存在小问题

    1. 如果不存在可选的USB VG 组,则在启动过程中会有90 秒的超时,我可以通过将 crypttab 条目配置为 noauto 来解决这个问题,但这意味着我必须手动完成安装。由于我的 LUKS 设备都共享相同的密码,因此系统会自动解密在启动过程中找到的所有已配置设备。
    • 1

相关问题

  • 在 Linux Mint 上更新 libinput

  • linux java -version 仅适用于 root 用户[关闭]

  • 在 Linux Mint 上用 LightDM 替换 MDM 的正确程序是什么?

  • Linux Mint 内核损坏

  • Synaptic 包管理器文件设置

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve