将树莓派系统备份为.img文件

九年吃菜粥 更新于 2020-09-28 开放度: 公开 浏览: 1154

将树莓派系统备份为.img文件

概述

在我们使用树莓派进行学习或者搭建实验环境时经常会把系统玩坏,辛苦配置的开发环境又得重新配置;或者更新某一软件后发现新版本和某些组件不兼容,又无法降级。这个时候我们会想将系统在稳定时进行备份,在系统出现问题后可以很方便的进行恢复。

  1. 使用Win32DiskImager进行备份(Read操作)
    这个方法是网上很多教程中写道方法,这个方法的缺点是:只能进行全卡备份,像我使用的内存卡容量是128G,安装好系统和一些组件后虽然只占用10G左右的空间,用这个方法进行备份的镜像大小将是128G(虽然我只使用了其中的10G的空间),网上很多文章说可以用PiShrink脚本进行压缩裁剪,但我测试后很多系统会裁剪失败,原因是该脚本不支持部分系统的镜像,我自己用Ubuntu server 和Manjaro-arm进行测试都是这个问题,如果你用16G以下的小容量tf卡,直接用这种方法就行。Win32DiskImager

  2. 站内的老备份教程
    该方法主要是将系统备份到另一张tf卡,如果我们只有一张卡,并且备份只是用于归档,用这个方法就比较鸡肋了。

  3. 使用rpi-backup脚本进行备份
    这是我寻求备份方案以来找到的最好的树莓派系统备份解决方案,解决了备份文件体积大,恢复也方便,这个脚本备份文件的体积为 已用空间×1.2,我的系统占用了不到10G的空间,备份文件大概是11G多一些,这相比于全盘备份的128G已经小太多了,在使用7z进行极限压缩后甚至只有1.7G,进行日常归档备份完全可以接受。

文件大小

该脚本进行系统恢复时也很方便,将img文件像安装系统一样刷入tf卡后对分区进行简单拓展后即可。接下来就来演示怎么使用该脚本进行备份。

备份演示

首先clone该脚本:

git clone https://github.com/nanhantianyi/rpi-backup.git && cd rpi-backup

然后要安装依赖项,这里我用的是Manjaro-arm系统,个人比较推荐满Manjaro-arm系统,后续会出一个直到新手选择安装系统的视频,在Manjaro系统中该脚本无法自动安装依赖项,需要运行这行命令sudo pacman -Sy && pacman -S dosfstools parted multipath-tools rsync来安装依赖。
如果你是用apt进行安装软件的系统,可以跳过这一步,该脚本会自动安装依赖项。

然后运行

sudo ./back.sh youImageName.img

该脚本就会开始备份,如果不指定文件名则会自动命名。
如果你的内存卡剩余空间不够的话就挂载U盘,将img直接保存在U盘中,要注意U盘务必挂载到/media目录下,不要挂载到/mnt,因为脚本会对/mnt目录进行备份操作,会导致递归性的备份,总之就是不要挂载到/mnt目录,切记!

脚本运行结束后就得到了备份镜像

备份恢复

备份镜像恢复可以直接用烧录软件直接烧录,这里我使用的是etcher,我也推荐大家使用这个软件,站内有这个软件的文章:使用 Etcher 给 SD 卡安装树莓派系统,界面简洁明了,选择镜像,选择要刷入的磁盘,Flash!
948e28c1e65feba3fcfb0d371c688eb6.png
在烧录完毕后不要着急,我们还要一项操作没有做,打开DiskGenius后查看tf卡的分区可以看到有一部分空闲分区没有被分配
6e75daeed1cea7ddde1d524b5af135aa.png

这会导致进入系统后可用空间变少,在这里我直接用DiskGenius将空闲分区分配给root分区,这样不用在进入系统后做其他操作。
也可以进入系统后执行git clone来的resize.sh脚本进行扩容操作:sudo resize.sh,脚本运行完毕后会自动重启,两个步骤效果一样(但在部分系统会无法运行,还是推荐用DiskGenius弄好再开机)。

最后也不要忘了给该项目点一个Star