Ventoy启动盘维护工具:ventoy_pack.sh使用详解
【免费下载链接】Ventoy 一种新的可启动USB解决方案。 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
引言:解决多系统启动盘制作的痛点
你是否还在为制作多系统启动盘频繁格式化U盘而烦恼?是否遇到过ISO文件体积过大无法直接复制的问题?Ventoy作为新一代可启动USB解决方案,通过创新的无格式化安装和多ISO并行启动技术彻底解决了这些痛点。而ventoy_pack.sh作为Ventoy项目的核心打包工具,承担着将源代码、配置文件和二进制组件编译为可分发安装包的关键角色。本文将深入剖析该工具的工作原理、使用方法和高级技巧,帮助开发者和高级用户掌握Ventoy定制化构建的全流程。
读完本文你将获得:
- 理解Ventoy安装包的内部构造与打包流程
- 掌握
ventoy_pack.sh的参数配置与执行逻辑 - 学会定制化构建包含特定驱动或语言的Ventoy版本
- 排查打包过程中的常见错误与性能优化技巧
工具概述:ventoy_pack.sh的核心功能
ventoy_pack.sh是位于Ventoy项目INSTALL目录下的Shell脚本,主要负责以下核心任务:
主要功能模块
| 模块 | 功能描述 | 关键子命令 |
|---|---|---|
| 环境初始化 | 检查依赖工具与目录结构 | dos2unix, . ./tool/ventoy_lib.sh |
| 组件编译 | 构建GRUB、LinuxGUI等核心模块 | sh build.sh, sh pack.sh |
| 镜像制作 | 创建启动盘核心镜像文件 | mkcpio.sh, mkloopex.sh |
| 系统集成 | 整合EFI引导、驱动程序 | cp $OPT ./EFI $tmpmnt/ |
| 压缩打包 | 生成Linux/Windows分发包 | tar -czvf, zip -r |
| 校验生成 | 计算SHA256校验值 | sha256sum |
支持的输出格式
该工具最终生成三种类型的分发包:
- Linux平台:
ventoy-{version}-linux.tar.gz - Windows平台:
ventoy-{version}-windows.zip - LiveCD镜像:
ventoy-{version}-livecd.iso
前置条件:环境配置与依赖检查
在执行ventoy_pack.sh之前,需要确保开发环境满足以下要求:
必要工具链
# Ubuntu/Debian系统依赖安装
sudo apt-get install -y dos2unix grub-pc-bin xz-utils zip \
build-essential gcc-multilib g++-multilib libc6-dev-i386 \
libgtk-3-dev libglib2.0-dev libssl-dev
目录结构要求
执行前需确保项目目录结构完整,关键目录包括:
Ventoy/
├── INSTALL/ # 打包脚本所在目录
├── GRUB2/ # GRUB引导程序源码
├── IMG/ # 镜像生成脚本
├── LinuxGUI/ # Linux图形界面组件
├── Plugson/ # 插件系统
└── tool/ # 辅助工具库
权限要求
- 需要root权限执行的操作:
losetup,mount,umount - 源码目录需具有读写权限:
chmod -R 755 /path/to/Ventoy
使用详解:命令参数与执行流程
基本使用方法
# 标准构建(默认模式)
cd /data/web/disk1/git_repo/GitHub_Trending/ve/Ventoy/INSTALL
./ventoy_pack.sh
# CI环境构建(静默模式)
./ventoy_pack.sh CI
参数说明
| 参数 | 作用 | 适用场景 |
|---|---|---|
| 无参数 | 交互式构建,保留中间文件 | 开发调试 |
CI | 非交互式构建,启用-dR选项 | 自动化部署 |
完整执行流程
核心代码解析:关键步骤与实现逻辑
1. 环境初始化与依赖检查
# 转换文本文件格式为Unix格式
dos2unix -q ./tool/ventoy_lib.sh
dos2unix -q ./tool/VentoyWorker.sh
# 加载工具函数库
. ./tool/ventoy_lib.sh
# 检查GRUB目录是否存在
GRUB_DIR=../GRUB2/INSTALL
if ! [ -d $GRUB_DIR ]; then
echo "$GRUB_DIR not exist"
exit 1
fi
2. 组件编译与预处理
# 构建initramfs和loop设备工具
cd ../IMG
sh mkcpio.sh
sh mkloopex.sh
cd -
# 构建Unix平台支持
cd ../Unix
sh pack_unix.sh
cd -
# 构建Linux GUI组件
cd ../LinuxGUI
sh language.sh || exit 1
sh build.sh
cd -
3. 虚拟磁盘创建与配置
# 创建256MB临时镜像文件
rm -f img.bin
dd if=/dev/zero of=img.bin bs=1M count=256 status=none
# 关联到循环设备
LOOP=$(losetup -f)
losetup -P $LOOP img.bin
# 等待设备就绪
while ! grep -q 524288 /sys/block/${LOOP#/dev/}/size 2>/dev/null; do
echo "wait $LOOP ..."
sleep 1
done
# 格式化磁盘
format_ventoy_disk_mbr 0 $LOOP fdisk
4. 系统文件复制与配置
# 挂载虚拟磁盘分区
mount ${LOOP}p2 $tmpmnt
# 复制GRUB配置(确保grub.cfg位于分区前端)
cp $OPT ./grub/grub.cfg $tmpmnt/grub/
# 处理多语言支持
cd $tmpmnt/grub/
vtlangtitle=$(grep VTLANG_LANGUAGE_NAME menu/zh_CN.json | awk -F\" '{print $4}')
echo "menuentry \"zh_CN - $vtlangtitle\" --class=menu_lang_item ..." >> menulang.cfg
...
tar czf menu.tar.gz ./menu/
rm -rf ./menu
cd ../../
5. 压缩打包与清理
# 压缩磁盘镜像
xz --check=crc32 $tmpdir/ventoy/ventoy.disk.img
# 处理工具目录
for d in i386 x86_64 aarch64 mips64el; do
cd $tmpdir/tool/$d
for file in $(ls); do
if [ "$file" != "xzcat" ]; then
xz --check=crc32 $file
fi
done
cd $CurDir
done
# 生成最终压缩包
tar -czvf ventoy-${curver}-linux.tar.gz $tmpdir
zip -r ventoy-${curver}-windows.zip $tmpdir/
# 清理循环设备
losetup -d $LOOP && rm -f img.bin
定制化构建:满足特定需求的高级配置
添加自定义驱动
要在Ventoy镜像中包含特定硬件驱动,可通过以下步骤实现:
- 将驱动文件(如
.ko内核模块)放入IMG/cpio/ventoy/drivers/目录 - 修改
IMG/mkcpio.sh添加驱动打包逻辑:
# 在mkcpio.sh中添加
echo "Adding custom drivers..."
find ./ventoy/drivers -name "*.ko" -exec cp {} $tmpdir/lib/modules/ \;
- 重新执行
ventoy_pack.sh
定制语言支持
Ventoy默认包含多语言支持,可通过以下方式调整:
# 编辑LANGUAGES/languages.json文件
{
"languages": [
{"code": "zh_CN", "name": "简体中文", "enabled": true},
{"code": "en_US", "name": "English", "enabled": true},
// 禁用不需要的语言
{"code": "fr_FR", "name": "Français", "enabled": false}
]
}
调整压缩参数
默认使用xz压缩,可通过修改以下代码调整压缩级别(1-9,级别越高压缩率越好但速度越慢):
# 找到所有xz压缩命令,修改压缩级别
xz --check=crc32 -9 $tmpdir/ventoy/ventoy.disk.img
常见问题与解决方案
错误:GRUB_DIR not exist
问题原因:未编译GRUB2组件或目录路径错误
解决方法:
# 编译GRUB2组件
cd ../GRUB2
sh buildgrub.sh
cd -
错误:losetup: cannot find an unused loop device
问题原因:系统循环设备用尽
解决方法:
# 手动释放循环设备
for loop in $(losetup | grep "img.bin" | awk '{print $1}'); do
losetup -d $loop
done
打包速度缓慢
优化方案:
- 使用多线程压缩:
xz -T0(利用所有CPU核心) - 临时关闭杀毒软件和文件监控
- 将源码目录放在SSD上(IO密集型操作)
生成的ISO无法启动
排查步骤:
- 检查
sha256.txt验证文件完整性 - 使用
qemu-system-x86_64 -cdrom ventoy-*.iso测试 - 查看
log.txt中的错误信息 - 确认BIOS/UEFI设置中关闭Secure Boot
性能优化:加速打包流程
增量构建
对于开发调试场景,可修改脚本跳过已完成步骤:
# 在脚本开头添加
SKIP_COMPILE=1 # 跳过编译步骤
SKIP_IMG=1 # 跳过镜像生成
并行处理
修改组件编译步骤,添加并行参数:
# 修改各模块build.sh中的make命令
make -j$(nproc) # 使用所有可用CPU核心
资源监控
执行打包时监控系统资源使用:
# 新开终端执行
watch -d -n 1 "ps aux | grep ventoy_pack | grep -v grep; free -h; df -h"
总结与展望
ventoy_pack.sh作为Ventoy项目的构建中枢,通过模块化设计实现了从源码到分发包的全自动化流程。其核心价值在于:
- 标准化构建:确保不同环境下生成一致的Ventoy安装包
- 跨平台支持:同时生成Linux、Windows和LiveCD三种分发格式
- 可扩展性:通过插件系统支持自定义驱动、语言和主题
随着UEFI安全启动机制的普及和新文件系统(如exFAT、NTFS)的支持需求增加,未来ventoy_pack.sh可能会引入以下改进:
掌握ventoy_pack.sh的使用不仅能帮助你深度定制Ventoy启动盘,还能理解现代可启动USB解决方案的构建原理。无论是个人使用还是企业级部署,灵活运用本文介绍的技巧都能显著提升启动盘管理效率。
附录:常用命令速查表
| 任务 | 命令 |
|---|---|
| 查看帮助 | ./ventoy_pack.sh -h |
| 清理构建产物 | rm -rf ventoy-* *.img |
| 验证安装包 | sha256sum -c sha256.txt |
| 测试ISO镜像 | qemu-system-x86_64 -m 2G -cdrom ventoy-*.iso |
| 查看版本号 | grep "VTLANG_VERSION" ./grub/grub.cfg |
【免费下载链接】Ventoy 一种新的可启动USB解决方案。 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



