来自 九年吃菜粥 的投稿。
在我们使用树莓派进行学习或者搭建实验环境时经常会把系统玩坏,辛苦配置的开发环境又得重新配置;或者更新某一软件后发现新版本和某些组件不兼容,又无法降级。这个时候我们会想将系统在稳定时进行备份,在系统出现问题后可以很方便的进行恢复。
1、使用 Win32DiskImager 进行备份(Read操作)
这个方法是网上很多教程中写的方法,这个方法的缺点是:只能进行全卡备份,像我使用的内存卡容量是 128G,安装好系统和一些组件后虽然只占用10G左右的空间,用这个方法进行备份的镜像大小将是 128G(虽然我只使用了其中的 10G 的空间),网上很多文章说可以用PiShrink脚本进行压缩裁剪,但我测试后很多系统会裁剪失败,原因是该脚本不支持部分系统的镜像,我自己用 Ubuntu server 和 Manjaro-arm 进行测试都是这个问题,如果你用 16G 以下的小容量 tf 卡,直接用这种方法就行。
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 系统中该脚本无法自动安装依赖项,需要运行这行命令 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!
在烧录完毕后不要着急,我们还要一项操作没有做,打开 DiskGenius 后查看 tf 卡的分区可以看到有一部分空闲分区没有被分配。
这会导致进入系统后可用空间变少,在这里我直接用 DiskGenius 将空闲分区分配给 root 分区,这样不用在进入系统后做其他操作。
也可以进入系统后执行 git clone 来的 resize.sh 脚本进行扩容操作:sudo resize.sh,脚本运行完毕后会自动重启,两个步骤效果一样(但在部分系统会无法运行,还是推荐用 DiskGenius 弄好再开机)。
最后也不要忘了给该项目点一个 Star。