Ventoy启动盘维护工具:ventoy_pack.sh使用详解

Ventoy启动盘维护工具:ventoy_pack.sh使用详解

【免费下载链接】Ventoy 一种新的可启动USB解决方案。 【免费下载链接】Ventoy 项目地址: 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脚本,主要负责以下核心任务:

mermaid

主要功能模块

模块功能描述关键子命令
环境初始化检查依赖工具与目录结构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选项自动化部署

完整执行流程

mermaid

核心代码解析:关键步骤与实现逻辑

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镜像中包含特定硬件驱动,可通过以下步骤实现:

  1. 将驱动文件(如.ko内核模块)放入IMG/cpio/ventoy/drivers/目录
  2. 修改IMG/mkcpio.sh添加驱动打包逻辑:
# 在mkcpio.sh中添加
echo "Adding custom drivers..."
find ./ventoy/drivers -name "*.ko" -exec cp {} $tmpdir/lib/modules/ \;
  1. 重新执行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

打包速度缓慢

优化方案

  1. 使用多线程压缩:xz -T0(利用所有CPU核心)
  2. 临时关闭杀毒软件和文件监控
  3. 将源码目录放在SSD上(IO密集型操作)

生成的ISO无法启动

排查步骤

  1. 检查sha256.txt验证文件完整性
  2. 使用qemu-system-x86_64 -cdrom ventoy-*.iso测试
  3. 查看log.txt中的错误信息
  4. 确认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项目的构建中枢,通过模块化设计实现了从源码到分发包的全自动化流程。其核心价值在于:

  1. 标准化构建:确保不同环境下生成一致的Ventoy安装包
  2. 跨平台支持:同时生成Linux、Windows和LiveCD三种分发格式
  3. 可扩展性:通过插件系统支持自定义驱动、语言和主题

随着UEFI安全启动机制的普及和新文件系统(如exFAT、NTFS)的支持需求增加,未来ventoy_pack.sh可能会引入以下改进:

mermaid

掌握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解决方案。 【免费下载链接】Ventoy 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值