美文网首页我的收藏
【转载】树莓派 RASPBERRY PI SD卡系统备份与还原

【转载】树莓派 RASPBERRY PI SD卡系统备份与还原

作者: duyi324 | 来源:发表于2018-01-16 14:55 被阅读40次

    标签: 树莓派 Linux 系统备份


    原文链接http://www.fendou.info/raspberry-pi-sd-card-backup-and-recovery/comment-page-1/
    【没看到作者的声明,转侵删】


    近半年时间用来监控陆龟的树莓派 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命令备份文件

    sudo mount -t vfat $partBoot /media
    sudo cp -rfp /boot/* /media/
    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 backup.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 -1
    
    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
    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
    

    相关文章

      网友评论

        本文标题:【转载】树莓派 RASPBERRY PI SD卡系统备份与还原

        本文链接:https://www.haomeiwen.com/subject/usvsoxtx.html