我需要使用Yocto创建一个包含救援分区的映像。也就是说,可以在grub菜单中选择另一个根分区。
从USB引导后,我当前正在创建一个映像,该映像将添加到目标英特尔主板的内部SSD芯片。这是可行的,但是我现在需要将当前的根分区复制为“救援”分区,以防根分区出问题。
所以目前我有一个工作正常的wks(kickstart)文件,其5个分区定义为:
part /boot --source bootimg-efi --sourceparams="loader=grub-efi" --ondisk sda --label boot --active --align 1024
part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 1024 --use-uuid --extra-space 1024
part /rescue --source rootfs --ondisk sda --fstype=ext4 --label rescue --align 1024 --use-uuid --extra-space 1024
part swap --ondisk sda --size 1024 --label swap --fstype=swap
part /home --ondisk sda --fstype=ext4 --label home --align 1024 --use-uuid --size=1024
bootloader --configfile="grub.cfg"
grub配置有两个菜单选项,我可以从默认的第一个菜单选项启动。
menuentry 'boot'{
linux /bzImage root=/dev/sda2 3 console=ttyS2,115200n8 rootfstype=ext4
}
menuentry 'rescue'{
linux /bzImage root=/dev/sda3 3 console=ttyS2,115200n8 rootfstype=ext4
}
grub配置选择第二个或第三个分区作为根。这适用于wks文件中分区的固定顺序。
我的问题是,如果我在grub中选择了'rescue'分区,则系统开始启动,但是Linux内核无法找到根分区。这是内核崩溃之前的最新内核消息:
:<snip>
:
ata1.00: ATA-8: 32GB NANDrive, D A431F4, max UDMA/133
ata1.00: 62533296 sectors, multi 0: LBA48
ata1.00: configured for UDMA/133
scsi 0:0:0:0: Direct-Access ATA 32GB NANDrive 31F4 PQ: 0 ANSI: 5
sd 0:0:0:0: [sda] 62533296 512-byte logical blocks: (32.0 GB/29.8 GiB)
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sd 0:0:0:0: Attached scsi generic sg0 type 0
sda: sda1 sda2 sda3 sda4 < sda5 sda6 >
:
:<snip>
:
List of all partitions:
0100 16384 ram0
(driver?)
0101 16384 ram1
(driver?)
0102 16384 ram2
(driver?)
0103 16384 ram3
(driver?)
0800 31266648 sda
driver: sd
0801 24571 sda1 9f293dfb-01
0802 4151722 sda2 9f293dfb-02
0803 4151722 sda3 9f293dfb-03
0804 1 sda4
0805 1048576 sda5 9f293dfb-05
0806 1048576 sda6 9f293dfb-06
No filesystem could mount root, tried:
ext4
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,3)
:
:
我怀疑Yocto在构建仅需要控制的图像时会执行某些操作,但无法找到此问题的根源。 感谢您的帮助