根文件系统打包时如何指定打包的目录
- FireFly 官方提供的打包工具
ff_export_rootfs不能指定打包的目录,只能指定打包后.img文件的输出目录。为了解决这个问题,我对脚本进行了修改,添加了-s参数,用于指定需要打包的源目录。 </br>- 此脚本适用于以下场景:在另一台机子上挂载根文件系统,修改后需要重新打包。
1 脚本信息
脚本名称:hw_export_rootfs
使用步骤:
- 将脚本复制到目标系统中。
-
赋予执行权限:
chmod +x hw_export_rootfs -
直接运行脚本(需指定路径):
./hw_export_rootfs -
建议将脚本放入 PATH 环境变量包含的目录中,以便无需指定路径即可使用:
-
查看当前 PATH:
echo $PATH -
将脚本移动到环境变量中的某个目录(如
/usr/local/bin):mv hw_export_rootfs /usr/local/bin
-
-
查看脚本的帮助信息:
hw_export_rootfs -h
2 使用说明
2.1 基本命令格式
hw_export_rootfs </path/to/store> [-s <source_path>] [-t <ext4|btrfs>] [-h]
2.2 参数说明
</path/to/store>:指定镜像文件的存储路径。-s <source_path>:指定需要打包的源目录(默认为/)。-t <ext4|btrfs>:指定镜像文件的文件系统类型(默认为源目录的文件系统类型)。-h:显示脚本的使用说明。
2.3 注意事项
- 必须以 root 权限运行脚本。
3 示例用法
-
指定输出路径和源目录:
sudo hw_export_rootfs /output/path -s /source/path -
仅指定输出路径(使用默认源目录
/):sudo hw_export_rootfs /output/path -
指定文件系统类型:
hw_export_rootfs /output/path -s /source/path -t ext4
4 脚本关键修改内容解析
1. 变量默认值
SOURCE_PATH="/"
DEST_PATH=""
STORE_FS_TYPE=""
SOURCE_PATH:用于保存用户通过-s参数指定的源目录路径,默认为/(即根目录)。DEST_PATH:用于保存用户未加标志的第一个参数值,表示打包后.img文件的存储路径。STORE_FS_TYPE:用于保存用户通过-t参数指定的文件系统类型(如ext4或btrfs),默认值为空,表示使用源目录的文件系统类型。
2. 参数解析逻辑
while [[ $# -gt 0 ]]; do
case $1 in
-s)
SOURCE_PATH=$2
shift 2
;;
-t)
STORE_FS_TYPE=$2
shift 2
;;
*)
DEST_PATH=$1
shift
;;
esac
done
工作原理
- 使用
while [[ $# -gt 0 ]]循环,逐个解析命令行参数,直到参数列表为空($#为 0)。 case $1 in分支结构匹配参数:-s:匹配-s参数,表示指定源目录路径:- 将
$2的值(即-s后面的参数值)赋值给SOURCE_PATH。 - 使用
shift 2跳过当前的-s和其值。
- 将
-t:匹配-t参数,表示指定文件系统类型:- 将
$2的值(即-t后面的参数值)赋值给STORE_FS_TYPE。 - 使用
shift 2跳过当前的-t和其值。
- 将
*(默认分支):表示未匹配到带标志的参数:- 将
$1的值赋值给DEST_PATH。 - 使用
shift跳过当前参数。
- 将
参数解析结果
- 未匹配的第一个参数会被视为
DEST_PATH,即.img文件的存储路径。 -s后的参数会被赋值给SOURCE_PATH。-t后的参数会被赋值给STORE_FS_TYPE。
示例解析
hw_export_rootfs /output/path/rootfs.img -s /source/path -t ext4
$1 = /output/path/rootfs.img→DEST_PATH="/output/path/rootfs.img"$1 = -s→$2 = /source/path→SOURCE_PATH="/source/path"$1 = -t→$2 = ext4→STORE_FS_TYPE="ext4"
解析结果:
DEST_PATH="/output/path/rootfs.img"SOURCE_PATH="/source/path"STORE_FS_TYPE="ext4"
3. 路径合法性检查
[[ -d $DEST_PATH ]] || { echo -e "\033[31m store path not exist \033[0m"; exit -1; }
[[ -d $SOURCE_PATH ]] || { echo -e "\033[31m source path $SOURCE_PATH does not exist or is not a directory \033[0m"; exit -1; }
功能解析
[[ -d $DEST_PATH ]]:- 检查
DEST_PATH是否是一个有效的目录路径。 - 如果目录不存在,输出错误提示信息,并使用
exit -1终止脚本。
- 检查
[[ -d $SOURCE_PATH ]]:- 检查
SOURCE_PATH是否是一个有效的目录路径。 - 如果目录不存在或不是一个目录,输出错误提示信息,并终止脚本。
- 检查
提示信息
- 使用 ANSI 转义序列
\033[31m将错误信息显示为红色,\033[0m用于重置颜色。\033[31m:红色字体。\033[0m:重置文字样式。
留下评论