本帖最后由 hmlyn 于 2026-5-6 20:38 编辑
vdisktool 虚拟磁盘支持库
离线管理 VMDK / VDI 虚拟磁盘文件与 EXT 分区
主要用于 VMDK / VDI 虚拟磁盘文件的离线维护。比如在一些 Android 模拟器的数据盘场景里,也经常会遇到这类需求;但支持库本身操作的是 VMDK / VDI 文件,以及里面的 EXT 分区。
核心用途
不需要启动虚拟磁盘对应的虚拟机 / 模拟器环境,也不需要进入 Android 系统,直接在 Windows 上打开 VMDK / VDI 虚拟磁盘文件,对里面的 Linux / Android EXT 分区进行查看、搜索、提取、导入、覆盖、删除、改权限等操作。
模拟器启动通常要几秒到十几秒,而我们直接走底层解析,常见 VMDK / VDI 文件打开往往只要几十毫秒到秒级,适合频繁处理虚拟磁盘文件的场景。
底层使用 C++ 编写,直接解析虚拟磁盘结构和 EXT 文件系统,不依赖外部挂载工具。目录浏览、搜索、提取、导入等操作尽量走原生实现,兼顾速度和资源占用。
编译说明
- vdisktool.fne 使用 MinGW / TDM-GCC 10.3.0 x86(C++17)编译
- vdisktool_static.lib 使用 VS2015 / MSVC 19.0 x86(C++17、/MT)编译
- 可用于易语言 VC6 静态编译
- 不喜欢用支持库的,也可以直接使用 x86 版本 DLL
平时如果只是想改一个配置、替换一个文件、清理某个目录、批量预置数据,通常要先启动相关环境再进入文件管理器,比较麻烦。这个支持库走的是离线磁盘解析和 EXT 文件系统读写路线,磁盘文件没有被占用时就能直接操作。
适合什么场景
- VMDK / VDI 虚拟磁盘文件离线维护
- 模拟器已经启动,可以使用只读模式打开虚拟磁盘文件,实时查看模拟器系统文件变化。
- 不启动对应环境,直接查看 Android 分区目录
- 几十 GB 的虚拟磁盘文件,占用内存不到 20 MB,按需解析、按需读取
- 从虚拟磁盘里提取文件到本机
- 把本机文件导入到虚拟磁盘指定路径
- 新建文件、新建目录、覆盖文件、追加内容、清空文件
- 删除文件 / 目录,重命名,移动,复制
- 修改 Linux 权限、UID、GID
- 搜索文件,支持递归、通配符、忽略大小写、完整路径匹配
- 查看文件字节、计算 MD5 / SHA1 / SHA256
- 对 VMDK 做可回收空间估算、整理压缩
- C++ 原生实现,打开 VMDK / VDI、读取目录和常规文件操作速度较快
截图
为了快速开发和上手,我顺手写了一个 C++ 的虚拟磁盘 GUI 工具,用来做可视化管理和调试。
图 1:磁盘菜单,包含可回收空间估算、整理当前 VMDK、Raw 读写等功能。
图 2:文件系统菜单,包含提取、导入、创建、查看、哈希、覆盖、追加、清空、重命名、移动、复制、删除、权限 / 属主、符号链接等功能。
主要功能
1. 离线打开虚拟磁盘
支持打开常见的 VMDK / VDI 虚拟磁盘文件。它不是挂载虚拟磁盘文件,而是直接解析 MBR 分区和 Linux EXT 文件系统。打开后可以像文件管理器一样浏览目录,查看文件大小、权限、UID、GID、修改时间等信息。
对一些 Android 虚拟磁盘场景来说,很多数据都在虚拟磁盘里的 EXT 分区中。只要对应环境已经完全关闭,就可以直接打开磁盘文件进行维护。
2. 文件增删改查
目前已经支持比较完整的文件系统操作:
- 列目录、递归搜索
- 提取文件到本机
- 导入本机文件到虚拟磁盘
- 新建普通文件、新建目录
- 覆盖文件、追加文件、清空文件
- 删除文件、删除目录、递归删除目录
- 重命名、移动、复制文件或目录
- 创建符号链接、硬链接、FIFO、Socket
- 设置权限、UID、GID,支持递归设置
也就是说,常见的 Android 文件维护工作,不一定要等对应环境启动后再做。
3. 空间回收
支持库不是简单做 raw sector 复制,而是能识别 EXT 文件系统的已用 / 空闲区域。
目前提供:
- 可回收空间估算:只扫描,不修改源文件
- 原地整理并缩小 VMDK:直接整理当前 VMDK
当前发布版暂时不包含“文件级重建到新 VMDK”功能,后续版本会根据实际使用情况继续完善。
提供哪些形式
- 32 位易语言支持库,方便接入易语言项目
- C ABI X86 X64 DLL:vdisktool.dll
- 原生 GUI:vdisktool-gui.exe
- 支持 C / C++、C#、Go、Python、易语言示例
- GUI 只是配套的可视化管理工具,方便直接查看和操作虚拟磁盘
当前支持范围
- VMDK:当前主要支持未压缩 monolithicSparse 类型
- VDI:支持普通动态 / 固定 VDI
- 分区:当前支持 MBR 分区发现
- 文件系统:支持 Linux EXT 分区的读取和部分写入
- Windows 中文路径:DLL 提供 UTF-16 路径接口
简单说
这个支持库更像是一个“Android 虚拟磁盘离线文件管理能力”。
比较大的价值是:不用启动对应环境,就能直接对磁盘里的文件做查看、导出、导入、覆盖、删除、改权限等操作。
如果你经常需要处理 VMDK / VDI 数据盘、批量预置文件、调试 Android 文件系统内容,或者想把虚拟磁盘整理变小,可以试试看。
交流群
有问题、建议或者想交流用法,可以加 QQ 群:825683153
更新说明V1.0.1:
重新优化 x86 / x64 DLL、CLI、GUI、易语言动态支持库体积
更新说明V1.0.2:
支持VDI虚拟磁盘瘦身功能。
更新说明V1.0.3:
收紧关闭磁盘命令,如果有打开EXT分区表,将会自动关闭所有已打开EXT,彻底释放磁盘占用问题
|