写在前面 一堆废话
前几天因为树莓派烧了,32G的SD卡数据也莫名其妙损毁了。好在坏的几天前有备份,不至于损失惨重
现在往32G卡写了新系统,不舍得覆写,手上又只有一张16G内存的卡。
由于数据是全盘备份,用起来就比较棘手(32G数据无法写入16G卡)
因此本文加入了dd全盘备份的裁剪与恢复,以及文章末尾带有部分问题的解决办法
***数据无价,记得备份***
一、SD卡的全盘备份
用 dd命令 进行全盘备份
- 将带树莓派系统的sd卡插入带Linux系统的电脑(本文以VMware的CentOS7虚拟机为例)
- 用
lsblk命令找到SD卡的盘名,如我的为sdb(其中包含两个分区sdb1和sdb2) - 输入以下命令备份整盘
# /dev/sdb 即sdb盘的完整路径,'>'符号后接输出路径及文件名,此过程较为漫长 $ sudo dd if=/dev/sdb status=progress | gzip>~/temp/rpi-bak.gz
这样就能得到一个名为 rpi-bak.gz 的树莓派整盘备份文件了
用 Win32DiskImager 进行全盘备份
这个方法比较简单,属于是下载软件就会了。此处不再赘述。 附一个下载网址:https://sourceforge.net/projects/win32diskimager/
二、全盘备份的裁剪
- 下载PiShrink脚本:
wget https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh - 将 pishrink脚本 移到你想放的文件夹。本文放在
~/temp文件夹。(此步与下一步的文件夹可以用如ftp的挂载文件夹) - 将 dd导出的gz文件 移到
temp文件夹(你 PiShrink 放哪了你就移到哪) - 解压 dd导出的gz文件(
rpi-bak.gz改成你的文件名,解压之后会生成一个同名的无后缀的文件,并会删除源文件)gzip -d rpi-bak.gz - 赋予 PiShrink 运行权限
sudo chmod 711 pishrink.sh - 开始裁剪,无响应就等会就好
sudo bash pishrink.sh rpi-bak - 裁剪完成后压缩回去(恢复的时候得用的到)
gzip rpi-bak
此时你就能得到一个和原来镜像文件差不多大小但解压后和原服务器占用内存差不多大小的文件(不至于解压后大小和SD卡一样大……)。
三、压缩备份
这个方法比较复杂,不适合小白,这里就只放一篇参考文章按需查看。 树莓派学习笔记 篇四:树莓派4B 的系统备份方法大全(全卡+压缩备份)
四、将 PiShrink 裁剪后的文件恢复至SD卡
- 将欲覆写的卡插入带Linux系统的电脑(本文以VMware的CentOS7虚拟机为例)
- 用
lsblk命令查看卡的名称(与上述一致),如此处为sdb - 将 gz文件 复制(或挂载)到Linux系统
- 开始恢复
sudo gzip -dc ~/temp/rpi-bak.gz | sudo dd of=/dev/sda status=progress"~/temp/rpi-bak.gz"为 gz文件 目录,"/dev/sda"为SD卡完整路径
此时恢复完成,可以直接用当前的Linux系统打开SD卡查看里面的数据。
五、踩坑记录
PiShrink 提示 e2fsck: Get a newer version of e2fsck!
我这只说个大概,此文章有详细教程(英文):
How to fix: "e2fsck: Get a newer version of e2fsck! "
简而言之: e2fsck 版本过低
# CentOS 7 !!! 别的系统不一定凑效,此时请移步我们官方合作的百度
$ wget https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.43/e2fsprogs-1.43.tar.xz
$ tar -xf e2fsprogs-1.43.tar.xz
$ cd e2fsprogs-1.43
$ sudo ./configure
$ sudo make
$ sudo make install此时该问题就修好了……你是想不到我因为这个问题踩了多少坑……