Files
One-KVM/libs/ventoy-img-rs
mofeng-git 206594e292 feat(video): 事务化切换与前端统一编排,增强视频输入格式支持
- 后端:切换事务+transition_id,/stream/mode 返回 switching/transition_id 与实际 codec

- 事件:新增 mode_switching/mode_ready,config/webrtc_ready/mode_changed 关联事务

- 编码/格式:扩展 NV21/NV16/NV24/RGB/BGR 输入与转换链路,RKMPP direct input 优化

- 前端:useVideoSession 统一切换,失败回退真实切回 MJPEG,菜单格式同步修复

- 清理:useVideoStream 降级为 MJPEG-only
2026-01-11 10:41:57 +08:00
..
2025-12-28 18:19:16 +08:00
2025-12-28 18:19:16 +08:00
2025-12-28 18:19:16 +08:00

ventoy-img

纯 Rust 实现的 Ventoy 可启动镜像生成工具。无需 root 权限或 loop 设备即可创建完整可用的 Ventoy IMG 文件。

特性

  • 纯 Rust 实现: 无外部依赖,单一可执行文件
  • 无需 root: 不需要 loop 设备或管理员权限
  • 内嵌资源: 所有 Ventoy 启动文件内嵌于二进制中
  • 完整 exFAT 支持: 手写 exFAT 实现,支持大于 4GB 的 ISO 文件
  • 流式读写: 支持大文件流式读写,内存占用低
  • Unicode 支持: 完整的 Unicode 文件名支持中日韩、西里尔、希腊字母、Emoji 等)
  • 动态簇大小: 根据卷大小自动选择最优簇大小4KB-128KB
  • 跨平台: 支持 Linux、macOS、Windows

快速开始

编译

cargo build --release

创建镜像

# 创建 8GB Ventoy 镜像
./target/release/ventoy-img create -s 8G -o ventoy.img

# 添加 ISO 文件
./target/release/ventoy-img add ventoy.img ubuntu.iso
./target/release/ventoy-img add ventoy.img windows.iso

# 列出文件
./target/release/ventoy-img list ventoy.img

# 写入 U 盘
sudo dd if=ventoy.img of=/dev/sdX bs=4M status=progress

命令

ventoy-img <COMMAND>

Commands:
  create  创建新的 Ventoy IMG 文件
  add     添加文件到镜像
  list    列出镜像中的文件
  remove  从镜像删除文件
  info    显示镜像信息

create

ventoy-img create [OPTIONS]

Options:
  -s, --size <SIZE>      镜像大小 (如 8G, 16G, 1024M) [默认: 8G]
  -o, --output <OUTPUT>  输出文件路径 [默认: ventoy.img]
  -L, --label <LABEL>    数据分区卷标 [默认: Ventoy]

add

ventoy-img add <IMAGE> <FILE>

list

ventoy-img list <IMAGE>

remove

ventoy-img remove <IMAGE> <NAME>

info

ventoy-img info <IMAGE>

作为库使用

use ventoy_img::{VentoyImage, Result};
use std::path::Path;

fn main() -> Result<()> {
    // 创建镜像
    let mut img = VentoyImage::create(
        Path::new("ventoy.img"),
        "8G",
        "Ventoy"
    )?;

    // 添加文件
    img.add_file(Path::new("ubuntu.iso"))?;

    // 列出文件
    for file in img.list_files()? {
        println!("{}: {} bytes", file.name, file.size);
    }

    Ok(())
}

文档

镜像结构

┌────────────────────────────────────────────────────────────┐
│ MBR (512 bytes) - 引导代码 + 分区表                        │
├────────────────────────────────────────────────────────────┤
│ GRUB core.img (Sector 1-2047) - BIOS 引导                  │
├────────────────────────────────────────────────────────────┤
│ 数据分区 (exFAT) - 存放 ISO/IMG 文件                       │
├────────────────────────────────────────────────────────────┤
│ EFI 分区 (FAT16, 32MB) - UEFI 引导                         │
└────────────────────────────────────────────────────────────┘

依赖

  • clap - 命令行解析
  • thiserror - 错误处理
  • lzma-rs - XZ 解压缩
  • chrono - 时间处理
  • crc32fast - CRC32 校验

许可证

GPL-2.0

致谢