Ventoy 如何创建 .vlnk 文件让本地磁盘中的大镜像免拷贝直接启动?
【免费下载链接】VentoyA new bootable USB solution.项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
镜像文件(如几十 GB 的.iso)放在本地磁盘分区里,直接拷到 Ventoy U 盘的第二个分区既慢又占空间。Ventoy 针对这个场景提供了 vlnk 机制:用VentoyVlnk.sh为本地磁盘上的镜像生成一个 32 KB 的.vlnk指针文件,把这个小文件放进 U 盘,Ventoy 启动时再按指针直接读取本地磁盘上的原始镜像,无需把镜像本体拷贝到 U 盘。
.vlnk 文件是什么
.vlnk文件固定 32768 字节(VLNK_FILE_LEN,见 Vlnk/src/vlnk.h),其内部结构ventoy_vlnk记录了三项关键信息:
- Ventoy 的 GUID 和 CRC32 校验;
- 源所在磁盘的 MBR 磁盘签名(
disk_signature)和分区的起始偏移(part_offset,单位字节); - 镜像文件在该分区内的相对路径(
filepath,最长 384 字符,VLNK_NAME_MAX)。
启动阶段由 Ventoy 定制的 GRUB 接管:当你在 Ventoy 菜单里选中一个.vlnk文件时,GRUB 通过vt_get_vlnk_dst命令解析出真实目标路径(实现见 ventoy_cmd.c,菜单逻辑见 INSTALL/grub/grub.cfg),然后直接读取本地磁盘上的原镜像。若解析不到目标,菜单会显示:
### VLNK FILE NOT FOUND ### ### VLNK 文件不存在 ###准备条件
脚本为 Linux 环境设计(Vlnk/VentoyVlnk.sh),执行前需要满足:
- 以 root 运行:脚本检查
id -u,非 root 时直接报Please use sudo or run the script as root.; - 系统装有
mountpoint、readlink、xzcat三个命令,缺失任一则脚本退出; - CPU 架构为 x86_64/amd64、i386、aarch64/arm64 或 mips64 之一,脚本按架构选择
tool/下对应的vlnk工具二进制(发布包中例如 INSTALL/tool/x86_64/vlnk); - 脚本需放在 Ventoy 目录结构内运行:它会从脚本同级目录的
tool/<架构>/vlnk加载工具(若存在vlnk.xz会先解压为vlnk); - 镜像文件位于一个已挂载的本地磁盘分区上,脚本会沿路径向上找挂载点,并在
/proc/mounts中确认文件系统。支持的文件系统为 ext2/ext3/ext4、exfat、vfat(fat32/fat16/fat12)、ntfs、xfs、udf,以及以fuseblk方式挂载的 NTFS/exFAT; - 源文件后缀必须是
.iso、.img、.wim、.vhd、.vhdx、.efi、.vtoy、.dat之一(不区分大小写),否则报This file is not supported for vlnk!; - 不支持 LVM/DM 设备(脚本明确提示
LVM/DM is not supported!)。
创建 vlnk 文件
进入放置脚本的 Ventoy 目录后执行(/data/iso/ubuntu-24.04.iso表示镜像/data/iso/所在分区已挂载):
sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso-c后跟源镜像路径。注意两点:
- 不指定
-o时,输出文件名固定为原文件名.vlnk.原后缀(如ubuntu-24.04.vlnk.iso),并且生成在当前工作目录下;若已存在同名文件,脚本会先删除再重建; - 用
-o可自定义输出名,后缀仍会自动追加:sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso -o ubuntu_link会生成ubuntu_link.vlnk.iso。
成功时输出:
Output VLNK file is ubuntu-24.04.vlnk.iso ====== Vlnk file create success =========失败时输出====== Vlnk file create failed =========并以非零状态退出。加-v可看到逐条判断过程(挂载点、设备主/次号、分区起始扇区、文件系统类型等);-h打印用法。
验证 vlnk 指向是否正确
用-l解析刚生成的文件:
sudo bash VentoyVlnk.sh -l ubuntu-24.04.vlnk.iso工具会先校验文件合法性(vlnk -t检查大小和 CRC,不符则报This is not a valid vlnk file!),然后按磁盘签名在/sys/block中找回源磁盘、按分区偏移找回源分区、再查/proc/mounts得到挂载点,最终打印(见 main_linux.c 的parse_vlnk):
Vlnk Point: /data/iso/ubuntu-24.04.iso File Exist: YESVlnk Point:是解析出的原镜像完整路径,File Exist: YES表示该路径下确实存在源文件,即指针有效。若出现以下输出,说明本地磁盘状态与创建时不一致:
Disk in vlnk not found!——按磁盘签名找不到源磁盘(磁盘被移除或签名变化);Partition in vlnk not found!——磁盘上找不到偏移匹配的分 </输出文章> </output_article>
抱歉,上一条输出被截断了,下面是完整文章:
<输出文章>
Ventoy 如何创建 .vlnk 文件让本地磁盘中的大镜像免拷贝直接启动?
镜像文件(如几十 GB 的.iso)放在本地磁盘分区里,直接拷到 Ventoy U 盘的第二个分区既慢又占空间。Ventoy 针对这个场景提供了 vlnk 机制:用VentoyVlnk.sh为本地磁盘上的镜像生成一个 32 KB 的.vlnk指针文件,把这个小文件放进 U 盘,Ventoy 启动时再按指针直接读取本地磁盘上的原始镜像,无需把镜像本体拷贝到 U 盘。
.vlnk 文件是什么
.vlnk文件固定 32768 字节(VLNK_FILE_LEN,见 Vlnk/src/vlnk.h),其内部结构ventoy_vlnk记录了三项关键信息:
- Ventoy 的 GUID 和 CRC32 校验;
- 源所在磁盘的 MBR 磁盘签名(
disk_signature)和分区的起始偏移(part_offset,单位字节); - 镜像文件在该分区内的相对路径(
filepath,最长 384 字符,VLNK_NAME_MAX)。
启动阶段由 Ventoy 定制的 GRUB 接管:当你在 Ventoy 菜单里选中一个.vlnk文件时,GRUB 通过vt_get_vlnk_dst命令解析出真实目标路径(实现见 ventoy_cmd.c,菜单逻辑见 INSTALL/grub/grub.cfg),然后直接读取本地磁盘上的原镜像。若解析不到目标,菜单会显示:
### VLNK FILE NOT FOUND ### ### VLNK 文件不存在 ###准备条件
脚本为 Linux 环境设计(Vlnk/VentoyVlnk.sh),执行前需要满足:
- 以 root 运行:脚本检查
id -u,非 root 时直接报Please use sudo or run the script as root.; - 系统装有
mountpoint、readlink、xzcat三个命令,缺失任一则脚本退出; - CPU 架构为 x86_64/amd64、i386、aarch64/arm64 或 mips64 之一,脚本按架构选择
tool/下对应的vlnk工具二进制(发布包中例如 INSTALL/tool/x86_64/vlnk); - 脚本需放在 Ventoy 目录结构内运行:它会从脚本同级目录的
tool/<架构>/vlnk加载工具(若存在vlnk.xz会先解压为vlnk再删除压缩文件); - 镜像文件位于一个已挂载的本地磁盘分区上,脚本会沿路径向上找挂载点,并在
/proc/mounts中确认文件系统。支持的文件系统为 ext2/ext3/ext4、exfat、vfat(fat32/fat16/fat12)、ntfs、xfs、udf,以及以fuseblk方式挂载的 NTFS/exFAT; - 源文件后缀必须是
.iso、.img、.wim、.vhd、.vhdx、.efi、.vtoy、.dat之一(不区分大小写),否则报This file is not supported for vlnk!; - 分区需有
/sys/class/block/<分区>/start条目;LVM/DM 设备不受支持,脚本明确提示LVM/DM is not supported!。
创建 vlnk 文件
进入放置脚本的 Ventoy 目录后执行(下例中/data/iso/是源镜像所在分区的挂载路径):
sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso-c后跟源镜像路径。注意两点:
- 不指定
-o时,输出文件名固定为原文件名.vlnk.原后缀(如ubuntu-24.04.vlnk.iso),并且生成在当前工作目录下;若已存在同名文件,脚本会先删除再重建; - 用
-o可自定义输出名,后缀仍会自动追加:sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso -o ubuntu_link会生成ubuntu_link.vlnk.iso。
成功时输出:
Output VLNK file is ubuntu-24.04.vlnk.iso ====== Vlnk file create success =========失败时输出====== Vlnk file create failed =========并以非零状态退出。加-v可看到逐条判断过程(挂载点、设备主/次号、分区起始扇区、文件系统类型等);-h打印用法。
验证 vlnk 指向是否正确
用-l解析刚生成的文件:
sudo bash VentoyVlnk.sh -l ubuntu-24.04.vlnk.iso工具先校验文件合法性(检查大小是否为 32768 字节并核对 CRC,不符则报This is not a valid vlnk file!),然后按磁盘签名在/sys/block中找回源磁盘、按分区偏移找回源分区、再查/proc/mounts得到挂载点,最终打印(逻辑见 main_linux.c 的parse_vlnk):
Vlnk Point: /data/iso/ubuntu-24.04.iso File Exist: YESVlnk Point:是解析出的原镜像完整路径,File Exist: YES表示该路径下源文件确实存在,即指针有效。若输出下列信息,说明当前磁盘状态与创建 vlnk 时不一致:
Disk in vlnk not found!——按磁盘签名找不到源磁盘(磁盘被移除或签名变化);Partition in vlnk not found!——磁盘上找不到起始偏移匹配的分 </输出文章> </output_article>
再次致歉,以下才是完整的最终文章(一次输出完毕):
<输出文章>
Ventoy 如何创建 .vlnk 文件让本地磁盘中的大镜像免拷贝直接启动?
镜像文件(如几十 GB 的.iso)放在本地磁盘分区里,直接拷到 Ventoy U 盘的第二个分区既慢又占空间。Ventoy 针对这个场景提供了 vlnk 机制:用VentoyVlnk.sh为本地磁盘上的镜像生成一个 32 KB 的.vlnk指针文件,把这个小文件放进 U 盘,Ventoy 启动时再按指针直接读取本地磁盘上的原始镜像,不需要把镜像本体拷贝到 U 盘。
.vlnk 文件是什么
.vlnk文件固定 32768 字节(VLNK_FILE_LEN,见 Vlnk/src/vlnk.h),内部结构ventoy_vlnk记录:
- Ventoy 的 GUID 和 CRC32 校验;
- 源所在磁盘的 MBR 磁盘签名(
disk_signature)和分区起始偏移(part_offset,单位字节); - 镜像文件在该分区内的相对路径(
filepath,最长 384 字符,VLNK_NAME_MAX)。
启动阶段由 Ventoy 定制的 GRUB 接管:在 Ventoy 菜单里选中一个.vlnk文件时,GRUB 通过vt_get_vlnk_dst命令解析出真实目标路径(实现见 ventoy_cmd.c,菜单逻辑见 INSTALL/grub/grub.cfg),随后直接读取本地磁盘上的原镜像。解析不到目标时,菜单会显示:
### VLNK FILE NOT FOUND ### ### VLNK 文件不存在 ###准备条件
脚本面向 Linux 环境(Vlnk/VentoyVlnk.sh),执行前需要满足:
- 以 root 运行:脚本检查
id -u,非 root 时报Please use sudo or run the script as root.并退出; - 系统装有
mountpoint、readlink、xzcat三个命令,缺失任一则脚本退出; - CPU 架构为 x86_64/amd64、i386、aarch64/arm64 或 mips64 之一,脚本按架构从
tool/<架构>/加载vlnk工具(发布包中例如 INSTALL/tool/x86_64/vlnk); - 脚本放在 Ventoy 目录内运行:若同级存在
tool/<架构>/vlnk.xz,脚本会解压为vlnk并删除.xz文件,然后给vlnk加执行权限; - 镜像位于一个已挂载的本地磁盘分区上,脚本沿路径向上找挂载点并在
/proc/mounts中确认文件系统。支持的文件系统为 ext2/ext3/ext4、exfat、vfat(fat32/fat16/fat12)、ntfs、xfs、udf,以及以fuseblk方式挂载的 NTFS/exFAT; - 源文件后缀必须是
.iso、.img、.wim、.vhd、.vhdx、.efi、.vtoy、.dat之一(不区分大小写),否则报This file is not supported for vlnk!;已经是.vlnk.*或内容本身是 vlnk 的文件会被拒绝,提示This is already a vlnk file!; - 分区需在
/sys/class/block/<分区>/start有起始扇区记录;LVM/DM 设备不支持,脚本会提示LVM/DM is not supported!。
创建 vlnk 文件
进入放置脚本的 Ventoy 目录后执行(下例中/data/iso/是源镜像所在分区的挂载路径):
sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso-c后跟源镜像路径。两点注意:
- 不指定
-o时,输出文件名固定为原文件名.vlnk.原后缀(如ubuntu-24.04.vlnk.iso),生成在当前工作目录下;若已有同名文件,脚本先删除再重建; - 用
-o自定义输出名,后缀仍会自动追加:
sudo bash VentoyVlnk.sh -c /data/iso/ubuntu-24.04.iso -o ubuntu_link # 生成 ubuntu_link.vlnk.iso成功时输出:
Output VLNK file is ubuntu-24.04.vlnk.iso ====== Vlnk file create success =========失败时输出====== Vlnk file create failed =========并以非零状态退出。加-v可看到逐条判断过程(挂载点、设备主/次号、分区起始扇区、文件系统类型等);-h打印完整用法。
验证 vlnk 指向是否正确
用-l解析刚生成的文件:
sudo bash VentoyVlnk.sh -l ubuntu-24.04.vlnk.iso工具先校验文件合法性(大小是否为 32768 字节、CRC 是否匹配,不符则报This is not a valid vlnk file!),然后按磁盘签名在/sys/block中找回源磁盘、按分区偏移找回源分区、再查/proc/mounts得到挂载点,最终打印(逻辑见 main_linux.c 的parse_vlnk):
Vlnk Point: /data/iso/ubuntu-24.04.iso File Exist: YESVlnk Point:是解析出的原镜像完整路径,File Exist: YES表示该路径下源文件存在,指针有效。出现下列输出则说明当前磁盘状态与创建 vlnk 时不一致:
Disk in vlnk not found!——按磁盘签名找不到源磁盘;Partition in vlnk not found!——磁盘上找不到起始偏移匹配的分区(分区表被改动);Mountpoint of /dev/sdXN is not found!——源分区当前未挂载(解析依赖挂载点来还原完整路径)。
启动:把 .vlnk 文件交给 Ventoy
验证通过后,把这个 32 KB 的.vlnk文件拷贝到 Ventoy U 盘的第二个分区(与镜像同名目录结构更便于在菜单中辨认)。启动目标机器时,本地磁盘必须保持在位且分区布局与创建 vlnk 时一致——vlnk 依赖磁盘签名和分区偏移定位原始镜像。进入 Ventoy 菜单选中该.vlnk文件,GRUB 即解析出目标并直接启动原镜像;若此时本地磁盘或分区不对,菜单显示前文所述的VLNK FILE NOT FOUND提示。
限制与排错速查
| 现象 | 原因 |
|---|---|
$t command not found in current system! | 缺少mountpoint/readlink/xzcat |
This file is not supported for vlnk! | 源文件后缀不在支持列表内 |
$FS is not supported! | 源分区文件系统不在支持列表内 |
${FULLDIR} not found in /proc/mounts | 镜像所在目录不在任何挂载点之下(如未挂载) |
LVM/DM is not supported! | 源分区位于 LVM/DM 设备上 |
File name length %d is too long for vlnk! | 文件路径超过 384 字符上限 |
Disk in vlnk not found!(-l时) | 目标机器上看不到签名匹配的磁盘 |
仓库中还包含 Windows 版实现(main_windows.c),其命令行模式支持-i输入文件、-o输出 vlnk 文件、-q静默模式,适用于在 Windows 本地磁盘上创建指向该磁盘镜像的 vlnk;Linux 下创建、Windows 下解析时注意两边磁盘签名与分区布局必须一致,否则会出现上表末行的现象。
【免费下载链接】VentoyA new bootable USB solution.项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考