我正在运行 Debian 测试 (Buster),并且我正在从 Grub2 切换到 systemd,因为我无法让 Grub2 工作,有人建议我尝试使用 systemd-boot。
启动/根驱动器位于主板上的 eMMC 驱动器上,而数据驱动器位于 mSATA SSD 上。
我的 systemd-boot 工作一半,它在启动时崩溃并显示此消息
Begin: Running /scripts/local-block ... done.
Begin: Running /scripts/local-block ... done.
done.
Gave up waiting for root file system device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! PARTUUID=2251a5a4-6c18-425c-9264-df971d297b09 does not exist. Dropping to shell!
我已经重新启动并设法使用 SuperGrub USB 磁盘登录,我可以看到 UUID 确实与我的根分区匹配,所以我不知道为什么它找不到它。
/proc/cmdline 输出
BOOT_IMAGE=/boot/vmlinuz-4.19.0-5-amd64 root=UUID=2251a5a4-6c18-425c-9264-df971d297b09 ro
/boot 和 /boot/efi 列表
kodi@BB-8:~$ ls /boot
config-4.15.0-3-amd64 grub System.map-4.15.0-3-amd64 vmlinuz-4.19.0-5-amd64
config-4.19.0-5-amd64 initrd.img-4.15.0-3-amd64 System.map-4.19.0-5-amd64 vmlinuz-4.9.45-ubilinux+
config-4.9.45-ubilinux+ initrd.img-4.19.0-5-amd64 System.map-4.9.45-ubilinux+
efi initrd.img-4.9.45-ubilinux+ vmlinuz-4.15.0-3-amd64
kodi@BB-8:~$ sudo ls /boot/efi
debian EFI loader
kodi@BB-8:~$ sudo ls /boot/efi/debian
drwx------ 2 root root 4096 Jul 16 22:31 .
drwx------ 5 root root 4096 Jan 1 1970 ..
-rwx------ 1 root root 31595838 Jul 26 11:09 initrd.img-4.15.0-3-amd64
-rwx------ 1 root root 33228805 Jul 26 11:09 initrd.img-amd64
-rwx------ 1 root root 4933392 Jul 26 11:09 vmlinuz-4.15.0-3-amd64
-rwx------ 1 root root 5217520 Jul 26 11:09 vmlinuz-amd64
驱动器的 UUID 和 df 命令
kodi@BB-8:~$ ls -al /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 220 Jul 26 08:59 .
drwxr-xr-x 8 root root 160 Jul 26 08:58 ..
lrwxrwxrwx 1 root root 15 Jul 26 11:10 2251a5a4-6c18-425c-9264-df971d297b09 -> ../../mmcblk0p2
lrwxrwxrwx 1 root root 10 Jul 26 11:10 42a36b04-83f8-4105-aef4-7f24b9ffff66 -> ../../sdb3
lrwxrwxrwx 1 root root 10 Jul 26 11:10 8280cf20-b70e-44f4-b092-6d3f92d54eab -> ../../dm-0
lrwxrwxrwx 1 root root 10 Jul 26 11:10 8A84-E6C0 -> ../../sdb2
lrwxrwxrwx 1 root root 10 Jul 26 11:10 8B91-8099 -> ../../sdb4
lrwxrwxrwx 1 root root 15 Jul 26 11:10 A9CE-4035 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 10 Jul 26 11:10 b2a67d10-07da-4eb4-bc16-b768084db045 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 26 11:10 b618f5b0-2b8a-4e33-b288-407fd4355f83 -> ../../sdb5
lrwxrwxrwx 1 root root 10 Jul 26 11:10 f9a00ae7-07d2-4726-947b-03a4074049dd -> ../../sda2
kodi@BB-8:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 783M 78M 705M 10% /run
/dev/mmcblk0p2 57G 14G 41G 26% /
tmpfs 3.9G 39M 3.8G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 820G 555G 224G 72% /home
/dev/mmcblk0p1 511M 82M 429M 17% /boot/efi
/dev/sda2 96G 67G 24G 74% /home/hts
10.1.1.1:/media/backup 2.7T 2.3T 178G 93% /media/backup
tmpfs 783M 44K 783M 1% /run/user/1001
/dev/dm-0 7.8G 36M 7.3G 1% /media/kodi/8280cf20-b70e-44f4-b092-6d3f92d54eab
/dev/sdb4 7.9G 4.8G 3.2G 61% /media/kodi/DATA
/dev/sdb3 14G 12G 1.7G 88% /media/kodi/boot
更新:添加模块
添加到 /etc/initramfs-tools/modules
mmc_core
mmc_block
sdhci
sdhci-pci
然后输入 4.19.0-5 内核
sudo update-initramfs -u -k all
重新启动,我收到相同的消息。
更新:我的 systemd loader.conf
这是我的 /boot/efi/loader/entries/debian.conf
title Debian
linux /debian/vmlinuz-amd64
initrd /debian/initrd.img-amd64
options root=PARTUUID=2251a5a4-6c18-425c-9264-df971d297b09 rw
这是我以 root 身份安装的 /dev/mmcblk0p2 eMMC 设备的 UUID。
答案1
再看一下,似乎 PARTUUID=... 和 UUID=... 之间不匹配,这就是导致此问题的原因。
您提到引导加载程序配置为:
选项根=帕图UID=2251a5a4-6c18-425c-9264-df971d297b09 读写
但是当你设法启动它时,你实际上会在以下位置找到这个 UUID /dev/disk/by-uuid
:
kodi@BB-8:~$ ls -al /dev/disk/按-uuid/ lrwxrwxrwx 1 根 7 月 26 日 15 日 11:10 2251a5a4-6c18-425c-9264-df971d297b09 -> ../../mmcblk0p2
此外,这甚至列在/proc/cmdline
成功启动的列表中(我假设它是带有 SuperGrub USB 的启动):
/proc/cmdline
输出BOOT_IMAGE=/boot/vmlinuz-4.19.0-5-amd64 根=通用唯一标识符=2251a5a4-6c18-425c-9264-df971d297b09 罗
两个 UUID 不同。 PARTUUID= 是在 GPT 分区表中找到的 UUID(这就是为什么它被称为“PART”,因为它是分区的一个属性,记录在分区表中),而 UUID= 是在文件系统(ext4)中记录的 UUID 、或 xfs 或您格式化分区所用的任何文件系统),Linux 能够在扫描磁盘时读取这些文件系统。
因此,看起来您需要修复启动选项以使用 UUID= 而不是 PARTUUID=,因为您拥有的 UUID 是文件系统UUID 而不是分割UUID。
编辑文件/boot/efi/loader/entries/debian.conf
并将最后一行替换为:
选项根=通用唯一标识符=2251a5a4-6c18-425c-9264-df971d297b09 读写
这应该可以解决你的问题!
确保您/etc/fstab
在系统中也匹配正确的标签。
您还可以使用该blkid
命令检查分区和文件系统中存在的 UUID。这可能会帮助您确认您拥有正确的种类UUID 的。
例如,使用blkid -o export
应该显示如下内容:
$ sudo blkid -o export
DEVNAME=/dev/mmcblk0p1
SEC_TYPE=msdos
LABEL=boot
UUID=9A8B-7C6D
TYPE=vfat
PARTUUID=abcd1234-01
DEVNAME=/dev/mmcblk0p2
UUID=2251a5a4-6c18-425c-9264-df971d297b09
TYPE=ext4
PARTUUID=abcd1234-01
...
这应该可以帮助您查看带有 Linux 识别标签的所有 UUID。
答案2
你的根分区所在的设备/dev/mmcblk0
是SD卡。这些设备的模块通常不会编译到内核中,而是编译到外部模块中,因此需要将它们包含到 initramfs(或 initrd)中,以便可以在挂载根文件系统之前加载它们。
在 Debian 上,您可以initrd.img
使用以下命令重建文件update-initramfs
命令。
但首先,您需要更新配置以确保您需要的模块将包含在更新的 initramfs 中。
MODULES
您可以使用in 指令进行配置/etc/initramfs-tools/initramfs.conf
,也可以列出要在/etc/initramfs-tools/modules
和 中加载的模块/usr/share/initramfs-tools/modules.d/*
。看man initramfs.conf
更多细节。
您需要的模块是mmc_core
和mmc_block
。您可能还需要sdhci
和sdhci-pci
,因此也请考虑列出它们。
更新配置后,为您尝试启动的内核版本重新生成 initramfs,方法是:
$ sudo update-initramfs -u -k 4.19.0-5-amd64
或者,为所有内核重新生成 initramfs 文件:
$ sudo update-initramfs -u -k all
希望这就是内核在引导时找到根分区所需的全部内容。
答案3
到目前为止,这里似乎存在一些误解。输出中提到的缺失模块是不是内核模块,但是引导装载程序模块。我看到引导加载程序在查找内核映像本身时遇到问题,可能是因为它无法处理其所在的设备。在这个阶段,内核模块是无关紧要的。
我根本不熟悉 systemd-boot,但希望您必须添加的任何模块都位于/boot/efi/
安装引导加载程序的分区上的某个位置。这通常是引导设备上的 FAT32 分区。