制作树莓派最小镜像-img裁剪瘦身

本文介绍了如何在树莓派系统内制作最小化的img镜像,以节省空间并实现有效备份。通过查看系统占用容量、安装必要软件、创建空白img、分割虚拟磁盘、挂载和格式化、备份数据,以及卸载虚拟磁盘等步骤,详细阐述了整个过程。此外,还提供了一个一键脚本,适用于不同版本的树莓派固件。

修改记录
2016年7月28日修改脚本,动态支持树莓派镜像

最近刚做了一套opencv摄像头监控的程序,想将这套程序做一个镜像备份起来,但发现用Win32DiskImager或dd命令来制作镜像,都是将sd卡整盘进行备份,造成了巨大的硬盘浪费,同时,会局限sd卡本身,也就是说32g卡制作的镜像无法恢复到16g或8g的卡上,即便软件没有占用那么大空间,所以希望将镜像瘦身,做一套最小占用空间的镜像,且不损害镜像本身。

前不久在csdn上看到 liuwei000000的博文与我所希望的结果差不多,所以试着进行一次img瘦身。
不过该博文也有缺点“该方法制作的镜像不能用raspi-config扩展分区”所以即便我们能够将img瘦身也不能轻松的利用raspi-config扩展树莓派了,所以我提炼了奋斗博客博文亲身制作了一把img,并把遇到的问题记录了下来

我使用的的是raspberry pi 2+32G高速tf卡,因为全程只在树莓派中操作所以不需要额外的linux系统。

若树莓派所占空间小于sd卡空间的50%即可以使用第一种方法,在树莓派内部直接生成镜像。
若树莓派所占空间大于sd卡空间的50%,可以使用第二种方法,先生成sd卡镜像,然后再其他linux系统中进行裁剪。

在文后,我会提供一键脚本。


树莓派内部生成镜像

一、查看当前系统所占容量
用Win32DiskImager来制作镜像时是将sd卡正卡全部做成镜像,是因为无法读取到linux分区的原因,所以我们在制作镜像前,先要确定我们当前系统所占用了多少系统空间,即备份镜像的大小。

#查看当前系统所占用的空间
df -h

这里写图片描述
可以看到,树莓派是有两个分区,所以boot 【size】+linux【Used】+分区损耗【因为格式转换,所以会损耗5%~10%】=镜像实际大小,所以若used使用百分比超过50%那么就无法在sd中创建此镜像。

二、安装需要的软件
dosfstools:fat32分区格式化工具
dump:dump & restore 备份工具
parted & kpartx:虚拟磁盘工具

sudo apt-get install dosfstools dump parted kpartx

三、生成空白img
根据一里面系统所占用的空间,生成空白的img。

#df为磁盘占用空间
sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df

这也是错误比较多的地方,有人不理解原文中count=2500参数的意义,此参数是用dd命令创建一个大约2.5G的空白镜像,若不使用第一步来算出实际镜像大小的话,制作出来的镜像就会出错

此处注意
dd命令中【1k=1024b;1KB=1000b;1M=1024kb;1MB=1000kb】

四、分割虚拟磁盘
我们已将空白的img创建完毕,现在需要通过parted将磁盘分为boot与root区
通过sudo fdisk -l /dev/mmcblk0得知
这里写图片描述
第一个分区为boot分区,采用FAT32格式,由sector 8192开始到sector 12879
第二个分割区采用EXT4,由sector 122880开始到空白img结尾。

sudo parted raspberrypi.img --
<think>我们被要求对树莓派镜像进行瘦身优化。根据引用[1]和[4],我们知道树莓派使用的是Raspbian系统(现在可能称为Raspberry Pi OS)。镜像瘦身通常包括移除不必要的文件、清理缓存、压缩分区等操作。以下是一些常见的瘦身方法: ### 1. **清理包缓存和临时文件** 在树莓派系统运行后,可以执行以下命令清理: ```bash sudo apt-get clean # 清理已下载的包文件 sudo apt-get autoremove --purge # 移除不再需要的包及其配置文件 sudo rm -rf /tmp/* # 清理临时文件(注意:确保没有重要文件) ``` ### 2. **移除不必要的软件包** 根据需求移除不需要的软件包,例如: ```bash # 例如移除LibreOffice(如果不需要) sudo apt-get purge libreoffice* # 移除游戏 sudo apt-get purge minecraft-pi wolfram-engine ``` ### 3. **缩小根分区** 在树莓派上,根分区通常被扩展以填满整个SD卡。我们可以调整分区大小,然后缩小镜像文件: - 使用`raspi-config`工具:选择“Advanced Options” -> “Expand Filesystem”来扩展文件系统(但这不是缩小,所以我们需要手动缩小)。 - 使用`resize2fs`和`parted`工具调整分区大小(需要先卸载分区)。 由于我们处理的是镜像文件(如1.img),我们可以挂载镜像并调整分区大小。步骤: 1. 挂载镜像并检查分区: ```bash # 查看镜像的分区信息 sudo fdisk -l 1.img ``` 假设输出中根分区是第二个分区(例如,1.img2)。 2. 计算当前文件系统的最小大小: ```bash sudo e2fsck -f 1.img2 # 强制检查 sudo resize2fs -M 1.img2 # 缩小文件系统到最小值(注意:-M是尽可能小,但可能不是最优,建议先备份) ``` 然后使用`fdisk`删除分区并重新创建一个更小的分区(注意:分区起始扇区必须和原来一样,结束扇区根据调整后的文件系统大小计算)。 3. 截断镜像文件: ```bash truncate -s <新的总大小> 1.img ``` ### 4. **使用更轻量级的桌面环境或最小化安装** - 如果不需要桌面环境,可以使用Raspberry Pi OS Lite版本(无桌面)。 - 在已有系统上,可以移除桌面环境: ```bash sudo apt-get purge xserver* lightdm* raspberrypi-ui-mods lxde* # 注意:这将移除桌面,请谨慎 ``` ### 5. **清理日志文件** ```bash sudo journalctl --vacuum-size=100M # 保留100MB的日志 sudo rm /var/log/*.gz /var/log/*.1 # 删除旧的日志备份 ``` ### 6. **使用镜像压缩工具** - 使用`pishrink.sh`脚本(专为树莓派镜像瘦身设计): ```bash wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh chmod +x pishrink.sh sudo ./pishrink.sh 1.img # 输入镜像,输出为1.img_shrinked ``` 这个脚本会自动执行文件系统检查、调整分区大小、截断镜像等操作。 ### 7. **创建最小镜像** 如果从头开始,可以使用最小化安装(Raspberry Pi OS Lite),然后只安装必要的软件包。 ### 注意事项 - 操作前备份重要数据。 - 调整分区大小有风险,请确保备份镜像。 ### 示例步骤(使用pishrink.sh) 1. 下载脚本并赋予执行权限: ```bash wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh chmod +x pishrink.sh ``` 2. 运行脚本: ```bash sudo ./pishrink.sh 1.img ``` 输出文件为`1.img_shrinked`(也可以直接覆盖原文件,但建议先备份)。 ### 引用 - 树莓派官方系统镜像[^1] - 使用pishrink.sh工具进行镜像瘦身[^4] §§相关问题§§ 1. 树莓派系统如何最小化安装? 2. 如何安全地调整树莓派分区大小? 3. 树莓派镜像备份和恢复的最佳实践?</think>### 树莓派镜像瘦身优化指南 对树莓派镜像进行瘦身可显著节省存储空间并提升系统性能,以下是逐步优化方法: #### 1. **基础清理操作** ```bash # 清理APT缓存 sudo apt clean # 移除未使用的依赖包 sudo apt autoremove --purge # 清理日志文件 sudo journalctl --vacuum-size=100M # 保留100MB日志 sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \; ``` 这些命令可立即回收数百MB空间[^1]。 #### 2. **移除非必要软件包** ```bash # 移除大型桌面环境 sudo apt purge --auto-remove xserver* lightdm* lxde* raspberrypi-ui-mods # 移除开发工具 sudo apt purge --auto-remove build-essential git python3-dev # 移除多媒体组件 sudo apt purge --auto-remove vlc* libreoffice* wolfram-engine ``` 仅移除桌面环境即可节省约1GB空间[^1]。 #### 3. **使用专用瘦身工具** 推荐使用`pishrink.sh`自动化工具: ```bash # 下载瘦身脚本 wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh chmod +x pishrink.sh # 执行镜像瘦身 sudo ./pishrink.sh -z 1.img shrunk.img ``` 此工具会自动: - 缩小文件系统分区 - 移除交换文件 - 清理临时文件 - 压缩最终镜像[^4] #### 4. **文件系统级优化** ```bash # 使用fstrim清理未使用块 sudo fstrim -av # 检查磁盘使用 sudo ncdu / # 交互式查看大文件 # 移除本地化文件 sudo apt purge -y $(dpkg-query -W -f='${Package}\n' | grep -E 'language-pack|locale') ``` 可额外回收200-500MB空间[^1]。 #### 5. **深度优化技巧 ```bash # 精简内核模块 sudo ls /lib/modules/$(uname -r)/kernel | grep -Ev 'net|fs|drivers' | xargs sudo rm -rf # 压缩系统二进制文件 sudo find /usr/bin -type f -exec gzexe {} \; # 使用轻量级替代品 sudo apt install --no-install-recommends busybox-syslogd dropbear ``` #### 6. **最小镜像构建** 从源头构建最小镜像: 1. 使用Raspberry Pi OS Lite镜像 2. 安装仅必要组件: ```bash sudo apt install --no-install-recommends \ ca-certificates \ network-manager \ ssh \ vim-tiny ``` 3. 最终镜像可控制在400MB以内[^1] ### 优化效果对比 | 操作 | 空间节省 | 风险等级 | |------|----------|----------| | 基础清理 | 200-500MB | ★☆☆☆☆ | | 移除桌面环境 | 800MB-1.2GB | ★★☆☆☆ | | pishrink工具 | 20-30%镜像体积 | ★☆☆☆☆ | | 内核精简 | 50-100MB | ★★★☆☆ | > **重要提示**:操作前务必备份镜像!使用`dd if=/dev/sdX of=backup.img`创建完整备份[^4]。 ### 瘦身后的验证 ```bash # 检查文件系统完整性 sudo e2fsck -f shrunk.img # 挂载验证 sudo mount -o loop shrunk.img /mnt ls /mnt/bin # 验证关键目录 ``` 通过以上方法,典型32GB树莓派镜像可缩减至2-4GB,同时保持核心功能完整。对于持续部署场景,建议将优化步骤写入Dockerfile或Ansible脚本实现自动化[^3]。
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值