树莓派 SD卡 的系统备份 方法 Windows&Linux (奶妈式教学)

情景:

在树莓派上进行开发的时候经常遇到各种超出预料而又无法解决的问题需要重装系统,问题是重装系统之后一大堆的设置和常用的软件包实在让人头疼,之前一直在研究如何完美备份SD卡的方法可是一直总会出现各种各样的问题,今天专门开个文章记录一下


准备工作 (可选)

如果你的读卡器可以使用USB3.0,可以将其插进USB3.0的接口以提升速度

你需要了解你即将备份的SD卡中空间的占用的情况,并且将 rootfs (即系统所在分区) 分区调整到合适的大小


In Linux

使用 gparted 软件调整SD卡分区:

我用的是 Deepin 貌似自带 gparted 的包,所以直接在控制台输入
sudo gparted 即可打开gparted的界面
* 如果未安装软件的 Debian 系发行版可以通过APT仓库下载安装
sudo apt-get install gparted

在右上角选中自己的SD卡,然后观察SD卡的使用情况
在这里插入图片描述
可以看到 rootfs 分区只用了 2.18 Gib 接下来我们调整他的分区到合适的大小
分别右键两个分区,点击卸载之后我们才能对其进行操作
可以看到卸载之后分区前的两个锁图标已经不见,意味着这时候你可以对磁盘进行操作
我们将 rootfs 分区的大小调整至 3Gib (只要比实际使用稍大点就行了)

在这里插入图片描述
确定之后应用一下对磁盘的更改即可
在这里插入图片描述
!!!注意不要对boot分区进行任何操作!!!
!!!注意不要对boot分区进行任何操作!!!
!!!注意不要对boot分区进行任何操作!!!
!!!注意不要对boot分区进行任何操作!!!


In Windows

在开始之前你需要一个 Diskgenuis 软件 官网
下载适合你系统的版本即可
打开 diskgenuis 软件
在这里插入图片描述

你需要做的很简单,只需要调整rootfs分区到合适的大小即可
在这里插入图片描述

  1. 插入SD卡后在左边选择SD卡,然后点击rootfs分区,可以看到只用了2.2G的空间,我们将其调整到3GB左右(可以根据实际情况自行调整,建议比已用空间大点)
  2. 右键rootfs分区,选择 调整分区大小 输入或拖动到你所需的大小
    在这里插入图片描述
  3. 点击开始之后软件会自动进行调整,如果在调整的过程中没有报错,那么恭喜你可以使用Windows下的方式一进行备份.
  4. 不知道为什么在Diskgenuis调整大小会出现错误,但是在Linux下却不会

* 可以看到,在磁盘前的4MB空间是空闲的,这可能就是一直导致备份出现错误的原因


在Linux下备份 (推荐)

使用 Linux 的 DD 命令可以轻松的备份系统
假定你已经完成了分区的调整 (理论上不分区也可以,但是为了保险起见我还是分区了)
在控制台输入 sudo fdisk -l 查看SD卡挂载的位置
在这里插入图片描述
可以看到我的SD卡的全盘路径在 /dev'/sdc 记住这个目录,接下来我们对其进行操作

sudo dd if=/dev/sdc of=Pi_System.img bs=4096 count=852992
  --  if : 输入的[文件\目录] 路径
  --  of : 输出的[文件\目录] 路径 实际上使用 .iso 的格式应该也可以,如果不添加后缀,则默认拷贝到文件夹下
  --  bs : 拷贝时一次读入的字节数(缓冲区大小) 实测使用更大的数值可以提升拷贝速度 (个人认为4096为最佳)
  --  count : 将会拷贝 bs*count 个字节的数据 4096*852992 即是拷贝 3332MB 的数据(不要忘记Boot
  分区的大小)

!!!!需要根据rootfs分区的大小来调整count的值!!!!
!!!!需要根据rootfs分区的大小来调整count的值!!!!
!!!!需要根据rootfs分区的大小来调整count的值!!!!
!!!!需要根据rootfs分区的大小来调整count的值!!!!

count参数数值的计算公式(bs为4096的情况下) (单位MB): 4(磁盘最前端MBR的大小) + 256(BOOT分区的大小) + 3072(rootfs分区的大小) * 256(固定值)
请根据自身情况修改前四个数值

将分区设置大一点的目的就是为了提高容错率.确保所有的文件都可以被拷贝到.

如果你没有对磁盘进行分区,只需要确保你拷贝的大小大于你有效数据的大小即可(请确保至少比rootfs的数据量多500MB,因为完整的BOOT分区大小会计算在内)

输入命令后耐心等待拷贝完成即可


在Windows下备份 (不推荐)

在Windows下进行备份可能会出现一些奇奇怪怪的事情

在开始之前你需要一个 Diskgenuis 软件 官网
下载适合你系统的版本即可
打开 diskgenuis 软件
在这里插入图片描述

方式一(如果你已经成功调整rootfs的大小,推荐使用此方法)

假设你已经成功调整了 rootfs 分区的大小
假设你已经成功调整了 rootfs 分区的大小
假设你已经成功调整了 rootfs 分区的大小

  1. 在diskgenuis菜单栏的 磁盘 选项卡中选择 新建虚拟磁盘文件 -> 新建 .img 镜像文件
  2. 新建一个大于或等于 SD卡上所有分区大小的 img 文件 | 注意选中 磁盘映像文件
    (推荐至少比boot+rootfs分区大100MB) 这里我新建了一个3.5GB的 img 文件
    注意不要勾选格式化
    在这里插入图片描述
  3. 点击 确定 后等待文件生成完毕后可以在软件的左边看见 img文件
  4. 点击SD卡上的 boot 分区,记录数据
    在这里插入图片描述
  5. 在img文件上新建一个分区,确保参数与boot分区一致
    在这里插入图片描述
    如图所示根据你boot分区的大小照着填,注意是FAT32的文件系统
  6. 再对 img 文件剩余的空间建立一个 EXT4 格式的分区 (保持与rootfs分区格式一样即可)
    在这里插入图片描述
  7. 点击确定后点击软件左上角的 确定更改 询问是否格式化选 即可
    点击确定后点击软件左上角的 确定更改 询问是否格式化选 即可
    点击确定后点击软件左上角的 确定更改 询问是否格式化选 即可
  8. 右键 img 文件下的 boot 分区,点击 取消激活分区 (如果分区处于激活状态请执行此操作)
  9. 右键 SD 卡的 boot 分区 , 点击 克隆分区 | 选择 img 文件下的 boot 分区 (如果img文件不出现则说明你没有保存更改)
    在这里插入图片描述
  10. 如图,选择 按文件复制 点击开始即可
  11. rootfs 分区也进行同样操作
    在这里插入图片描述
  12. 完成关闭软件即可,备份完成.

注意: 使用此方法的前提是调整空间不出错.


方式2

方式二相对简单

  1. diskgenuis 中右键 SD卡 的 boot 分区
    选择 备份分区到镜像文件,弹出如下界面,点击备份选项可以选择压缩方式 (越高级的压缩方式需要越长的时间)
  2. 选择文件路径后点击确定即可
    在这里插入图片描述
  3. rootfs 分区进行此相同的操作
  4. 至此备份完成

本方法会备份出两个文件对应两个分区,建议将两个文件一起储存.


还原

在Linux下还原

在Linux下还原可比备份简单多了
如同备份一样,你需要先确定SD卡挂载的位置

假设SD卡被挂载在 /dev/sdc
假设SD卡被挂载在 /dev/sdc
假设SD卡被挂载在 /dev/sdc

只需要将DD命令的 ifof 参数对调即可

sudo dd of=/dev/sdc if=Pi_System.img bs=4096
  --  请将if的参数改为你备份文件的所在路径
  --------------------------------------
此时不需要控制count参数,程序默认会拷贝完整的文件.

耐心等待拷贝完成之后即可


在 Windows 下还原 Linux 下备份的 img 文件

  1. 使用 diskgenuis其他软件 对SD卡进行格式化成 一个分区 方法见文章最后
  2. 按照烧写系统的方法对 img 文件进行烧写即可
    在这里插入图片描述

同样的,也可以使用 diskgenuis 进行烧写,方法不再赘述

在 Windows 下还原 diskgenuis 备份的文件

  1. (可选) 1. 使用 diskgenuis其他软件 对SD卡进行格式化成 一个分区 方法见文章最后
    使用官方的镜像对SD卡进行一次烧写
    如果你的分区表没有被破坏,可以选择此项
  2. diskgenuis 中右键 boot 分区后选择 从镜像文件还原分区 , 选择对应的文件后按下确定即可
  3. rootfs 分区进行同样的操作

这种方法实测好像不太稳定,会出现一些莫名其妙的问题,主要还是看人品

还原之后的分区空间恢复

sudo raspi-config
  -> Advanced Options
    -> Expand Filesystem
    按照提示重启系统即可.

写在最后

如果你看了这篇文章还不会,则说明

  • 我的表达能力欠佳
  • 你的水平还不够
  • 这篇文章不适合你

补充: diskgenuis 对 SD 卡进行格式化的方法

  1. 在软件中选中SD卡并点击上方 快速分区
    在这里插入图片描述
  2. 如图
    在这里插入图片描述
    点击后选择是即可

留下评论