手上有多块firefly rk3328开发板,在一块开发板上面安装了ubuntu和ROS kinetic之后,想着直接把镜像备份出来,然后再将镜像刷入其他的内存卡,这样的话就无需一一去安装系统和ros了。
准备:
(1)firefly rk3328开发板一块。我的是2G内存的规格。
(2)16G内存卡一个。
(3)U盘一个(用于存储备份下来的镜像)。
我们这里不用win32diskImager制作,因为它会读取整个内存卡的空间,占用的空间很大,无法刷到容量更小的内存卡。我这里用了一张16G内存卡,实际上安装完系统和ROS还有qt等软件之后,一共才用了6.4G,所以这个是可以安装在8G内存卡上的。
开始吧!
1.查看当前系统所占容量:
sudo fdisk -l
如下图:
可以看到,这个内存卡上一共有5个分区,前三个分区我也不知道是什么,第四个分区是EFI引导分区,就是我们说的boot分区,第5个分区是linux的系统分区,我们只需要备份后面两个分区即可。
然后再通过df -h查看一下占用情况:
可以看到系统占用了6.4G。
我们也可以通过计算得知当前系统占用的大小:大概再6.6G左右,保险起见,我们就多分配一些。我这里就分配7.4G吧。
2.安装工具
dosfstools:fat32分区格式化工具
dump:dump & restore 备份工具
parted & kpartx:虚拟磁盘工具
安装:
sudo apt-get install dosfstools dump parted kpartx
如下图为安装成功:
3.创建镜像文件
创建一个空白的image文件,用于存储备份的系统文件。
sudo dd if=/dev/zero of=firefly_rk3328_ubuntu16.04_ros.img bs=1M count=$df
这里的count=$df需要根据自己的实际系统大小调整,比如我分配了7.4G的大小:
sudo dd if=/dev/zero of=firefly_rk3328_ubuntu16.04_ros.img bs=1M count=7400
此处注意
dd命令中【1k=1024b;1KB=1000b;1M=1024kb;1MB=1000kb】
这一步需要在16G U盘里面做,因为我们生成的系统镜像是存储在U盘里方便拷贝的。如下图:
4.分割虚拟磁盘
看一下mmcblk0上面的具体数据块分割情况:
sudo fdisk -l /dev/mmcblk0
如下图所示:
还可以通过命令:
df -T
查看的到分区的文件系统。我这里boot分区是fat32格式的,root分区时ext4格式的。如下图:
然后,我们开始分割虚拟磁盘:
sudo parted firefly_rk3328_ubuntu16.04_ros.img --script -- mklabel msdos
sudo parted firefly_rk3328_ubuntu16.04_ros.img --script -- mkpart primary fat32 2048s 497144s
sudo parted firefly_rk3328_ubuntu16.04_ros.img --script -- mkpart primary ext4 497145s -1
5.挂载虚拟磁盘并格式化
首先我们通过以下命令查看所有回环设备:
losetup -a
然后通过losetup命令将我们创建的镜像文件的第一个分区即boot分区映射到loop设备:
sudo losetup -o 32768 --sizelimit 134183936 -f firefly_rk3328_ubuntu16.04_ros.img
再次查看所有回环设备,看多出了哪个设备下面我们需要用。
格式化设备:
sudo mkfs.vfat /dev/loop0 //这里的loop0为我们刚刚看到的那个多出来的回环设备。
然后,我们挂载回环设备:
mount /dev/loop0 /media_p //这里的media_p为我们创建的挂载映像分区的文件夹
然后拷贝boot文件夹下所有数据到映像文件的第一个分区:
sudo cp -rfp /boot/* /media_p
这样第一个boot分区就备份成功了。
卸载影响文件的第一个分区:
umount media_p
接下来我们备份另一个分区。
同样的,通过losetup命令将我们创建的镜像文件的第二个分区即boot分区映射到loop设备
sudo losetup -o 134217216 --sizelimit 7624245248 -f firefly_rk3328_ubuntu16.04_ros.img
格式化设备:
sudo mkfs.ext4 /dev/loop1
然后,我们挂载回环设备:
mount /dev/loop1 /media_p //这里的media_p为我们创建的挂载映像分区的文件夹
复制数据:
sudo cp -rfp /* /media_p
rsync -av --exclude /media/root --exclude /media_p . /media_p
卸载分区:
sudo cp -rfp /boot/* /media_p
备份完成!
卸载loop设备:
sudo losetup -d loop0
sudo losetup -d loop1
参考:
1.http://blog.sina.com.cn/s/blog_9ac48e3c0102ybep.html
标签:firefly,树莓,--,media,分区,sudo,开发板,rk3328 From: https://blog.51cto.com/u_15882586/5869360