担心树莓派系统损坏,详细记录备份和恢复SD卡中的系统

系统损坏,手误删系统对于马虎大意的程序员真是家常便饭,比如我,树莓派就被我搞坏过很多次了,幸好和可以备份SD卡,方便恢复系统,久病成医,在本指南中,我详细记录下备份Raspberry Pi的各种方法,以及如何恢复它。

backing-up-your-Raspberry-PI-watermark.jpg

有一点需要注意的是,有些备份方法会比其他方法更彻底,比如备份Raspberry Pi SD卡镜像会比单纯备份所有文件到U盘上更可靠,因为镜像是SD卡上所有分区的复制。

我将在本指南中探讨两种不同的方法来备份树莓派,这两种方法如下:

  • 使用SD卡读卡器将Raspberry Pi备份到电脑上。
  • 将Raspberry Pi备份到U盘上。

个人建议备份到电脑上,因为这是最稳妥的方法。主要是因为Raspberry Pi的网速和USB传输都不尽如人意,所以创建备份可能需要相当长的时间,并给Raspberry Pi的有限资源带来相当大的压力,不过Pi 4已经大有改善。

备份树莓Pi是一个非常有用的功能,尤其是已经配置了复杂的系统环境后。比如想做一个复杂的Pi项目,升级或其它对操作系统有不确定影响的实验。

备份Raspberry Pi SD卡

首先,我们看看怎么把树莓派SD卡备份为镜像。要做到这个,在手边需要有一个SD卡阅读器。

开始本教程时,请先在Pi的终端上运行以下命令来关闭Raspberry Pi。

sudo shutdown now

关机后,断开电源并取出SD卡。将SD卡放入SD卡读卡器中,然后继续本节指南。

本节指南将分为三个部分,一个适用于Windows,一个适用于Mac OS X,一个适用于基于Linux系统。

在Windows上备份Raspberry Pi的SD卡

1. 在Windows上备份树莓派的SD卡,将利用win32diskimager这个镜像工具。

Win32diskimager是一款非常实用的工具,它可以将镜像读取和写入U盘或SD/CF卡。这是一个很多人都熟悉的工具,因为它经常被用来将Raspbian镜像写到Raspberry Pi上。

从本节指南开始,先到win32diskimager的主页下载并安装这个工具。

2. 现在安装好win32diskimager后,打开它。应该会看到如下图所示的页面。

现在,需要确保已经选择了正确的驱动器,点击设备下的下拉框。 (1.)并确保选择了正确的SD卡驱动器编号。

之后,点击设备下拉框左侧的文件夹图标(2。

01-Win32diskimager-1.png

3. 现在会看到一个文件选择页面。然而,我们不会选择任何文件。取而代之的是,导航到要保存备份文件的文件夹。进入该文件夹,请在底部的文本字段 (1.) 中键入想给备份文件起的名字,如下图所示。

确保选择使用的名称末尾有.img。例如,我将备份文件命名为RaspberryPiMyLifeUp.img。

输入了要利用的文件名后,点击打开按钮。

02-Select-a-disk-image.png

4. 终于有了设备和新的文件名,可以开始备份了。点击 “读取 “按钮。请注意,这可能需要一些时间,因为这是对SD卡的完整备份,每一个字节都会被复制。

03-read-image.png

在Windows上恢复Raspberry Pi备份

1. 现在到了需要利用SD卡全盘备份的时候,需要再次利用win32diskimager。

在打开软件之前,请确认已经将SD卡插入到插入电脑的SD卡阅读器中。

现在打开win32diskimager软件,点击位于 “设备”(1.)标题下的下拉框,并选择正确的SD卡驱动字母。

设置好设备后,现在就可以,点击位于下拉框左侧的文件夹图标(2.)。

01-Win32diskimager-1.png

2. 现在已经加载了文件浏览器,找到之前创建的备份文件。找到后,双击文件,或者单击文件,然后点击打开按钮。

3. 选择了备份镜像后,可以继续将备份文件写入SD卡。请注意,这将擦除当前SD卡上的所有内容,所以请确保选择了正确的设备。设置好之后,点击写入按钮。

04-write-image.png

4. 写入完成后,现在的SD卡应该与最初进行备份时的状态完全一致。由于有了完整的镜像备份,卡上的所有分区也都已恢复。

在OS X上备份Raspberry Pi SD卡。

1. 将SD卡插入Mac上的读卡器,就可以开始对树莓Pi进行完整的镜像备份了。与Windows不同的是,可以很容易地使用终端来完成这项工作。

要进行本教程,首先打开终端应用程序。

2. 打开终端后,输入以下命令。这个命令将显示设备上所有可用的磁盘。

diskutil list

在这个列表中,寻找一个和您的SD卡大小差不多的磁盘。例如,对于16gb的SD卡,应该寻找一个约16gb的_partition_scheme。你也会看到,很可能有一个叫做引导的分区。

在这个列表中找到SD卡后,请注意挂载位置。比如我自己的SD卡就在/dev/disk1下。

3. 现在仍然在Mac上的终端,输入以下命令。这个命令会创建一个SD卡镜像的副本,并将其保存到主目录下,名字为PiSDBackup.dmg (文件格式是一个镜像)。

确保将/dev/disk1换成你在使用diskutil list命令看到的东西。

sudo dd if=/dev/disk1 of=~/PiSDBackup.dmg

这个命令可能需要一些时间来完成,因为它需要将整个SD卡读到磁盘上。该命令也没有提供任何反馈信息,所以请耐心输入命令再次出现,然后再从Mac中取出SD卡。

在OS X上恢复Raspberry Pi备份

1. 现在需要将Raspberry Pi恢复到系统中,需要使用diskutil list命令来找到SD卡。记住和之前一样,注意分区大小来找到你的SD卡。

diskutil list

2. 现在,向SD卡写入之前,需要先卸载它。这样做的原因是OSX会同时尝试向它写入,卸载SD卡可以防止这种情况发生。

在Mac设备上运行以下命令来卸载存储卡,再次确保将/dev/disk1替换为你使用diskutil list命令找到的那个。

diskutil unmountDisk /dev/disk1

3. 现在可以把镜像写回SD卡,这也是一个漫长的过程。记得把/dev/disk1换成你用diskutil list命令获取的挂载位置。

sudo dd if=~/PiSDBackup.dmg of=/dev/disk1

dd工具并不显示任何写入进度,所以请耐心等待回车命令提示重新出现。

4. 写入过程完成后,现在可以从Mac上弹出SD卡,这样就可以使用Raspberry Pi备份了。要弹出SD卡,可以利用以下命令。

Raspberry Pi的SD卡现在应该与进行原始备份时的状态相同。

sudo diskutil eject /dev/rdisk3

在Linux上备份Raspberry Pi SD卡

1. 开始在Linux上备份Raspberry Pi的SD卡之前,首先要在没有插入读卡器的情况下运行一个命令。这样做的原因是为了更容易看到哪个设备是哪个。

df -h

该命令将返回如下图所示的内容。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  4.0G  9.6G  29% /
devtmpfs        458M     0  458M   0% /dev
/dev/mmcblk0p1   41M   21M   21M  52% /boot

2. 现在将SD卡读卡器插入到Linux电脑中,并再次重新运行以下命令,但这次要注意附加的条目。

df -h

这条命令返回类似于上面的内容,但会有一个额外的条目,在我的例子中,/dev/sda1就是那个额外的条目,加上你的条目,去掉分区号。例如,/dev/sda1改成/dev/sda。需要这样做,因为要写到整个硬盘,而不仅仅是一个单一的分区。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  4.0G  9.6G  29% /
devtmpfs        458M     0  458M   0% /dev
/dev/mmcblk0p1   41M   21M   21M  52% /boot
/dev/sda1       3.7G   75M  3.6G   3% /media/boot

3. 现在可以利用dd命令,这是在Mac OS X上使用的同一个工具,因为它在Linux上也可以用。利用下面的命令开始将SD卡镜像转储到我们的主目录。

确保将/dev/sda替换为你使用df -h命令列出的文件系统。

sudo dd if=/dev/sda of=~/PiSDBackup.img

备份Raspberry Pi的过程可能需要一些时间,所以要耐心等待。dd工具不提供反馈,所以要等输入命令光标显示为止。

光标重新出现后,就表示成功地备份了树莓派。

在Linux上恢复Raspberry Pi备份

1. 现在已经对的Raspberry Pi进行了备份,在某个阶段想要利用它。要做到这一点,要再次寻找文件系统位置。

使用df -h命令,就像在本指南的第一部分所做的那样,这次可能会为SD卡弹出不止一个分区,如/dev/sda1和/dev/sda2。注意所有的新条目,因为需要卸载所有的条目。

2. 现在已经准备好了所有的分区位置,可以为每个分区运行以下命令来卸载它们。将/dev/sda1换成上一步得到的位置。

sudo unmount /dev/sda1

3. 所有的分区都已卸载,将备份镜像写入 SD 卡。可以运行以下命令来完成。记住把/dev/sda换成你的设备挂载位置。

sudo dd bs=4M if=~/PiSDBackup.img of=/dev/sda

备份Raspberry Pi到U盘上

1. 在插入要保存备份的U盘之前,先运行下面的命令,找出当前可用的文件系统。

df -h

该命令将返回如下图所示的内容。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  4.0G  9.6G  29% /
devtmpfs        458M     0  458M   0% /dev
/dev/mmcblk0p1   41M   21M   21M  52% /boot

2. 现在将USB设备插入到Raspberry Pi中,然后运行下面的命令,注意任何弹出的新条目。

df -h

该命令将返回如下图所示的内容。

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  4.0G  9.6G  29% /
devtmpfs        458M     0  458M   0% /dev
/dev/mmcblk0p1   41M   21M   21M  52% /boot
/dev/sda1       3.7G   75M  3.6G   3% /media/pi/MYBACKUPDRIVE

3. USB设备显示在列表中,需要查看Mounted on位置,在我的例子中,是/media/pi/MYBACKUPDRIVE。这个目录是我写入备份镜像的位置。记下它,以便在以后的教程中使用。

现在备份位置已经很方便了,可以下载要使用的备份脚本,这个脚本是树莓派论坛上一个叫Jinx的用户写的。

运行以下两个命令将脚本克隆到Raspberry Pi上。

cd ~
git clone https://github.com/lzkelley/bkup_rpimage.git

4. 现在脚本已经保存在Raspberry Pi上,可以开始使用它了。在Raspberry Pi上运行下面的命令来进行初始备份。请确保将/media/pi/MYBACKUPDRIVE替换为您自己在上一步中获取的挂载位置。

sudo sh bkup_rpimage.sh start -c /media/pi/MYBACKUPDRIVE/rpi_backup.img

这个脚本将创建一个虚拟映像,然后启动rsync进程,将系统中的所有文件复制到虚拟映像中。请注意,初始备份可能需要一个小时才能完成。

5. 现在,已经创建了初始备份文件,并知道脚本正在按计划工作,可以自动化备份。为此,将使用cron作业。

要决定的就是你是要增量备份还是多次备份。增量备份只是更新原有的备份,并不会生成新的文件。

在Raspberry Pi上运行以下命令开始编辑crontab。

sudo crontab -e

6. 在 crontab 编辑器中,在文件底部添加以下一行。这会每天进行一次备份。

增量备份

0 0 * * * sudo sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/MYBACKUPDRIVE/rpi_backup.img

多重备份

0 0 * * * sudo sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/MYBACKUPDRIVE/rpi_$(date +%Y-%m-%d).img

现在按Ctrl + X然后按Y,然后按Enter键保存文件。

7. 现在应该有一个自动备份系统,它将不断地备份Raspberry Pi到USB设备上。要恢复这些镜像,请遵循我位于本指南SD卡部分的恢复指南。

我希望你现在已经只要如何备份树莓派的SD卡了,如果遇到任何问题或有任何反馈,请留言讨论。

平均: 5 / 5. votes: 1

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 担心树莓派系统损坏,详细记录备份和恢复SD卡中的系统

赞 (1)

2 评论

5+8=

  1. 匿名

    root@raspberrypi:~# sudo sh bkup_rpimage.sh start -c /media/pi/KINGSTON/rpi_backup.img
    sh: 0: Can’t open bkup_rpimage.sh

    回复
    • 机械狮

      bkup_rpimage.sh是不是没有这个文件

      回复