树莓派 Raspberry Pi SD卡系统备份与还原

2024-08-31 06:38

本文主要是介绍树莓派 Raspberry Pi SD卡系统备份与还原,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

近半年时间用来监控陆龟的树莓派 Raspberry Pi  还算稳定,可到了冬天龟箱里的加热灯长时间加热导致树莓派温度很高,时不时的自动重启。如果每次都能正常起来也就罢了,可偶尔会挂不上SD卡的文件系统直接宕了,还得用备份还原SD卡(如果没备份那就悲催了)。

买树莓派的时候只想到存储空间大能多存的东西于是买了个16GB的SD卡,可实际用了2G空间不到。最开始备份树莓派SD卡是用windwos下的Win32DiskImager,这种备份恢复树莓派的方式最简单,Windows+读卡器+Win32DiskImager 就可以对树莓派的SD做完整的镜像备份,可我的树莓派用的16GB的SD卡,备份还原既浪费空间又浪费时间。

后来发现一种直接用dd备份树莓派的方法,就是先在树莓派上mount一个共享目录(空间大于SD卡的即可),然后用

dd if=/dev/mmcblk0 of=raspberrypi.img bs=1M

备份成raspberrypi.img镜像文件,恢复的方式有两种:一是用Win32DiskImager在windows系统上直接写到SD卡中;二是在Linux系统中用(先fdisk -l查看设备)

dd if=/path/to/image/raspberrypi.img of=/dev/sdx

这种方式要考虑网络环境,如果你的树莓派接的无线网卡,最好放弃这种方式,太慢!

最后介绍最终极的备份还原树莓派的方式,利用dump 和 restore。先说明一下这种备份方式的好处:一是可以像Windows的Ghost只dump有效数据,也就是说可以最有效的节省备份空间,树莓派有多少数据就生成多大的镜像文件;二是可以恢复到比原来SD卡空间的小的SD卡上,我原来用的树莓派是16GB,现在可以把镜像恢复到8GB或者4GB的SD中。下面看详细步骤(不想看可以直接跳到最后的脚本)

一、安装需要的软件

dosfstools:fat32分区格式化工具
dump:dump & restore 备份工具
parted & kpartx:虚拟磁盘工具

执行安装脚本

sudo apt-get install dosfstools
sudo apt-get install dump
sudo apt-get install parted
sudo apt-get install kpartx

二、生成新的img文件
先df -h查看下树莓派实际使用空间然后在决定生成文件大小,下面命令生成块大小为1MB总大小为2500MB的镜像文件

sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500

三、分割虚拟磁盘

利用parted将刚才生成的虚拟盘分割成两个分区

  • 第一个分割区采用FAT32格式,由sector 8192开始到sector 12879,约62.9MB
  • 第二个分割区采用EXT4,由sector 122880开始到结束。
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1

四、挂载虚拟磁盘并格式化

  • loopdevice:执行 losetup 连接 img 文件的 loop device
  • device:执行完 kpartx 后,虚拟磁盘代号。
  • partBoot:由 device 加上 p1 组合而成的 FAT32 虚拟磁盘分区。
  • partRoot:由 device 加上 p2 组合而成的 EXT4 虚拟磁盘分区。

首先建立虚拟磁盘并分区

loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"

格式化虚拟磁盘分区

sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot

五、开始备份
fat32虚拟磁盘分区建立好后直接用cp命令备份文件

 
  1. sudo mount -t vfat $partBoot /media
  2. sudo cp -rfp /boot/* /media/
  3. sudo umount /media

ext4 linux虚拟磁盘分区用dump & restore 备份

sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / |  sudo restore -rf -
cd
sudo umount /media

六、卸载虚拟磁盘

sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice

经过以上六步树莓派中的数据文件就全部备份到raspberrypi.img中了,你既可以在Windows中用Win32DiskImager将镜像恢复到SD卡,也可以在Linux用dd还原到SD卡,而且不要求恢复SD卡的大小跟原来的一样(不同品牌相同大小的SD卡实际可用空间不一样的,坑!),这样就可以很方便的更换SD卡。当用此SD卡启动树莓派的时候执行raspi-config ->Expand Filesystem 即可扩展未使用的空间。

这里就是最后的脚本,包含了以上六步,只需要编辑sudo vi backup.sh复制以下内容,sudo chmod 777 genimg.sh,然后sudo ./backup.sh就可以在当前脚本目录中生成树莓派的SD卡镜像了。

#!/bin/sh
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
sudo parted raspberrypi.img --script -- mklabel msdos
sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1loopdevice=`sudo losetup -f --show raspberrypi.img`
device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
device="/dev/mapper/${device}"
partBoot="${device}p1"
partRoot="${device}p2"
sudo mkfs.vfat $partBoot
sudo mkfs.ext4 $partRoot
sudo mount -t vfat $partBoot /media
sudo cp -rfp /boot/* /media/
sudo umount /media
sudo mount -t ext4 $partRoot /media/
cd /media
sudo dump -0uaf - / | sudo restore -rf -
cd
sudo umount /media
sudo kpartx -d $loopdevice
sudo losetup -d $loopdevice
 
come from:http://www.fendou.info/raspberry-pi-sd-card-backup-and-recovery/comment-page-1/

这篇关于树莓派 Raspberry Pi SD卡系统备份与还原的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123173

相关文章

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创