linux备份sd卡镜像,树莓派 RASPBERRY PI 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 dump parted kpartx rsync

二、生成新的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 - # wheezy (raspbian-jessie版本使用dump的文件不能使用restore还原)

sudo rsync -aP --exclude="raspberrypi.img" --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/tmp/* / ./

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 apt-get install dosfstools dump parted kpartx rsync

df=`df -P | grep /dev/root | awk '{print $3}'`

dr=`df -P | grep /dev/mmcblk0p1 | awk '{print $2}'`

df=`echo $df $dr |awk '{print int(($1+$2)*1.2)}'`

sudo dd if=/dev/zero of=raspberrypi.img bs=1K count=$df

sudo parted raspberrypi.img --script -- mklabel msdos

start=`sudo fdisk -l /dev/mmcblk0| awk 'NR==10 {print $2}'`

start=`echo $start's'`

end=`sudo fdisk -l /dev/mmcblk0| awk 'NR==10 {print $3}'`

end2=$[end+1]

end=`echo $end's'`

end2=`echo $end2's'`

sudo parted raspberrypi.img --script -- mkpart primary fat32 $start $end

sudo parted raspberrypi.img --script -- mkpart primary ext4 $end2 -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 -

sudo rsync -aP --exclude="raspberrypi.img" --exclude=/media/* --exclude=/sys/* --exclude=/proc/* --exclude=/tmp/* / ./

cd

sudo umount /media

sudo kpartx -d $loopdevice

sudo losetup -d $loopdevice

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值