如何将BerryBoot部署的无GUI版Raspbian系统打包为ISO镜像,以便刷入SD卡去除BerryBoot并保留原有系统
嘿,我完全懂你的困扰——BerryBoot确实给多系统部署带来了便利,但启动慢、偶尔兼容性拉胯的问题,对于你这种要无显示器全天候跑的场景来说真的闹心。下面是一套经过验证的步骤,帮你把现有Raspbian系统打包成可以直接刷入SD卡的镜像,彻底摆脱BerryBoot的束缚:
准备工作
- 一台备用电脑(Windows/macOS/Linux都行,Linux处理分区最顺手)
- 读卡器,用来读取树莓派的SD卡
- 至少比你现有Raspbian系统占用空间大1-2GB的存储空间(用来存自定义镜像)
- 重要:先备份原SD卡的所有内容! 万一操作失误,还能恢复原状
步骤1:识别SD卡上的分区
把SD卡插读卡器接备用电脑,你会看到两个主要分区:
- 一个是BerryBoot的引导分区(通常是FAT32格式,几百MB大小)
- 另一个是你的无GUI Raspbian系统分区(ext4格式,占用空间较大)
注意:我们只需要Raspbian系统分区里的内容,BerryBoot的引导分区可以直接忽略
步骤2:创建空白镜像文件
我们需要先生成一个空白的镜像文件,后续把系统内容塞进去:
Linux/macOS 命令行方式
# 创建一个10GB的空白镜像(根据你系统实际占用空间调整,比如系统用了8GB就设10GB) dd if=/dev/zero of=raspbian-custom.img bs=1G count=10
Windows 方式
可以用DiskGenius直接创建空白镜像文件,或者用命令行:
# 创建10GB的空白镜像(10*1024*1024*1024=10737418240字节) fsutil file createnew raspbian-custom.img 10737418240
步骤3:给空白镜像分区
现在要给镜像分两个区,和树莓派官方镜像的结构一致:
- 引导分区:FAT32格式,大小建议256MB(足够装Raspbian引导文件)
- 系统分区:ext4格式,占用镜像剩余的所有空间
Linux/macOS 操作
- 把镜像挂载为循环设备:
LOOP_DEV=$(losetup -f --show raspbian-custom.img)
- 用
fdisk分区:
fdisk $LOOP_DEV
在fdisk交互界面里:
- 输入
g创建GPT分区表(兼容树莓派所有型号) - 输入
n创建第一个分区:选择主分区,起始扇区默认2048,大小输入+256M - 输入
t修改分区类型,输入1选择EFI系统分区(或者c选W95 FAT32,都可以) - 输入
n创建第二个分区:选择主分区,起始扇区默认,大小直接按回车用剩余空间 - 输入
t修改分区类型,输入2,然后输入83选择Linux分区 - 输入
w保存分区表
- 格式化分区:
mkfs.fat -F32 ${LOOP_DEV}p1 mkfs.ext4 ${LOOP_DEV}p2
Windows 操作
用DiskGenius打开刚才创建的空白镜像文件,右键选择“建立新分区”,依次创建FAT32引导分区和ext4系统分区,然后格式化即可(需要支持ext4格式的工具,比如DiskGenius自带支持)
步骤4:复制系统和引导文件
先把镜像的两个分区挂载到电脑上:
- 引导分区挂载到
/mnt/boot(Linux/macOS)或者某个盘符(Windows) - 系统分区挂载到
/mnt/root(Linux/macOS)或者某个盘符(Windows)
然后执行复制:
- 复制系统文件:把原SD卡中Raspbian系统分区的所有文件,完整复制到镜像的系统分区。Linux/macOS推荐用
rsync保证权限和属性完整:
rsync -avx /path/to/original/raspbian/root/ /mnt/root/
Windows用户可以用DiskGenius直接拖拽,注意勾选“保留文件权限”选项
- 复制引导文件:找到原Raspbian系统分区里的
/boot目录,把里面的所有文件复制到镜像的引导分区里。这里要注意:不要用BerryBoot的引导文件,必须用Raspbian自身的引导文件!
步骤5:修复系统引导配置
这一步是关键,不然刷入SD卡后会无法启动:
- 修改
cmdline.txt:打开镜像引导分区里的cmdline.txt,确保root参数指向系统分区,比如:
console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash
/dev/mmcblk0p2是树莓派SD卡的第二个分区,对应我们创建的系统分区,不要改错
- 修改
fstab:打开镜像系统分区里的/etc/fstab,把引导分区和系统分区的UUID替换成新镜像分区的UUID:
- Linux/macOS可以用
blkid ${LOOP_DEV}p1和blkid ${LOOP_DEV}p2获取UUID - Windows可以用DiskGenius查看分区的UUID
替换后的fstab大概长这样:
UUID=XXXX-XXXX /boot vfat defaults 0 2 UUID=XXXXXX-XXXX-XXXX-XXXX-XXXXXX / ext4 defaults,noatime 0 1
步骤6:优化镜像大小(可选)
如果你的镜像比实际系统大很多,可以缩小它节省空间:
- 先把系统分区缩小到实际使用大小:
resize2fs ${LOOP_DEV}p2
- 然后用
fdisk查看系统分区的结束扇区,计算需要截断的镜像大小,最后执行:
truncate --size=$((END_SECTOR * 512)) raspbian-custom.img
END_SECTOR是你在fdisk里看到的系统分区结束扇区号
步骤7:刷入SD卡
最后用Raspberry Pi Imager、Etcher或者Win32 Disk Imager,把你制作好的raspbian-custom.img刷入SD卡,然后插回树莓派,开机就能直接启动你的无GUI Raspbian,彻底告别BerryBoot了!
备注:内容来源于stack exchange,提问作者Jimmy Bungalo

