如何制作树莓派SD卡的最小镜像以适配更小容量存储卡?
当然可以!针对你的需求,我们有几个高效的方法来制作仅包含实际内容的精简SD卡镜像,既能适配更小的廉价存储卡,又不用重新折腾依赖部署。下面是具体的操作方案:
方法一:用PiShrink自动化精简镜像(最省心的方式)
这是一个专门为树莓派设计的脚本,能自动将SD卡镜像缩小到实际使用的空间大小,操作非常简单:
- 准备工作:把原32GB SD卡从树莓派上取下,插到一台Linux电脑(比如Ubuntu、Debian,或者带WSL的Windows)上。
- 确认SD卡设备名:打开终端运行
lsblk,找到对应SD卡的设备(比如/dev/sdb,千万不要搞错,不然会覆盖本地硬盘!)。 - 制作完整镜像:先生成一个完整的SD卡镜像(虽然初始大,但后续会精简):
sudo dd if=/dev/sdb of=pi-iot-app.img bs=4M status=progress - 使用PiShrink精简:创建一个名为
pishrink.sh的脚本文件,将PiShrink的核心脚本内容粘贴进去,然后赋予执行权限并运行:
运行完成后,你会得到一个仅包含实际内容的精简镜像,大小会远小于32GB,完全可以写入到8GB甚至4GB的存储卡中。chmod +x pishrink.sh sudo ./pishrink.sh pi-iot-app.img
方法二:手动调整分区+制作镜像(适合喜欢手动控制的用户)
如果你不想用第三方脚本,可以手动调整SD卡分区后再制作镜像:
- 清理原SD卡冗余文件:先把SD卡插回树莓派,清理不必要的文件来减少占用:
# 清理APT缓存 sudo apt clean sudo apt autoremove --purge -y # 删除日志和临时文件 sudo rm -rf /var/log/* /tmp/* # 移除NOOB的安装残留(如果不需要的话) sudo rm -rf /boot/NOOBS* - 调整根分区大小:把SD卡插到Linux电脑上,用
fdisk调整根分区(通常是/dev/sdb2):- 运行
sudo fdisk /dev/sdb(替换成你的SD卡设备名) - 输入
d删除根分区(输入分区号2) - 输入
n创建新的主分区:选择起始扇区和原根分区一致,结束扇区设置为比实际使用空间大1-2GB(比如输入+6G,如果实际用了5GB的话) - 输入
w保存分区表并退出
- 运行
- 修复并调整文件系统:
# 检查文件系统完整性 sudo e2fsck -f /dev/sdb2 # 调整文件系统到新的分区大小 sudo resize2fs /dev/sdb2 - 制作精简镜像:现在可以直接制作镜像,因为后面的空分区已经被移除了:
或者用压缩进一步减小体积:sudo dd if=/dev/sdb of=pi-iot-app.img bs=4M status=progresssudo dd if=/dev/sdb bs=4M status=progress | gzip -c > pi-iot-app.img.gz
最后注意事项
- 写入精简镜像到小SD卡时,同样用
dd命令:sudo dd if=pi-iot-app.img of=/dev/sdc bs=4M status=progress(替换成目标SD卡的设备名)。 - 第一次将小SD卡插入树莓派启动时,系统会自动扩展根分区到整个SD卡的容量,不用手动操作。
- 确保目标SD卡的容量大于精简后镜像的大小(用
ls -lh pi-iot-app.img查看镜像大小)。
内容的提问来源于stack exchange,提问作者downer




