系统镜像备份、还原¶
在前面的章节中介绍了如何在emmc/nand与SD卡之间如何相互备份烧录,前面的方式较为简单, 也推荐使用前面的方式对镜像进行备份,接下来将介绍一种较为复杂的备份方式作为备用方案。
基于SD卡搭建了自己的环境¶
下面介绍两种备份SD卡镜像的方法,一种是使用dd命令来备份SD卡镜像, 该方法的优点是备份的镜像大小比较小,缺点是容易制作失败; 另一种是使用Win32磁盘映像工具备份镜像,该方法的有点是比较简单直接,在windows下操作, 不容易出错,缺点是备份的镜像太大,备份时间长,它备份整个SD卡作为镜像。
将带镜像SD卡的内容打包成镜像文件.img¶
将已经搭建好环境的SD卡从开发板取出并插到读卡器上,然后将读卡器接入PC机(ubuntu中), 在桌面版本的ubuntu中会自动挂载SD卡的内容,使用
df -h
命令查看下SD卡中镜像的大小。#命令 df -h #部分打印信息 /dev/sdb2 15G 429M 14G 4% /media/zhan/rootfs /dev/sdb1 40M 17M 23M 43% /media/zhan/BOOT
在此台电脑中,该SD卡设备挂载在/dev/sdb中,由于该SD卡有两个分区, 所以/dev/sdb分为/dev/sdb1和/dev/sdb2。 大家根据自己Ubuntu中SD卡设备的实际情况来处理,如果不知道自己的SD卡设备是哪个, 可以先不插入读卡器,ls /dev看下有哪些设备, 然后再插入读卡器再ls /dev查看当前设备,对比两次的ls /dev,一般多出来的设备便是该SD卡。
从上图可以看到SD卡镜像大小为/dev/sdb1 + /dev/sdb2 = 429M + 17M = 446M。
使用
mkdir
命令创建一个新的目录,用于存放从带镜像的SD卡中拷贝的镜像。 然后使用dd
命令将带镜像的SD中的镜像拷贝到新创建的目录中。#创建新目录 mkdir image_backup #将带镜像的SD卡中的镜像拷贝到创建的目录中 sudo dd if=/dev/sdb of=./image_backup/imx6ull_backup.img count=1100 bs=1024k conv=sync #拷贝需要时间,请耐心等待,打印消息如下 记录了1100+0 的读入 记录了1100+0 的写出 1153433600 bytes (1.2 GB, 1.1 GiB) copied, 111.741 s, 10.3 MB/s
使用dd命令拷贝的时候要注意拷贝的大小尽量大于SD卡中镜像的大小,此处拷贝了1100M, 镜像大小为446M,需要保证整个镜像都被完整的拷贝出来而没有遗漏, 拷贝完成后可以将备份的img镜像烧录到其他SD卡中。
提示
若备份的镜像烧录后仍无法正常运行,请将bs=1024k改为bs=1M并去掉conv参数,即
sudo dd if=/dev/sdb of=./image_backup/imx6ull_backup.img count=1100 bs=1M
dd命令参数的含义:
if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=/dev/sdb >
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=./image_backup/imx6ull_bakcup.img, 这里的.img是镜像的格式,转成.img格式的文件后方便后续使用etcher烧录镜像 >
bs = bytes:同时设置读入/输出的块大小为bytes个字节,此处填的是1024,表示1M大小。
count = blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数,此处设置的是1100, 表示1100个bs,也就是1100M。
conv= sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
得到img文件后,就可以将这个img文件烧录到其它卡上了,具体烧录步骤请参考前面的说明。
使用Win32磁盘映像工具备份Debian系统镜像¶
Win32磁盘映像工具下载链接: https://win32diskimager.org/
在windows下新建一个空文件,后缀为img,例如backup.img, 将需要备份镜像的SD卡插到windows上并打开Win32磁盘映像工具, 然后点击文件夹图标,找到刚刚创建的backup.img文件并确认,并确认SD卡盘符, 取消“仅读取已分配区”的勾选,最后点击读取按钮,如果弹出是否覆盖backup.img的对话框, 点击是即可,等待镜像备份完毕。
此时镜像已经备份完毕,备份好的镜像就是backup.img。
除了Etcher软件之外,也能够使用Win32磁盘映像工具烧写SD卡, 打开Win32磁盘映像工具,选择backup.img镜像,选择新的空白SD卡盘符, 最后点击写入按钮即可,注意被烧录的SD卡大小必须大于等于镜像的大小。
备份开发板emmc中的环境(须支持SD卡启动)¶
在章节中,需要使用到两张SD卡,一张空白的SD镜像,一张装有系统镜像, 同时需要板子支持SD卡启动,大致步骤为:
备份:
在需要备份的开发板中插入装有系统的SD卡,选SD卡启动。
将空白SD卡通过读卡器插到开发板上。
将开发板的内容备份到空白SD卡上。
烧录:
将需要烧写系统的开发板插入装有系统的SD卡,选择SD卡方式启动。
将备份好数据的SD卡通过读卡器插到需要烧写的开发板中,将备份的内容烧写到该开发板中。
产品量产,且需将制作好的SD卡镜像备份到emmc中¶
注意
需要将空白SD卡格式化为NTFS格式,FAT32格式不支持4G以上文件大小的拷贝。 同时还要使镜像系统支持NTFS格式,从emmc备份的镜像只能烧录到其他emmc板子上。
备份¶
想要系统支持NTFS格式有两种方法, 一种是在制作linux内核的时候,在make menuconfig菜单选项里面勾选NTFS格式支持选项, 另一种是通过软件包安装NTFS格式支持,此处采用第二种方法,通过apt命令安装
ntfs-3g
即可 。将烧录好镜像的SD卡插入到板子上,选择以SD卡的方式启动开发板。
1 2 3 4 5
#更新软件索引 sudo apt updade #安装ntfs-3g sudo apt install ntfs-3g
将空白SD卡格式化为NTFS格式,将SD卡插入读卡器并接入PC机, 找到该SD卡存储器,右击,然后选择NTFS格式化即可, 所用的SD卡大小必须大于emmc设备的容量大小。
将空的NTFS格式的SD卡插入读卡器,然后将读卡器接入板子的USB接口, 可输入
lsblk
命令查看设备情况,如下所示lsblk #打印信息如下 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 14.9G 0 disk └─sda1 8:1 1 14.9G 0 part mmcblk1 179:0 0 7.3G 0 disk ├─mmcblk1p1 179:1 0 40M 0 part /boot └─mmcblk1p2 179:2 0 7.2G 0 part / mmcblk1boot0 179:8 0 4M 1 disk mmcblk0 179:16 0 7.4G 0 disk ├─mmcblk0p1 179:17 0 40M 0 part └─mmcblk0p2 179:18 0 7.4G 0 part mmcblk1boot1 179:24 0 4M 1 disk
此处可看到SD卡大小为14.9G已经识别出来了,设备为sda1。
使用
mount
命令将SD卡设备挂载到/mnt这个挂载点下。mount -t ntfs-3g /dev/sda1 /mnt/
使用
df -h
命令可看到/dev/sda1已经被挂载到了/mnt目录下df -h #打印消息如下 Filesystem Size Used Avail Use% Mounted on udev 82M 0 82M 0% /dev tmpfs 49M 1.6M 48M 4% /run /dev/mmcblk0p2 7.2G 425M 6.4G 7% / tmpfs 244M 0 244M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 244M 0 244M 0% /sys/fs/cgroup /dev/mmcblk0p1 40M 17M 23M 43% /boot /dev/sda1 15G 41M 15G 1% /mnt
使用dd命令将整个emmc设备的内容全部备份到/mnt/中,在开发板上emmc的设备为 mmcblk1,其中mmcblk1p1和mmcblk1p2为emmc的两个分区,此处需要备份的是emmc的全部 内容。输入命令
sudo dd if=/dev/mmcblk1 of=/mnt/image_emmc_backup.img
开始拷贝。sudo dd if=/dev/mmcblk1 of=/mnt/image_emmc_backup.img
当输入完这条命令后,此时需要耐心的等待备份完成,因为板载emmc大小默认为8G, 所以非常耗时间,一般需要好几个小时,甚至一上午。
当看到如下信息,说明表明拷贝完成。
#拷贝完成信息 15269888+0 records in 15269888+0 records out 7818182656 bytes (7.8 GB, 7.3 GiB) copied, 12933.1 s, 605 kB/s
最后使用
umount /mnt
取消挂载。
umount /mnt
还原¶
使用需要烧录的新板子,插入装有镜像的SD卡,选择SD卡启动, 同时将备份好的SD卡插入读卡器通过USB接口连接到板子上。 板子启动后确定备份的SD卡所对应的设备文件,使用
mount
命令挂载到 /mnt 中,sudo mount -t ntfs-3g /dev/sdb1 /mnt/
挂载后,接下来就是将挂载点/mnt目录下的image_emmc_backup.img文件烧录到emmc上, 开发板的emmc设备文件默认为/dev/mmcblk1。
使用dd命令,将image_emmc_backup.img文件的数据拷贝到/dev/mmcblk1上。
sudo dd if=/mnt/image_emmc_backup.img of=/dev/mmcblk1
还原的时间也是相当漫长,请耐心等待。
至此,镜像备份结束。