Ventoy 如何创建 .vlnk 文件让本地磁盘中的大镜像免拷贝直接启动?
2026/9/9 22:48:30 网站建设 项目流程

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.
  • 系统装有mountpointreadlinkxzcat三个命令,缺失任一则脚本退出;
  • 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: YES

Vlnk 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.
  • 系统装有mountpointreadlinkxzcat三个命令,缺失任一则脚本退出;
  • 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: YES

Vlnk 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.并退出;
  • 系统装有mountpointreadlinkxzcat三个命令,缺失任一则脚本退出;
  • 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: YES

Vlnk 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询