树莓派SD卡备份与恢复:用Win32DiskImager制作完整镜像
2026/9/24 9:12:25 网站建设 项目流程

树莓派玩久了,几乎每个人都会遇到一次 sudo rm -rf 手滑,或者 SD 卡读到一半直接罢工的时刻。用 Win32DiskImager 把整张 SD 卡备份成一个镜像文件,是当下最稳妥、门槛也最低的抢救方案。这篇文章写给所有被系统崩溃、改装失败、卡在开机动画反复折磨过的人,从备份到恢复一次讲透,顺便把我这些年踩过的坑也一起交代了。

1. 为什么树莓派SD卡备份是刚需

1.1 一次手滑命令,止损成本有多高

很多新手对备份这件事不以为然,觉得反正系统坏了重新烧录就完事了。这个想法在系统刚装好、软件基本没配的时候确实没错,但等你在树莓派上装好了环境、写好了脚本、调通了摄像头,甚至部署了小服务,再重新来一遍就不是一两个小时的事了。我见过一个朋友,辛辛苦苦搭了一个自动签到服务,跑了三个月,结果一次sudo rm -rf误操作把整个 home 目录连带一堆配置文件全删了,当场人都是麻的。

这类事故的本质在于:SD 卡上的所有数据是连在一起的,删一个文件可能只是起点,文件系统损坏、分区表被覆盖才是真正致命的。系统层面所谓的“重装系统”只能保住硬件,保不住你的数据、配置和折腾成果。所以我的观点一直很明确:树莓派这类 SD 卡启动设备,全卡镜像才是真正意义上的“完整备份”,因为它连引导区、分区表、隐藏分区一起打包,恢复出来就是当时的样子,一点都不差。

1.2 Win32DiskImager 为什么是入门首选

市面上能给 SD 卡做镜像的工具不少,但 Win32DiskImager 直到今天依然是入门首选。原因很朴素:它是一个 Windows 下的绿色小工具,安装包极小,界面就一个框,不需要命令行,不需要理解dd的参数,只要会选盘符就够了。

它和 balenaEtcher、USB Image Tool 这类工具不一样的地方在于:Win32DiskImager 既能“写”也能“读”。balenaEtcher 主要是把镜像写入 SD 卡,而 Win32DiskImager 的 Read 功能可以直接把 SD 卡“读成”一个.img镜像文件,等于一个工具同时干了两件事,备份和恢复都不用换软件。

再者和再生龙(Clonezilla)这类专业备份工具相比,Win32DiskImager 的定位更像是“傻瓜式整卡复制”,不挑分区格式,不做增量处理,把整张卡按扇区读出来。缺点是镜像文件大、速度一般,但优点是稳,几乎不会遇到奇奇怪怪的兼容性问题。篇幅有限,这里先给个对比表,后面有时间我再单独展开。

工具系统平台备份方式上手难度适合场景
Win32DiskImagerWindows整卡镜像极低新手/应急备份/快速还原
dd 命令Linux/macOS整卡镜像熟悉命令行、需要脚本化
balenaEtcherWindows/macOS/Linux仅写入极低日常烧录系统
Clonezilla 再生龙独立启动环境分区或整盘克隆批量机房部署/增量备份

2. 备份前的准备工作:硬件软件和最容易翻车的点

2.1 需要的硬件和软件清单

开始操作之前,先把东西备齐。硬件方面,最核心的是读卡器。千万别用树莓派自带的读卡功能——树莓派自己是启动设备,你不能一边让它跑系统一边读它自己的卡,逻辑上就行不通。正确做法是把 SD 卡取出来,插到 Windows 电脑上的 USB 读卡器里。

读卡器我建议用支持 UHS-I 或 UHS-II 的,不要用那种几块钱的杂牌读卡器。全量读取一张 32GB 的卡,普通读卡器可能要 20 到 30 分钟,快一点的读卡器十分钟内搞定,差距很大。另外电脑的 USB 口也尽量插主板背面的原生口,尤其是台式机,前置 USB 供电不稳最容易导致读取中断。

软件方面,去 Win32DiskImager 的官方仓库或可信下载站拿最新版就行,不需要安装,解压出来是一个 exe。另外建议顺手准备一个 7-Zip,后面压缩镜像文件要用。还有一个小工具叫 SD Card Formatter,是 SD 协会出的官方格式化工具,后面遇到写保护或者卡识别异常时会用到,建议提前下载好备用。

2.2 盘符识别:选错了就是给电脑硬盘做镜像

这是整个备份流程中最危险的一步,我每次写教程都要把这段放到最前,因为真的有人在这里翻过车。

Win32DiskImager 的界面里有“Device”下拉框,里面列的是你电脑上的所有可移动磁盘,注意是磁盘,不是分区。很多人在这里会犯一个致命错误:他们看盘符,选了一个显示为“E盘”或者“F盘”的,结果那个其实是一个移动硬盘分区,甚至更惨,就是电脑本身的系统盘。一旦用 Read 功能读取这个被选错的设备,Win32DiskImager 会把整个硬盘读成一个镜像文件——还不会立刻产生破坏,但如果你选错的是 Write 方向,写入的瞬间整块硬盘数据直接清空,完全没有后悔药。

正确做法是先在 Windows 的磁盘管理里确认 SD 卡的磁盘编号。右键“此电脑”选“管理”,再进“磁盘管理”,看下方列表里面哪一块磁盘显示“可移动”,容量和你 SD 卡一致,大概率就是它。记住这个磁盘编号,然后在 Win32DiskImager 的 Device 里选择对应的\\.\PhysicalDriveN,不要只凭盘符 F 或 G 就做决定。这一分钟的时间,能省掉你后面几天的哭。

2.3 树莓派关机与SD卡安全弹出

树莓派关机和 Windows 关机不太一样,直接拔电大概率会损坏 SD 卡上的文件系统。在命令行里执行:

sudo shutdown -h now

等板子上的绿灯不再闪烁,维持一两秒常亮或者熄灭,再拔电源。注意有些系统关机后电源指示灯依然亮着,不要看红灯,要看 ACT 绿灯。实在判断不了,就等关机命令执行完一分钟以上再断电,稳妥。

把卡从树莓派里取出来也有讲究,SD 卡和 TF 卡在物理结构上不同,树莓派用的一般是 TF 卡,也就是带卡套的 microSD,卡套是那个大卡,读卡器一般也插大卡。取出时注意不要用手指去碰金手指区域,静电可能会损坏卡。插回读卡器时同样要插到底,有些读卡器接触不良会导致读取到一半掉盘,这也是备份失败的高频原因。

3. 用Win32DiskImager做全量备份,一步步操作

3.1 打开软件与设置镜像路径

Win32DiskImager 解压后,右键 exe 选择“以管理员身份运行”。这一步不能省,访问磁盘底层扇区需要管理员权限,不开的话软件会直接报错或者根本扫不到 SD 卡。

软件界面很简单:上面一栏是镜像文件路径,中间是设备下拉框,右边是 Read 和 Write 两个大按钮。先说备份,也就是 Read 方向。在镜像文件路径那一栏,点击文件夹图标,选择一个你准备存放镜像的目录,注意这个目录不要放在要备份的 SD 卡上——这不难理解,但确实有人这么干过,结果备份读不出来,因为同一个卡同时在被读和写。

文件名的格式我建议写得有辨识度,比如raspberrypi_backup_20250610.img,把系统版本、日期、用途都标清楚。等你手上有十几个镜像文件的时候,就知道这个习惯有多重要了,否则过一个月你自己都分不清哪个是哪个。

3.2 选择设备盘符并读取

在 Device 下拉框里选中 SD 卡对应的\\.\PhysicalDriveN,这个编号就是我们刚才在磁盘管理里确认过的那一个。选好之后,建议再核对一遍:磁盘管理里显示的容量、可移动设备标识,和这里点击下拉框时显示的信息要一致。

确认无误,点 Read,软件会开始逐扇区读取 SD 卡并写入.img文件。整个过程中你会看到一个进度条,同时下面显示已读取的扇区数。这个阶段最重要的事情就是:不要碰读卡器,不要拔 USB,不要让电脑进入睡眠状态。

实测下来,备份一张 32GB 的卡大约需要 10 到 30 分钟,具体取决于读卡器速度。如果中途进度条卡住不动,先等个两三分钟,有些读卡器在读写大块数据时会短暂停顿,属于正常现象。如果等了很久还是不动,建议放弃重来,换一个 USB 接口再试,强行拔掉继续上次操作基本都会产生损坏的镜像。

3.3 备份后的镜像文件检查与压缩

读取完成后,你会拿到一个体积很大的.img文件,大小接近 SD 卡的实际容量。比如标称 32GB 的卡,读出来可能是 29GB 到 30GB,这是因为厂商的容量算法和实际可用空间换算存在差异,属于正常现象,不用慌。

接下来做两件事。第一件是校验哈希,以防备份文件在落盘过程中出错。Windows 的 PowerShell 里可以直接算:

Get-FileHash -Path "D:\backup\raspberrypi_backup_20250610.img" -Algorithm SHA256

算出来的那一长串哈希值,建议复制到记事本里和镜像文件放一起。等有一天你要恢复时,可以再算一次,对比一致就说明这个镜像文件没问题,放心使用。

第二件是压缩。镜像文件里其实有大量的空扇区,压缩率通常很可观。用 7-Zip 右键选择“添加到压缩包”,压缩格式选 7z,压缩级别选“极限”,实测一张 32GB 的卡,镜像 30GB,压缩后可能变成 6GB 到 10GB。压缩后的文件可以放到网盘或者 NAS 上做异地备份,但注意用的时候需要先解压出完整.img文件,Win32DiskImager 不认 7z 格式。

4. 最关键的恢复教程:把SD卡恢复到可启动状态

4.1 恢复前检查:盘符、容量、格式

备份是为了有一天能恢复,所以恢复这部分才是整个流程的终点。真正到你需要恢复的那一天,大概率常态是:树莓派系统已经进不去了,或者 SD 卡已经彻底罢工。这时候一定注意,别着急找新卡就开始写,先做三个检查。

第一,确认目标 SD 卡容量不能小于镜像文件所对应的原始卡容量。镜像文件是整卡镜像,包含分区表和引导信息,如果你的新卡比旧卡小,写入时会出现空间不足或缺失尾部区块的问题,极大概率无法启动。第二,打开磁盘管理,确认目标 SD 卡的磁盘编号,看看盘符到底对应的是不是新卡。恢复操作比备份更危险,因为 Write 按钮按下的瞬间,整个目标磁盘会被覆盖,没有任何二次确认弹窗。第三,尽量不要预先格式化 SD 卡。Win32DiskImager 是按扇区写入的,它不在意目标卡里原本是什么文件系统,直接会覆盖掉所有内容。预先格式化相当于多此一举,还容易在格式化工具里手滑选错盘。

4.2 使用Write写入镜像的完整操作

写入前把镜像文件从压缩包里解压出来,放在电脑本地磁盘上,不要放在要写入的 SD 卡里,也不要用中文路径,Win32DiskImager 对中文路径的处理偶尔会出幺蛾子,比如提示无法打开文件。

打开 Win32DiskImager,在镜像文件路径里选择.img文件,在 Device 下拉框里选中你要写入的 SD 卡对应的磁盘编号。检查两遍,再检查第二遍,然后点 Write。

写入过程比备份还要久,因为不仅要把数据写进去,很多读卡器在写入时还要做擦除操作,速度会明显慢于读取。这个过程千万不要中断,一旦中途断电或者拔卡,这张 SD 卡的存储控制器可能会出现异常状态,也就是你在网上经常看到人说的“SD 卡内部寄存器锁死”或者“写保护”问题。后面我会专门讲这个。

写入完成后,软件可能会提示你是否要格式化该磁盘,一定要选“否”。Win32DiskImager 已经完成了整卡写入,你不需要、也不应该再对它做格式化操作。直接把卡从读卡器里弹出,插入树莓派,接通电源等待启动即可。

4.3 恢复到更大容量SD卡的扩容处理

如果你是从 16GB 的旧卡换到 32GB 的新卡,写完镜像后会发现一个现象:树莓派系统能启动,查看磁盘空间时,容量还是旧的 16GB。这是因为 Win32DiskImager 是整卡镜像,分区表是按照旧卡的布局写入的,新卡多出来的空间根本没有被使用。

解决办法是在树莓派启动后,执行:

sudo raspi-config

进入“Advanced Options”,选择“Expand Filesystem”,它会自动把根分区扩展到 SD 卡剩余的全部空间。退出后重启,再执行df -h就能看到完整容量了。

如果你用的是 Ubuntu Server,不依赖 raspi-config,可以手动用growpart工具来扩容。先查一下根分区在哪个设备上,一般是/dev/mmcblk0p2,然后执行:

sudo growpart /dev/mmcblk0 2 sudo resize2fs /dev/mmcblk0p2

第一行扩展分区表,第二行扩展文件系统,顺序不能反。执行完后用df -h验证是否生效。

4.4 恢复后首次启动建议

恢复了镜像不代表万事大吉,首次启动时我建议你做三件小事。

第一,确认时间。树莓派没有板载时钟,时间同步依赖网络,如果断网运行过一段时间,系统时间可能不准,会影响日志记录和一些依赖时间的服务。第二,检查关键服务是否自动启动成功。很多同学备份前是能正常运行的系统,恢复后却出现某个服务起不来的情况,多半是 SD 卡换了之后,硬件相关配置变了,比如蓝牙地址、序列号识别等。排查命令是:

systemctl --failed

第三,验证一下磁盘是否真的能正常读写。可以往用户目录下写一个大文件再删掉,然后执行dmesg | tail看看有没有 I/O 报错。这一步能提前暴露 SD 卡与读卡器接触不良、镜像写入时产生的坏块等问题。

5. 常见故障排查:我这些年踩过的坑

5.1 SD卡显示写保护或锁死怎么办

先说一个很多新手不知道的点:SD 卡本身就有物理写保护开关,但那是针对标准尺寸 SD 卡的,microSD 卡或 TF 卡没有这个开关。如果你用的是卡套,把卡套侧面的锁拨到非锁定位置,这问题比较容易排查。

比较隐蔽的是“SD 卡内部寄存器锁死”这种状态。典型表现是该卡插到任何读卡器都被识别为只读,无法删除文件,无法格式化,甚至 Windows 提示“磁盘受写保护”。这种情况常发生在写入中断、劣质读卡器供电不稳或者卡本身寿命耗尽之后。SD 卡内部有一个控制用的寄存器,一旦某些标志位被异常置位,主控芯片会拒绝写入命令。

尝试处理的办法是先用 SD Card Formatter 执行“覆写格式”,模式选择 Overwrite Format,它会往卡里全量写入 0 和 1,对部分软性锁死状态有用。如果无效,可以上网搜一下对应主控的量产工具做低格,但说实话,普通用户折腾量产工具成功率极低,我的经验是直接换卡。SD 卡本身是耗材,尤其树莓派这种频繁读写的场景,工作环境恶劣一点的,寿命一两年就到头了。千万不要在重要的卡上反复测试修复方法,数据安全永远比那几十块钱重要。

5.2 备份到一半中断或文件损坏如何处理

备份中断是最高频的问题,原因五花八门:读卡器接触不良、电脑 USB 供电波动、Win32DiskImager 本身崩溃、镜像文件落盘时空间不够等。遇到这种情况,先别急着怪软件,先检查是不是读卡器的问题。我的习惯是备一个专门给树莓派 SD 卡用的独立读卡器,不和其他设备混用,这样能减少 USB 供电不稳的概率。

中断后产生的.img文件理论上不完整,不要用它来恢复系统。重新备份即可,但在重新开始之前,可以先在 Windows 的磁盘管理里看到 SD 卡状态是否正常。最常见的问题是中断后 SD 卡的容量显示变小,比如 32GB 的卡只剩 2GB 可用,这一般是 Windows 自动做的分区表修复导致的。解决办法是用 SD Card Formatter 全卡格式化,恢复完整容量后再重新备份。

还有一种隐蔽的“假成功”情况:备份进度条 100% 走完,但镜像文件也无法在别的软件中打开。这种情况大概率是目标磁盘在备份过程中产生了坏扇区。处理思路是换一个读卡器,再加一个 USB 接口隔离器,或者在备份前先用 SD Card Formatter 做一次“逻辑格式化”,把坏块剔除出映射表,再开始备份。

5.3 写入成功后树莓派无法开机

这是恢复操作后最打击人的结果:明明写入成功了,上电却连开机画面都没有,或者只有一个闪烁的光标。先说最常见的原因——新 SD 卡和旧镜像里的分区布局对不上。比如镜像来自一个 32GB 的卡,你写入一个 16GB 的卡,那肯定无法启动。这个在 4.1 里强调过,这里再重复一次,因为真的有人会拿小卡写大镜像。

第二个原因是写入时损坏了引导区。Win32DiskImager 写入完成后不提供自动校验功能,所以如果镜像文件在解压过程中出现错误,或者读卡器写入质量不佳,写入结果就是损坏的。解决办法是写入后用 Win32DiskImager 再读一次刚写出的 SD 卡,得到一个新的镜像,用哈希工具和原始镜像对比一致性。虽然这样要多花时间,但能保证百分之百可靠。

第三个原因可能是树莓派本身启动模式设置问题。一些玩家之前在/boot/config.txt里改过 GPU 内存分配或者关掉了某些外设,恢复后配置找不到对应硬件,会卡在引导阶段。这种情况建议接上 HDMI 和键盘,观察屏幕输出,看停在哪个位置。如果能看到 kernel panic,说明镜像写入本身没问题,是系统配置层面的故障,进救援模式修改即可。

5.4 备份文件过大或分区丢失去哪里找

很多同学看到备份出来的.img文件比自己实际使用的数据大很多,会怀疑是不是备份错了。其实是正常的,因为 Win32DiskImager 做的是整卡镜像,它会包含文件系统里的空闲扇区,而不是像文件复制那样只拷贝有效数据。这也是它可靠的原因之一。

如果你确实想让备份文件“瘦身”,建议用 3.3 节的方法做高质量压缩,而不是在备份时手工修改扇区范围。Win32DiskImager 没有块级别裁剪功能,强行改不现实。有些人会用 Linux 下的pishrink脚本先把镜像缩小,再压缩存档,这在大量备份场景下很有用,但操作复杂度和出错概率也会上升,新手暂时不需要碰。

至于“分区丢失”的说法,其实不是一个精确的概念。如果你用磁盘管理打开 SD 卡,发现它变成了不可识别的 RAW 分区,这通常是文件系统损坏,而不是分区表丢失。常见补救办法是用testdisk扫描分区表并恢复引导扇区。但也要提醒一句:不要在没有完整备份的情况下随便做修复操作,修坏了连恢复的机会都没有。

6. 进阶玩法:备份的更高境界

6.1 Linux/macOS下的dd与pv全盘备份

Win32DiskImager 只能在 Windows 上用,如果你主力机是 Linux 或者 macOS,也可以用命令行完成同样的事情。Linux 下的核心工具是dd,它和 Win32DiskImager 原理一模一样,也是按扇区拷贝整张 SD 卡。

先确认 SD 卡的设备名。插入 SD 卡后执行:

lsblk

一般会看到/dev/sdb或者带 mmcblk 前缀的设备。然后执行全盘备份:

sudo dd if=/dev/sdb of=~/raspberrypi_backup_$(date +%Y%m%d).img bs=4M status=progress

if指定输入设备,of指定输出文件,bs=4M是每次读写 4MB,这个值对性能影响很大,设太小会慢,设太大在某些机器上反而容易出错。status=progress可以直接显示进度,省得干等。

如果想让过程更直观,可以把dd的输出接到pv命令上:

sudo dd if=/dev/sdb bs=4M | pv -s $(sudo blockdev --getsize64 /dev/sdb) | sudo dd of=~/backup.img bs=4M

恢复时反过来执行:

sudo dd if=~/backup.img of=/dev/sdb bs=4M status=progress

这里再敲一次警钟:ddof指向的设备一定要反复确认,写错了就是把数据直接抹掉,比 Windows 下选错盘符还要干脆。

6.2 定期自动备份的思路

手动备份有个问题:忘记了就相当于没有。尤其树莓派这类长期运行的小主机,很多时候你自己都忘了上一次备份是什么时候。想想看,当系统真的崩溃时,你拿出来的镜像可能是三个月前的,而最近一个月的配置改动和新增数据全都没了。

自动化备份的思路很简单,如果你有另一台 Linux 服务器或者一台常开的电脑,可以写一个脚本定期执行dd或者rsync方式的备份。但要注意,dd全量备份运行时会占用大量 I/O,不适合在树莓派本身运行期间做,因为一边写入镜像一边持续读写 SD 卡,很可能把系统自己搞挂。更稳妥的方式是利用cron定时执行shutdown -h now并在电脑端定时运行备份脚本,配合 Wake-on-LAN 或者智能插座把树莓派重新唤起来。

如果想在线备份,不想停机,那用文件级同步方案更合适,比如rsync把重要目录同步到 NAS 或者远程服务器。但文件级同步无法覆盖整个系统,不能让你从一张全新的 SD 卡上直接恢复,所以我的建议是两者结合:日常用rsync同步关键数据,间隔一个月做一次全量镜像归档。这样既有粒度,又有底线。

6.3 我的备份节奏与最终建议

按我自己的习惯,新系统调好之后马上做一次“干净镜像”,这个镜像相当于黄金底稿,以后系统折腾坏了,第一件事就是回到这个版本,重新配置业务而不是从零装环境。之后每完成一次大的软件变更、驱动修改或环境部署,就再做一次当前镜像,命名里带好日期和版本备注。这样的节奏不算频繁,但每次恢复时都有近期的可用版本,损失控制在可接受范围内。

在日常维护中,我还会把/etc下的关键配置、数据库导出文件等通过rsync定时同步到内网 NAS。毕竟镜像文件恢复起来是整个系统,但很多时候你只需要找回来一个写坏的配置文件,文件级备份就能解决问题,何必动用全量镜像。

这篇文章介绍的都是我自己反复验证过的方法,尤其 Win32DiskImager 这条路,帮我在无数次树莓派崩溃中保住了数据。实际操作中你会发现,备份这件事真的不难,难的是在系统一切正常时想到去做。趁现在板子还能开机,去把第一次备份做了,这个习惯会在未来某天狠狠地回报你。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询