制作条件:
一个U盘,window系统上的虚拟机,需要备份根文件的开发板(我的是RK3568);
首先将现有的根文件,完成备份:方法很多种,这里只讲利用tar工具和dd,
第一种方法:使用 tar
工具
sudo tar --exclude=/proc --exclude=/sys --exclude=/tmp --exclude=/dev --exclude=/mnt --exclude=/media --exclude=/run --exclude=/var/log --exclude=/var/tmp --exclude=/var/cache -czvf /path/to/backup/rootfs.tar.gz .
-
--exclude
参数排除不需要的目录,例如:
-
/proc
,/sys
: 虚拟文件系统,动态生成。 -
/tmp
,/var/tmp
: 临时文件目录。 -
/run
,/var/run
: 动态运行时数据。 -
/dev
: 设备文件。 -
/var/log
,/var/cache
: 日志和缓存文件。 -
/path/to/backup/
是存放打包文件的目录,可以选择挂载的外部存储设备。
这样就得到了一个压缩包rootfs.tar.gz,利用scp
或 rsync
进行传输,将压缩包拷到虚拟机里头;
接下来在虚拟机里利用这个压缩包制作rootfs.img,
首先先创建一个工作目录
mkdir -p rootfs
将压缩包解压进去
sudo tar -zxf rootfs.tar.gz -C rootfs/
然后查看整个根文件多大,得到如下得类似输出,
sudo du -sh rootfs
所以现在需要一块地址,大小要大于5.1G的地方,制作rootfs.img,
dd if=/dev/zero of=rootfs.img bs=1G count=6
接着将rootfs.img文件格式化为EXT 4格式
mkfs.ext4 rootfs.img
将这块地址挂载到一个目录下,然后将压缩包解压进去;
sudo mount -o loop rootfs.img /mount_dir(自己选一个空目录)
sudo tar -zxf rootfs.tar.gz -C /mount_dir
然后记住,先取消挂载,
sudo umount -l /mount_die
再次挂载rootfs.img,查看是否制作完成
sudo mount -o loop rootfs.img /mount_dir
ls /mount_die
到这里,使用tar打包开发板根文件系统就完成了,你可以用这个镜像烧录到别的同型号开发板,做生产的部署 ,再简单点,把这个根文件镜像,合成进整个系统镜像的固件里去,这里省略说明
另一种方法就是直接在开发板,开辟空间,直接生成rootfs.img根文件。这里有两种方式:
1:通过 dd
工具制作整盘镜像
这种方法直接将整个分区或设备内容打包为 .img
文件。
流程
1. 确认设备名称
运行以下命令确认目标设备的名称,例如 /dev/mmcblk0
或 /dev/sda
:
lsblk
2. 挂载或卸载设备
确保设备未被使用,并卸载所有挂载点:
sudo umount /dev/sdX1 /dev/sdX2 # 替换为实际的挂载点
3. 创建镜像文件
使用 dd
命令生成镜像:
sudo dd if=/dev/sdX of=/path/to/output.img bs=4M status=progress
说明:
if=/dev/sdX
是输入设备路径。of=/path/to/output.img
是输出镜像文件路径。bs=4M
设置读写块大小为 4MB,提升速度。status=progress
显示进度。
4. 验证镜像文件
可以通过 file
命令查看 .img
文件是否正确:
file /path/to/output.img
这种方式就是将整个开发板打包成镜像,我试过了,时间很久,最后烧到别的地方,也不适配,很多错误, 不推荐,我建议就是,分开打包,减少工作量
2:自定义根文件系统生成镜像
这种方法适合需要从根文件系统 (rootfs
) 手动生成镜像文件的情况。这个前提是你的开发板空间足够用,因为既要打包根文件,又要开辟空间制作镜像,需要大量空间
流程
1. 准备根文件系统
确保已经有一个完整的根文件系统目录,利用开头的第一种方法先把根文件打包出来rootfs
,或者你直接用 / 根文件,复制整个根文件
2. 创建空白镜像文件
创建一个指定大小的空镜像文件:
dd if=/dev/zero of=/path/to/rootfs.img bs=1M count=1024*6
说明:此命令创建一个 6GB 的空白镜像,
count=1024
*6指定块数量。
3. 格式化镜像文件
将镜像文件格式化为指定的文件系统(如 ext4):
mkfs.ext4 /path/to/rootfs.img
4. 挂载镜像文件
挂载镜像文件到临时目录:
sudo mount /path/to/rootfs.img /mnt
5. 复制根文件系统
将根文件系统复制到镜像中:
sudo rsync -a /path/to/rootfs/ /mnt/
6. 卸载镜像文件
复制完成后,卸载镜像:
sudo umount /mnt
然后这就生成完成了,拷出来用就行了。