rk3576_debian12文件系统备份
前言
在开发的过程中,我们经常会在开发板上安装了很多程序,配置了复杂的环境,配置系统之后我如果要在另外一块开发板配置同样的环境,这个时候会发现很麻烦,费时又费力,还容易出错。这里提供一种方法从开发板中导出文件系统,并重新打包为根文件系统镜像。
一、开发环境
开发板:armsom-sige5
-
CPU:RK3576
-
Kernel:6.1
-
OS:Debian12
PC机:Ubuntu22.04
注意:这里是在 PC 机中同步开发板的文件系统,需要开发板和 PC 机置于同一局域网内。
二、文件同步
这里要借助rsync
把roorfs的所有文件拷贝到另一台linux服务器,rsync 是一个强大的文件同步工具,用于在本地或者通过SSH等远程协议之间同步文件和目录。它比常规的 cp 命令更加灵活和高效,特别适合大量数据或者需要定期备份的场景。
2.1 开发板上的操作
2.1.1 安装ssh、rsync
sudo apt-get install ssh
sudo apt-get install rsync
2.1.2 设置root用户密码
sudo passwd root
#如果当前用户已经是root用户,可以直接运行
passwd
2.1.3 设定root登录
PermitRootLogin是sshd服务的配置项之一,它决定了是否允许root用户通过SSH登录到系统。PermitRootLogin有以下几种取值:
- yes:允许root用户通过SSH登录。
- no:禁止root用户通过SSH登录。
- without-password:只允许使用公钥进行身份验证的root用户通过SSH登录。
- forced-commands-only:只允许通过强制命令(比如scp)进行身份验证的root用户通过SSH登录。
编辑SSH配置文件检查 PermitRootLogin
选项的设置。确保允许 root
用户登录:
vi /etc/ssh/sshd_config
默认是
#PermitRootLogin prohibit-password
改为
PermitRootLogin yes
保存文件后,重启SSH服务:
sudo systemctl restart sshd
2.1.4 清除系统多余文件
配置开发板环境的时候会出现很多残余的缓存或者临时文件,可以先把板子上的空间清理一下。
首先,使用命令查看磁盘空间的使用情况
du -sh /*
清理系统生成的临时文件和缓存
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo rm -rf /var/cache/
这一步对固件大小没有要求的话也可以忽略
2.2 Ubuntu主机上的操作
2.2.1 安装ssh、rsync
sudo apt-get install ssh
sudo apt-get install rsync
2.2.2 同步开发板文件
ping一下开发板,确保ubuntu主机和开发板能够ping通。
接着在Ubuntu主机上创建一个目录,用于存放导出的开发板文件系统。
lhd@lhd:~/3576_rootfs_test$ mkdir rootfs
使用以下命令同步RK3576开发板上的文件系统
sudo rsync -avx root@192.168.100.123:/ rootfs
其中:
- root为开发板的用户名
- 192.168.100.123为开发板的ip地址,这个按照自己板子的实际情况定
- /:根目录是开发板的根目录
- rootfs:这里是ubuntu主机上创建的rootfs文件夹的路径
执行这一步一定需要root用户才行,前面也有讲到怎么配置root用户用于ssh登录。
同步的过程需要点时间,执行完命令后可以将开发板的文件系统同步到ubuntu主机上。
2.2.3 创建镜像文件
先使用dd命令创建一个空镜像文件。
lhd@armsom:~/3576_rootfs_test$ dd if=/dev/zero of=rk3576_rootfs.img bs=1M count=7168
其中:
- /dev/zero:特殊的设备文件,用来生成一个指定大小且内容为零的文件
- rk3576_rootfs.img:要创建的镜像文件
- bs=1M :表示每块读写1M数据
- count=4096:拷贝块的数量
这里count的实际大小可以根据开发板的系统大小调整,在开发板下执行df -h
计算得到系统的大小。
2.2.4 格式化镜像文件
使用以下命令格式化镜像文件,并加入linuxroot卷标
sudo mkfs.ext4 -F -L linuxroot rk3576_rootfs.img
这条命令将会在 rk3576_rootfs.img
文件上创建一个 ext4 文件系统,这个文件系统可以用于存储数据或者作为一个磁盘镜像文件。
2.2.5 填充镜像文件
挂载根文件镜像、并往里面拷入修改后的文件系统,使用以下命令完成操作:
mkdir rk3576_rootfs_mount
sudo mount rk3576_rootfs.img rk3576_rootfs_mount
sudo cp -rfp rootfs/* rk3576_rootfs_mount
这里如果报错cp:写入出错;设备上没有空间
,那就是前面执行dd
命令的时候count的大小设置小了
执行完前面的命令之后需要卸载镜像
sudo umount rk3568_mount
2.2.6 精简镜像文件
经过前面的流程rk3576_rootfs.img镜像文件里就有开发板的文件系统了,但rk3576_rootfs.img文件大小不是文件系统的实际大小,还要经过处理才能使用。
检查镜像文件完整性以及精简文件大小
lhd@armsom:~/3576_rootfs_test$ sudo e2fsck -p -f rk3576_rootfs.img
linuxroot: 97295/655360 文件(0.1% 不连续),1442978/2621440 块
lhd@armsom:~/3576_rootfs_test$ sudo resize2fs -M rk3576_rootfs.img
resize2fs 1.46.5 (30-Dec-2021)
将 rk3576_rootfs.img 上的文件系统调整为 1556652 个块(每块 4k)。
rk3576_rootfs.img 上的文件系统大小已经调整为 1556652 个块(每块 4k)。
至此,得到了一个包含完整原开发板的系统镜像。
三、部署固件
得到固件之后需要测试一下以及部署固件 重新烧录根文件系统镜像到开发板进行测试
1.烧录没有部署应用的开发板固件
2.给开发板上电,让开发板进入LOADER模式,使用瑞芯微RKDevToolv3.28烧录工具,勾选rootfs 分区,点击设备分区表确定一下分区位置,最后选择固件如上图所示。
3.进系统确定之前部署的文件是否存在
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具