树莓派烧录sd卡因内存过大导致失败的解决方法(不用虚拟机) 1、目的当我们使用Win32DiskImager将SD卡封装为镜像文件时由于Win32DiskImager是“整盘拷贝”包括空闲空间所以对于某些程序需要通过PiShrink删除未使用空间减少写入时的sd卡占用PiShrink只能在linux系统下使用。但是虚拟机的安装有些复杂且占据较大内存我们可以使用wsl进行压缩wsl是windows subsystem for linux的简写指的是windows10的一个子系统这个子系统的作用是在windows下运行linux操作系统。2、具体方法和步骤在 Windows 上用 WSL 和 PiShrink 压缩树莓派镜像2.1 准备工作一个需要压缩的树莓派镜像文件例如pi0_new.img放在D:\img\Windows 10/11 系统家庭版也可用2.2 安装 WSL 2 与 Ubuntu第一次操作即可以管理员身份打开 PowerShell 或 命令提示符 (cmd)。输入并回车这将自动安装 WSL 及默认的 Ubuntu 发行版wsl --install这个命令会自动完成以下所有操作 1 启用 WSL 所需的所有 Windows 功能 2 安装默认的 Linux 发行版通常是 Ubuntu 3 将 WSL 版本默认设为 WSL 2重启电脑若安装过程提示。重启后Ubuntu 会自动启动。按提示创建一个用户名如 exe和密码输入密码时不显示字符是正常的。设置完成后你会看到命令提示符变为用户名主机名:~$表示已进入 WSL 环境。后续也可以在Windows PowerShell启动用wsl -d Ubuntu2.3 在 WSL 中安装 PiShrink第一次操作即可打开 WSL 终端依次执行2.3.1 安装依赖sudo apt update sudo apt install -y wget parted gzip pigz xz-utils udev e2fsprogs2.3.2 下载 PiShrinksudo apt update sudo apt install -y wget parted gzip pigz xz-utils udev e2fsprogs2.3.3 添加执行权限chmod x pishrink.sh2.3.4 移入系统路径sudo mv pishrink.sh /usr/local/bin/2.3.5 总结表格如下以下所有命令都在刚打开的 WSL 终端中执行。步骤命令说明1. 更新软件源并安装依赖sudo apt update sudo apt install -y wget parted gzip pigz xz-utils udev e2fsprogs输入你的用户密码来授权 sudo。2. 下载 PiShrink 脚本wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh从 GitHub 获取最新版脚本。3. 添加执行权限chmod x pishrink.sh4. 移入系统路径方便后续使用sudo mv pishrink.sh /usr/local/bin/2.4 压缩镜像文件安全流程核心原则所有操作都在 WSL 家目录~/下完成D 盘文件只读不写。此过程是为了不损害源文件。以pi0526.img文件举例需要换成自己的文件名。步骤 1将镜像复制到 WSL 家目录只读操作安全cp /mnt/d/img/pi0526.img ~/pi0526.img如果文件极大10GBcp有时会因内存缓冲问题报错改用rsync或dd可以更好地处理使用rsync需要先安装sudo apt install rsyncrsync -avh --progress /mnt/d/img/pi0526.img ~/或者使用dd复制块设备风格dd if/mnt/d/img/070106.img of~/pi0526.img bs4M statusprogress步骤 2确认复制完成ls -lh ~/pi0526.img # 应显示约 59GB整个值根据你的源文件大小而定我这里是59GB而已#步骤 3在家目录执行压缩操作对象是副本安全cd ~ sudo /usr/local/bin/pishrink.sh pi0526.img步骤 4等待成功提示 你会看到Shrunk pi0526.img from 59G to 3.XG in Xm Xs步骤 5启动 HTTP 服务用于安全取回文件python3 -m http.server 8080步骤 6在 Windows 浏览器中下载打开浏览器访问http://localhost:8080点击pi0526.img 下载保存到 D:\img\pi0526.img-shrunk.img步骤 7停止 HTTP 服务在 WSL 终端按 CtrlC步骤 8清理 WSL 中的临时文件可选rm ~/pi0526.img2.5 参数说明可选如果需要更多控制可以在pishrink.sh和镜像名之间添加参数参数作用-v显示详细过程-z压缩后用 gzip 再压缩生成 .gz-Z压缩后用 xz 再压缩生成 .xz压缩率更高-a多核并行压缩需配合 -z 或 -Z-s不自动扩容首次启动时不自动调整分区大小示例sudo /usr/local/bin/pishrink.sh -vz pi0_new.img# 详细输出 gzip压缩2.6 预期结果成功时最后一行输出类似pishrink.sh: Shrunk pi0526.img from 59G to 3.2G in 2m 10s2.7 运行时的常见问题问题原因解决方法parted is not installed缺少依赖重新执行安装依赖命令Cant have a partition outside the disk镜像已损坏或直接在 /mnt/d/ 操作重新从 SD 卡读取镜像并严格按安全流程操作Input/output error 写回失败直接 cp 写回 /mnt/d/ 不稳定使用 HTTP 服务方式下载压缩后文件大小没变压缩未成功确认看到 Shrunk ... from ... to ... 提示3 其他问题安装 WSL 可能遇到的其他问题请参考后续文章明日更新。