opi3 emmc系统备份实践
背景描述
opi3我烧写的是armbian系统,这个系统有个很好用的工具armbian-config,可以通过它实现将sd卡系统烧写到emmc上。本质上是调用
nand-sata-install
这样一段脚本。这个脚本实现了将sd卡系统搬迁到emmc并建立分区。这个指令相对挺高效的。
但实际生产中,我在这台机器上开发好的程序,安装的更新等等需要迁移到另一块相同的板卡上。(类似于小批量样机)这时我应该怎么做呢?直接的办法是将这块的emmc直接拷贝到另一块上。(猜想借助sd卡上的系统,通过rsync将这个机器上的拷贝到另一台机器的emmc上应该是可行的。但我没有实践。)
思路
问题有了,可以归纳成一句话:如果归档和恢复emmc上的系统?
归档或者备份系统又多个方法。一个是用比emmc大的sd卡,将emmc上的文件全盘拷贝过来。不用制作压缩成image文件。是整个磁盘拷贝,这就意味这将启动目录也拷贝进来。理论上应该可以直接从这个磁盘启动的。
另一个方法是将系统压缩成镜像,在需要的使用镜像制作工具将镜像先烧到sd卡中,然后再用nand-sata-install工具将系统克隆到emmc中。
这两种方法无所谓优劣:前者适合立刻使用,减少重新制作镜像的环节。后者适合长期保存。
实现
我并非linux高手,没有系统研究过常用的工具。通过搜多了解到最常用的方案是使用dd指令。另外需要安装fdisk工具来辅助查看当前的磁盘名称。
1、原始linux板卡,系统运行在emmc上。我的opi3是8Gemmc,我手边刚好又一个16G SD卡。
2、启动系统并插入SD卡。使用sudo fdisk -l来查看磁盘分布。我的emmc在blk1上,sd在mmcblk2上。当然前者此时是两个分区mmcblk1p1和mmcblkp2.(你的可能还有mmcblk0)以自己的为主。据说dd指令有可能将你自己的系统也干掉,所以安全器件一定要检查好磁盘名称,并确保敲命令之后检查一下。
dd -if =原始磁盘 -of=存储磁盘 bs = 扇区大小 [有些人会加上-count = 总共拷贝的扇区数目+1] .
我没有使用-count.bs可以在fdisk的地方看到,count实际上也可以。这里不再赘述。
dd if= /dev/mmcblk1 of=/dev/mmcblk2 bs=512
替换成你的emmc 替换成你的SD卡
3、dd命令确认之后,没有任何提示。你需要等待一段时间,视磁盘大小和传输速率。而定。结束之后会提示你。一定要耐心等待。
4、将做好的sd卡插到新的目标板上,opi3系统自动从sd启动的。然后确认一下系统是不是新的。应该没问题。然后再找到armbian-config或者直接nada-sata-install安装即可。
扩展
上面的方法对应思路一。思路二还是使用dd,不过上面的命令就换成了:
dd if=/dev/mmcblk1|gzip -c of=/dev/mmcblk2 bs=512
替换成你的emmc 替换成你的SD卡
同时增加一个使用etcher等工具制作镜像的过程。
这个思路我暂时没有测试过。可以作为你尝试的起点。
结论
dd方法很强大,很适合树莓派,opi等的使用。但对于电脑系统备份,还需要对系统进行压缩等操作。需要使用其它方式结合dd指令或者别的工具来实现。