14. Rootfs 导出备份

本文档主要介绍如何将配置修改好的Rootfs根文件系统导出并二次打包完整固件。打包后的完整固件就可以用于批量部署了。

14.1 一键导出 Rootfs

  1. 获取自动化导出rootfs的脚本:xniupi_auto_output_rootfs_v10

  2. 准备一个剩余容量至少大于根文件系统占用空间2倍大小的U盘(建议使用空U盘),并将脚本xniupi_auto_output_rootfs_v10拷贝到该U盘根目录

  3. 将该U盘插入到目标设备,并进入U盘目录

# 第一步:给脚本赋予777权限
sudo chmod 777 xniupi_auto_output_rootfs_v10

# 第二笔:运行脚本
./xniupi_auto_output_rootfs_v10

等待一段时间,目标设备的根文件系统Rootfs就会被导出到U盘根目录。

警告

  1. 请确保U盘剩余空间足够,否则可能导致 rootfs 导出失败!

  2. rootfs 导出期间禁止操作目标设备,禁止中途断电,否则可能导致 rootfs 导出失败!

14.2 手动导出 Rootfs

如果一键导出Rootfs失败,您也可以尝试通过以下方式手动导出Rootfs。

步骤一:确定固件大小

首先执行df -h 查看当前系统占用的大小 注意:在打包的时候把外接的存储盘去掉。否则会将存储盘一起打进固件

如下图 的为6.1G

步骤二:打包根文件系统所有文件

通过ls查看根目录下的文件 这里除了dev 和sys可以不理会,其他全部要打进去tar包,如上的打包指令则为:

tar -zcvf rootfs.tar.gz bin  boot  etc  home  lib  lost+found  mnt  opt  proc  root  run  sbin  snap  srv  system  tmp  usr  var  vencd

打包完后会提示一个如下错误,这个属于正常现象可以忽略!

步骤三:创建空文件系统并格式化为EXT4文件系统

创建rootfs空文件

dd if=/dev/zero of=/mnt/rootfs.img bs=2K count=2M

注意:rootfs.img的大小为:7000为7000M 在上图中计算根文件系统大小为6.1G,则大于向上取整为7000,实际操作中请根据实际根文件系统大小确定。

格式化为ext4文件系统

sudo mkfs.ext4 rootfs.img

步骤四:挂载空文件系统到/rootfs目录

mkdir /rootfs
mount /mnt/rootfs.img /rootfs

步骤五:解压打包文件到/rootfs目录

解压rootfs.tar.gz到mnt

sudo tar zxvf rootfs.tar.gz -C mnt

步骤六:卸载rootfs

sudo umount mnt

步骤七:检查镜像文件并瘦身

sudo e2fsck -p -f rootfs.img
sudo resize2fs -M rootfs.img
sudo du -sh rootfs.img

步骤八:拷贝Rootfs

将rootfs.img 通过 或者u盘等手段拷出即可

14.3 二次打包完整固件

注解

注意以下操作均在x86-64架构服务器主机上完成!

14.3.1 安装必要的软件包

sudo apt-get install lib32stdc++6

14.3.2 下载二次打包工具

网盘地址:xniupi-linux-repack(提取码:xniupi)

14.3.3 解压二次打包工具

tar -xzf xniupi-linux-repack.tgz

cd xniupi-linux-repack

xniupi-linux-repack 目录结构如下;

xniupi-linux-repack
    ├── bin
    │   ├── afptool
    │   └── rkImageMaker
    ├── pack.sh # 打包脚本
    ├── Readme_en.md
    ├── Readme.md
    └── unpack.sh # 解包脚本

14.3.4 解包原固件

把官方发布的 Ubuntu 固件拷贝到 xniupi-linux-repack 根目录,重命名为 update.img,执行解包脚本 unpack.sh。解包完成后,各分区文件在 output 目录下。

mv /path/to/xxx_update.img update.img   #xxx_update.img 为待解包的原固件

./unpack.sh

14.3.5 重新打包新固件

保持当前目录结构,文件名等不变,接入移动硬盘到 PC 机,把前面导出的 Ubuntu rootfs 替换 output/Image/rootfs.img,然后执行打包脚本 pack.sh。

cp xxx_rootfs.img /path/to/xniupi-linux-repack/output/Image/rootfs.img
./pack.sh

小技巧

新的完整固件:当前目录下的new_update.img