我们的嵌入式开发板上的ubuntu操作系统存在于一张sdcard上。怎么备份这个系统到另外一张sdcard上呢?简单地拷贝似乎行不通,无法启动。我使用linux dd命令圆满完成备份任务,经过验证,系统能够启动,运行正常。
步骤如下:
准备两张sd卡,源卡和目标卡。目标卡的容量必须大于等于源卡。dd命令使用比较容易,将两张sd卡插入读卡器,用dmesg | tail 命令查看两个sd卡的名称,我看到的是sdb,sdc等。以sdb是源卡,sdb卡是目标卡为例,将sdb中的系统备份到sdc中,命令是dd if=/dev/sdb of=/dev/sdc。千万不要将if和of弄反。
为了以防万一,我没有进行两张sd卡之间的直接拷贝,而是将源卡备份到文件中,再从文件备份到目标卡。这样的好处有两点:1.不用担心弄反了源卡和目标卡,而误将源卡覆盖;2.将源卡的内容备份到系统上,以后再备份的时候,不用再读源卡,直接从该文件备份即可。缺点也有一个,我的sd卡是4G的,这么多数据放在电脑上,还是挺占空间的。
我使用的命令:
1.将源卡中的系统备份到文件
sudo dd if=/dev/sdb of=~/sdcar1
我拷贝了4G的数据,耗时10分钟左右。
2.将文件中的数据备份到目标卡
sudo dd if=~/sdcard of=/dev/sdc
这个比较耗时,用了近1个小时。不知道是不是因为我是在虚拟机里面操作的缘故。据说,dd命令拷贝4G这么大的数据容易失败,但是我试过多次,就有1次失败了,其他几次都是成功的。还比较幸运。
以下是我三次运行dd命令的记录,没有出错。注意到第2次拷贝文件大小与第1次和第3次稍有差异,估计虽然都是4G的sdcard,由于厂商不同,容量上面稍有差异。不过经过验证系统能够正常启动。
1. sudo dd if=/dev/sdc of=/mnt/hgfs/D/sdcard1
7744512+0 records in
7744512+0 records out
3965190144 bytes (4.0 GB) copied, 788.622 s, 5.0 MB/s
3965190144
2. sudo dd if=/mnt/hgfs/D/sdcard1 of=/dev/sdb
7741441+0 records in
7741440+0 records out
3963617280 bytes (4.0 GB) copied, 3799.31 s, 1.0 MB/s
3. sudo dd if=/mnt/hgfs/D/sdcard1 of=/dev/sdb
7744512+0 records in
7744512+0 records out
3965190144 bytes (4.0 GB) copied, 4830.33 s, 821 kB/s