如何将Raspberry Pi 4的SD卡制作成含引导分区的Mender兼容可引导镜像
你遇到的核心问题很明确:你只备份了SD卡的根分区(/dev/sda2),没有包含引导分区和整个磁盘的分区表,这就是Mender-convert报错找不到有效分区的原因。
Raspberry Pi的SD卡默认有两个关键分区:
/dev/sda1:FAT32格式的引导分区,包含启动固件、内核和启动配置文件/dev/sda2:ext4格式的根分区,存放系统和应用数据
Mender需要完整的磁盘镜像(包含分区表、引导分区和根分区)才能正确识别并转换为可OTA更新的镜像。下面是正确的解决步骤:
1. 制作完整的SD卡镜像
先停止挂载SD卡的所有分区(避免备份时数据不一致),然后直接备份整个SD卡设备,而非单个分区:
# 先确认SD卡的设备名(比如/dev/sda),用lsblk查看,千万不要搞错! lsblk # 卸载所有SD卡分区(假设挂载点是/mnt/sda1和/mnt/sda2) sudo umount /mnt/sda1 /mnt/sda2 # 备份整个SD卡到镜像文件,bs=4M提升备份速度,status=progress显示实时进度 sudo dd if=/dev/sda of=/project/input/custom.img bs=4M status=progress
2. 验证镜像的完整性
制作完成后,用fdisk检查镜像是否包含正确的分区表和两个分区:
fdisk -l /project/input/custom.img
你应该能看到类似这样的输出(包含两个分区,Type分别为W95 FAT32和Linux):
Device Boot Start End Sectors Size Id Type
custom.img1 8192 532479 524288 256M c W95 FAT32 (LBA)
custom.img2 532480 31116287 30583808 14.6G 83 Linux
3. (可选)缩小镜像体积(如果SD卡剩余空间很大)
如果你的SD卡容量远大于实际使用空间,可以用qemu-img缩小镜像,减少后续Mender转换的时间:
# 先挂载镜像并检查根分区的实际使用大小 sudo losetup -fP /project/input/custom.img sudo df -h /dev/loop0p2 # 卸载loop设备 sudo losetup -d /dev/loop0 # 缩小镜像到实际需要的大小(比如15G,根据实际情况调整数值) qemu-img resize /project/input/custom.img 15G
为什么之前的方法失败?
你之前的命令sudo dd if=/dev/sda2 of=/project/input/custom.img只拷贝了根分区的内容,没有包含磁盘的MBR分区表和引导分区。Mender-convert需要读取磁盘的分区表来定位引导分区和根分区,没有分区表的话,它无法识别这是一个可引导的Raspberry Pi镜像,所以会抛出"could not find any valid partitions"的错误。
内容的提问来源于stack exchange,提问作者Ziga Petek

