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

༺小ʚɞ寞༻ Raspberry评论22,5171字数 2643阅读8分48秒阅读模式

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

一、安装需要的软件

  dosfstools:fat32分区格式化工具

  dump:dump & restore 备份工具

  parted & kpartx:虚拟磁盘工具

  执行安装脚本

  1. sudo apt-get install dosfstools
  2. sudo apt-get install dump
  3. sudo apt-get install parted
  4. sudo apt-get install kpartx

二、生成新的img文件

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

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

三、分割虚拟磁盘

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

  • 第一个分割区采用FAT32格式,由sector 8192开始到sector 12879,约62.9MB
  • 第二个分割区采用EXT4,由sector 122880开始到结束。
  1. sudo parted raspberrypi.img --script -- mklabel msdos
  2. sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
  3. 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 虚拟磁盘分区。

  首先建立虚拟磁盘并分区

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

格式化虚拟磁盘分区

  1. sudo mkfs.vfat $partBoot
  2. 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 备份

  1. sudo mount -t ext4 $partRoot /media/
  2. cd /media
  3. sudo dump -0uaf - / |  sudo restore -rf -
  4. cd
  5. sudo umount /media

六、卸载虚拟磁盘

  1. sudo kpartx -d $loopdevice
  2. sudo losetup -d $loopdevice

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

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

  1. #!/bin/sh
  2. sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=2500
  3. sudo parted raspberrypi.img --script -- mklabel msdos
  4. sudo parted raspberrypi.img --script -- mkpart primary fat32 8192s 122879s
  5. sudo parted raspberrypi.img --script -- mkpart primary ext4 122880s -1
  6. loopdevice=`sudo losetup -f --show raspberrypi.img`
  7. device=`sudo kpartx -va $loopdevice | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1`
  8. device="/dev/mapper/${device}"
  9. partBoot="${device}p1"
  10. partRoot="${device}p2"
  11. sudo mkfs.vfat $partBoot
  12. sudo mkfs.ext4 $partRoot
  13. sudo mount -t vfat $partBoot /media
  14. sudo cp -rfp /boot/* /media/
  15. sudo umount /media
  16. sudo mount -t ext4 $partRoot /media/
  17. cd /media
  18. sudo dump -0uaf - / | sudo restore -rf -
  19. cd
  20. sudo umount /media
  21. sudo kpartx -d $loopdevice
  22. sudo losetup -d $loopdevice

weinxin
LuckTang's Blog 站长语录
LuckTang's Blog,欢迎各位来访!这是我的QQ,扫一扫,加好友。大家一起交流博客建站技术,分享前沿资讯!
如何在Linux下禁用IPv6 Linux

如何在Linux下禁用IPv6

IPv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题。然而,由于已经有大量主机、设备用IPv4连接到了互联网上,所以想在一夜之间将它们全...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定