无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: longpanda

国产开源U盘启动工具——Ventoy 【2024/01/24 1.0.97 版本发布】

    [复制链接]
发表于 2020-4-9 20:16:28 来自手机 | 显示全部楼层
新作品支持楼主!请问这东西只对iso有用吗?其他如img如何?iso文件名有什么限制,能用中文吗?

点评

当前只支持ISO文件,其他不支持,文件名不能有中文或空格  详情 回复 发表于 2020-4-9 20:34
回复

使用道具 举报

 楼主| 发表于 2020-4-9 20:34:29 | 显示全部楼层
my9823 发表于 2020-4-9 20:16
新作品支持楼主!请问这东西只对iso有用吗?其他如img如何?iso文件名有什么限制,能用中文吗?

当前只支持ISO文件,其他不支持,文件名不能有中文或空格
回复

使用道具 举报

发表于 2020-4-9 21:14:31 | 显示全部楼层
先谢谢回复。如果支持中文就好了!这样就分区根目录放个txt,里边是文件名 对应菜单中文,启动时根据文件名显示相应的中文菜单项。想想就行了

点评

你别说,你这个想法我是准备做成一个插件的, 就是实际ISO文件名不能有中文、空格, 但是界面现实名称可以随意, 在 插件统一的 json 配置文件里设置。  详情 回复 发表于 2020-4-9 21:16
回复

使用道具 举报

 楼主| 发表于 2020-4-9 21:16:56 | 显示全部楼层
my9823 发表于 2020-4-9 21:14
先谢谢回复。如果支持中文就好了!这样就分区根目录放个txt,里边是文件名 对应菜单中文,启动时根据文件名 ...

你别说,你这个想法我是之前就准备做成一个插件的, 就是实际ISO文件名不能有中文、空格, 但是界面显示名称可以随意, 在 插件统一的  json 配置文件里设置。
回复

使用道具 举报

发表于 2020-4-9 21:32:25 | 显示全部楼层
关注一下。期待支持菜单,WIM,IMG直接启动。
回复

使用道具 举报

发表于 2020-4-9 22:09:03 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-9 17:15
大概明白了ventoy的hook的意思,跟grub4dos的hook还是有区别的。

grub4dos的map --mem pe.iso (0xff) ...

楼主安装原版的原理跟grubfm有点类似,就是注入文件到"pe环境" 但方式不同,代码层面的原理我猜也差不多
(我不懂代码),起初我误以为楼主的工具模拟了一个windows完全能认到的cd-rom
boot.wim启动后挂载真实的iso.类似ipxe+wimboot注入挂载代码,所以楼主的方式我虚拟机启win7原版iso,也遇到同样的问题,也就是启动后没挂载上iso,grubfm我是弄了延时(等待挂载)再启动setup.exe的,win8以上估计就没这个问题。

点评

是这样的,你猜的八九不离十。 Win7挂不上估计是挂载过程执行的时候,没找到ISO文件,可能是U盘盘符还没生成。  详情 回复 发表于 2020-4-9 22:35
回复

使用道具 举报

 楼主| 发表于 2020-4-9 22:35:17 | 显示全部楼层
江南一根葱 发表于 2020-4-9 22:09
楼主安装原版的原理跟grubfm有点类似,就是注入文件到"pe环境" 但方式不同,代码层面的原理我猜也差不多
...

是这样的,你猜的八九不离十。 Win7挂不上估计是挂载过程执行的时候,没找到ISO文件,可能是U盘盘符还没生成。
回复

使用道具 举报

发表于 2020-4-10 06:59:35 来自手机 | 显示全部楼层
在隔壁论坛看到,可能是要提防iso内grub.cfg和硬盘上的grub.cfg位于相同的相对路径。
回复

使用道具 举报

发表于 2020-4-10 07:01:29 来自手机 | 显示全部楼层
我也是希望这个可以通过某种方式在硬盘上工作,既然直接启动ISO何必又拷贝到优盘?

点评

我也趋向于把iso复制到硬盘操作,启动到界面基本就可以拔u盘走人了。。 非得在u盘操作的貌似只有服务器之类  详情 回复 发表于 2020-4-10 10:22
多一个方案,多一种选择啊。这个方案就是很简单,支持BIOS/UEFI,不需要懂什么启动知识,全程傻瓜化操作。  详情 回复 发表于 2020-4-10 08:38
回复

使用道具 举报

发表于 2020-4-10 07:57:00 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-10 08:33 编辑

用最新的1.03全新分区,点的install按钮,结果老电脑按F12启动的时候看不到优盘启动项,在BIOS中,USB-HDD后面为空白,1.02版本还能够显示general flash disk。

点评

这几个版本修改的地方其实都没有涉及到和BIOS识别U盘启动项相关的地方。在你这个老电脑上一个版本一个样,还真是奇怪。  详情 回复 发表于 2020-4-10 09:04
回复

使用道具 举报

发表于 2020-4-10 08:38:55 | 显示全部楼层
窄口牛 发表于 2020-4-10 07:01
我也是希望这个可以通过某种方式在硬盘上工作,既然直接启动ISO何必又拷贝到优盘?

多一个方案,多一种选择啊。这个方案就是很简单,支持BIOS/UEFI,不需要懂什么启动知识,全程傻瓜化操作。
回复

使用道具 举报

发表于 2020-4-10 08:48:46 | 显示全部楼层
iso文件名不能有中文或空格,
这个在网站下载页面要说明一下,难怪昨天我试了几个镜像都不显示

点评

这个在使用说明以及FAQ页面都有说明,可能是英文的,大家都没怎么细看。  详情 回复 发表于 2020-4-10 09:48
回复

使用道具 举报

 楼主| 发表于 2020-4-10 09:01:35 | 显示全部楼层
星星一般般8 发表于 2020-4-9 19:28
我从网站 i tell you 下载的cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso和cn_windows_7_professi ...

感谢测试!
这两个镜像我会下载来测试一下。 另外,你的环境是虚拟机还是实体机? UEFI还是Legacy?
闪迪盘的那个, 你之前删除文件之后,是直接拔的吗? 有试试按照谨慎点的,安全移除U盘之类的操作之后,看看还会出这种情况吗?
回复

使用道具 举报

 楼主| 发表于 2020-4-10 09:04:48 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-10 07:57
用最新的1.03全新分区,点的install按钮,结果老电脑按F12启动的时候看不到优盘启动项,在BIOS中,USB-HDD ...

这几个版本修改的地方其实都没有涉及到和BIOS识别U盘启动项相关的地方。在你这个老电脑上一个版本一个样,还真是奇怪。

点评

我猜测可能是我过程中,用diskgenius重新分区成为了MBR-FAT32单分区格式,然后再用ventoy分区,bios里面就能够看到优盘了,我不确定是不是这个原因。 问题是diskgenius分区之后,我又用ventoy进行分区了的啊,搞不  详情 回复 发表于 2020-4-10 09:12
回复

使用道具 举报

发表于 2020-4-10 09:12:50 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-10 09:18 编辑
longpanda 发表于 2020-4-10 09:04
这几个版本修改的地方其实都没有涉及到和BIOS识别U盘启动项相关的地方。在你这个老电脑上一个版本一个样 ...

我猜测可能是我过程中,用diskgenius重新分区成为了MBR-FAT32单分区格式,然后再用ventoy分区,bios里面就能够看到优盘了,我不确定是不是这个原因。
问题是diskgenius分区之后,我又用ventoy进行分区了的啊,搞不清楚原因。

总之,我感觉还是FAT32单分区更稳定,识别率更高,可能是这个原因。

另外关于分区格式,我看了下微软原版光盘,只有udf一种格式。
QQ截图20200410090211.jpg

我的pe也是这种格式啊。
QQ截图20200409094209.jpg

与文件格式区别不大吧?

点评

这个是的,我昨天就说了。问题不在格式,在于hook。最开始说格式的事情也只是猜测。  发表于 2020-4-10 09:22
回复

使用道具 举报

 楼主| 发表于 2020-4-10 09:48:55 | 显示全部楼层
hunanlonghao 发表于 2020-4-10 08:48
iso文件名不能有中文或空格,
这个在网站下载页面要说明一下,难怪昨天我试了几个镜像都不显示

这个在使用说明以及FAQ页面都有说明,可能是英文的,大家都没怎么细看。
回复

使用道具 举报

发表于 2020-4-10 10:22:03 | 显示全部楼层
窄口牛 发表于 2020-4-10 07:01
我也是希望这个可以通过某种方式在硬盘上工作,既然直接启动ISO何必又拷贝到优盘?

我也趋向于把iso复制到硬盘操作,启动到界面基本就可以拔u盘走人了。。
非得在u盘操作的貌似只有服务器之类

点评

看楼主是意思是把原版windows.iso或者linux.iso复制到优盘启动安装系统,优盘由于介质和读写速度、可靠性、稳定性等方面的原因,远不如拷贝到硬盘安装更加可靠,从这个角度来说,4GB单文件的需求不大,大不了再搞个  详情 回复 发表于 2020-4-10 10:53
这也是一种应用场景。可以考虑,而且Ventoy实现起来并不难。 当前Ventoy在界面上列出来的ISO文件只是从Ventoy所在的U盘里搜索, 这个搜索范围扩大一下就可以。 当然当前Ventoy版本还只支持exFAT分区,使用限制较大  详情 回复 发表于 2020-4-10 10:33
回复

使用道具 举报

 楼主| 发表于 2020-4-10 10:33:16 | 显示全部楼层
江南一根葱 发表于 2020-4-10 10:22
我也趋向于把iso复制到硬盘操作,启动到界面基本就可以拔u盘走人了。。
非得在u盘操作的貌似只有服务器 ...

这也是一种应用场景。可以考虑,而且Ventoy实现起来并不难。 当前Ventoy在界面上列出来的ISO文件只是从Ventoy所在的U盘里搜索, 这个搜索范围扩大一下就可以。
当然当前Ventoy版本还只支持exFAT分区,使用限制较大,后面版本支持NTFS之后可能会好一些。

点评

在 grub2 里面 patch ISO 应该只需要知道 blocklist 就行吧,不需要和文件系统挂钩吧  详情 回复 发表于 2020-4-10 10:43
回复

使用道具 举报

发表于 2020-4-10 10:43:11 | 显示全部楼层
longpanda 发表于 2020-4-10 10:33
这也是一种应用场景。可以考虑,而且Ventoy实现起来并不难。 当前Ventoy在界面上列出来的ISO文件只是从Ve ...

在 grub2 里面 patch ISO 应该只需要知道 blocklist 就行吧,不需要和文件系统挂钩吧

点评

是的,但是grub原始的blocklist是模拟读文件的方式取出来的,太慢。我需要改造,直接在文件系统那个模块取出blocklist, 这个当前只改造完exFAT的。  详情 回复 发表于 2020-4-10 10:50
回复

使用道具 举报

 楼主| 发表于 2020-4-10 10:50:16 | 显示全部楼层
wintoflash 发表于 2020-4-10 10:43
在 grub2 里面 patch ISO 应该只需要知道 blocklist 就行吧,不需要和文件系统挂钩吧

是的,但是grub原始的blocklist是模拟读文件的方式取出来的,太慢,即使是不去真的读,也慢。我需要改造,直接在文件系统那个模块取出blocklist, 这个当前只改造完exFAT的。

点评

这个工作我前段时间已经做过了。 https://github.com/a1ive/grub/issues/33 相关commit https://github.com/a1ive/grub/commit/c3a7633dc46575e1b4bd4b24c66de297a5202c6d https://github.com/a1ive/grub/commit  详情 回复 发表于 2020-4-10 10:55
回复

使用道具 举报

发表于 2020-4-10 10:53:13 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-10 11:03 编辑
江南一根葱 发表于 2020-4-10 10:22
我也趋向于把iso复制到硬盘操作,启动到界面基本就可以拔u盘走人了。。
非得在u盘操作的貌似只有服务器 ...

看楼主是意思是把原版windows.iso或者linux.iso复制到优盘启动安装系统,优盘由于介质和读写速度、可靠性、稳定性等方面的原因,远不如拷贝到硬盘安装更加可靠,从这个角度来说,4GB单文件的需求不大,大不了再搞个移动硬盘。系统安装,我都是用的esd格式,最大不超过2GB,原版ISO我很少用。

pe.iso一般都是4GB以内的吧,航母级别的PE一般都是解开部署启动的。

就我个人来说,我都是把pe.iso部署到本地硬盘的非系统盘启动的,部署之后这台电脑永远可以抛弃USB启动,可以达到格式化系统盘仍然能够启动PE的效果。我极少从优盘启动PE,因为没有必要。

吸引我的是楼主的开源原创的工具,思路等。所以我尝试做些测试。

点评

Ventoy是一个磁盘启动方案。并不仅限于U盘。只是平时可能大多数人用U盘比较多。比如Linux环境中的安装脚本,使用的时候是 Ventoy2Disk.sh -i /dev/sdx 后面这个sdx是自己输入的,Ventoy并不做限制。可以是U盘,也  详情 回复 发表于 2020-4-10 10:57
回复

使用道具 举报

发表于 2020-4-10 10:55:00 | 显示全部楼层

点评

多谢,我参考一下。 我没仔细看,好像您是改造了下原来的blocklist流程, 还是通过disk每一个sector的读触发回调来累加起来,最终得到整个的blocklist. Ventoy是直接下到fs里面找到元数据进而找到blocklist. 比如  详情 回复 发表于 2020-4-10 11:10
两个巨人的握手!  发表于 2020-4-10 10:57
回复

使用道具 举报

 楼主| 发表于 2020-4-10 10:57:40 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-10 10:53
看楼主是意思是把原版windows.iso或者linux.iso复制到优盘启动安装系统,优盘由于介质和读写速度、可靠性 ...

Ventoy是一个磁盘启动方案。并不仅限于U盘。只是平时可能大多数人用U盘比较多。比如Linux环境中的安装脚本,使用的时候是  Ventoy2Disk.sh -i /dev/sdx   后面这个sdx是自己输入的,Ventoy并不做限制。可以是U盘,也可以是本地硬盘,移动硬盘等。
Ventoy的目的是把这个磁盘变成一个Legacy+UEFI下可启动的磁盘,而且可以直接启动这个磁盘中的ISO文件。

点评

目前ventoy是需要重新分区的吧,分区就会破坏原有的数据,一般地来说,本地硬盘有数据的,怎么应用到本地硬盘?可以无损地做到吗? 就是只写引导(bios下),拷贝文件(UEFI下)什么的,不要重新分区。  详情 回复 发表于 2020-4-10 11:03
回复

使用道具 举报

发表于 2020-4-10 11:03:19 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-10 11:07 编辑
longpanda 发表于 2020-4-10 10:57
Ventoy是一个磁盘启动方案。并不仅限于U盘。只是平时可能大多数人用U盘比较多。比如Linux环境中的安装脚 ...

目前ventoy是需要重新分区的吧,分区就会破坏原有的数据,一般地来说,本地硬盘有数据的,怎么应用到本地硬盘?可以无损地做到吗?
就是只写引导(bios下),拷贝文件(UEFI下)什么的,不要重新分区。

当然,这可能是下一步的展望和plan,我只是基于楼主既有的程序和思路做些测试。

点评

首次分区是会破坏数据。因为Ventoy只分区一次,之后可以永久使用嘛。所以,后面使用就没关系了。当然只是这么一说。  详情 回复 发表于 2020-4-10 11:08
回复

使用道具 举报

 楼主| 发表于 2020-4-10 11:08:04 | 显示全部楼层
liuzhaoyzz 发表于 2020-4-10 11:03
目前ventoy是需要重新分区的吧,分区就会破坏原有的数据,一般地来说,本地硬盘有数据的,怎么应用到本地 ...

首次分区是会破坏数据。因为Ventoy只分区一次,之后可以永久使用嘛。所以,后面使用就没关系了。当然只是这么一说。

点评

理解。我只是随口说说,请楼主不要介意。作为一个一般用户,我们只能就现有的方案、思路做讨论,支持和点赞。目前楼主的版本只是1.x,希望楼主的程序兼容性越来越好!希望您的代码给开源启动领域带来贡献!  详情 回复 发表于 2020-4-10 11:14
回复

使用道具 举报

 楼主| 发表于 2020-4-10 11:10:47 | 显示全部楼层
本帖最后由 longpanda 于 2020-4-10 11:15 编辑
wintoflash 发表于 2020-4-10 10:55
这个工作我前段时间已经做过了。
https://github.com/a1ive/grub/issues/33
相关commit

多谢,我参考一下。
我没仔细看,好像您是改造了下原来的blocklist流程, 还是通过disk每一个sector的读触发回调来累加起来(当然不是真读),最终得到整个的blocklist.
Ventoy是直接下到fs里面找到元数据进而找到blocklist. 比如一般情况下,刚分区完的盘,开始的几个文件是连续的。这种情况下,不需要每个sector累加起来,直接找到起始位置就可以了。即使是不连续的,也是可以按照文件系统的簇大小来遍历,不需要细化到disk的sector遍历。
比如对于8GB+ 甚至10GB+的超大ISO文件,光遍历一遍sector也会花不少时间。

点评

是的,但是速度已经可以了,4GB的 ISO 在一秒内就可以完成。而且对绝大多数fs都只需要一点小改动就行了。 这种方式需要对每种fs都要改造(特别是 ntfs),太麻烦了吧。  详情 回复 发表于 2020-4-10 11:15
回复

使用道具 举报

发表于 2020-4-10 11:14:27 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-4-10 11:19 编辑
longpanda 发表于 2020-4-10 11:08
首次分区是会破坏数据。因为Ventoy只分区一次,之后可以永久使用嘛。所以,后面使用就没关系了。当然只是 ...

理解。我只是随口说说,请楼主不要介意。作为一个一般用户,我们只能就现有的方案、思路做讨论,支持和点赞(我已把某个网友的不良言论删除了,作为对楼主的些许支持)。目前楼主的版本只是1.x,希望楼主的程序兼容性越来越好!希望您的代码给开源启动领域带来贡献!

点评

多谢支持和鼓励!!  详情 回复 发表于 2020-4-10 11:21
回复

使用道具 举报

发表于 2020-4-10 11:15:07 | 显示全部楼层
本帖最后由 wintoflash 于 2020-4-10 11:20 编辑
longpanda 发表于 2020-4-10 11:10
多谢,我参考一下。
我没仔细看,好像您是改造了下原来的blocklist流程, 还是通过disk每一个sector的读 ...
还是通过disk每一个sector的读触发回调来累加起来,最终得到整个的blocklist.

是的,但是速度已经可以了,4GB的 ISO 在一秒内就可以完成。而且对绝大多数fs都只需要一点小改动就行了。grub4dos 的 blocklist 也是通过这种方式。
是直接下到fs里面找到元数据进而找到blocklist

这种方式需要对每种fs都要改造(特别是 ntfs),太麻烦了吧。

点评

Linux里面有很多Everything的ISO镜像都非常大,基本上都是8GB+起步。而且不同主板、不同U盘的读取速度也不一样,实际时间会比这个长。4GB的文件我基本上也没测出过1s的速度。 Ventoy目的不同嘛,不需要适配每一种FS  详情 回复 发表于 2020-4-10 11:20
回复

使用道具 举报

发表于 2020-4-10 11:16:18 | 显示全部楼层

佩服技术人员,支持。期待更完美。
回复

使用道具 举报

 楼主| 发表于 2020-4-10 11:20:45 | 显示全部楼层
本帖最后由 longpanda 于 2020-4-10 11:43 编辑
wintoflash 发表于 2020-4-10 11:15
是的,但是速度已经可以了,4GB的 ISO 在一秒内就可以完成。而且对绝大多数fs都只需要一点小改动就行了 ...

Linux里面有很多Everything的ISO镜像都非常大,基本上都是8GB+起步。而且不同主板、不同U盘的读取速度也不一样,实际时间会比这个长。4GB的文件我基本上也没测出过1s的速度(之前我也是类似的修改法,就是真读改成假读)。
Ventoy目的不同嘛,不需要适配每一种FS,而且是借助FS里面的原有流程,不需要改造FS,也不是特别麻烦。比如我读这个ISO文件1个字节就触发了FS的解析,在FS的解析流程里我记录下当前文件的位置、大小等相关信息。因为只有我刚才读了一下那个ISO文件,所以这个记录信息就一定是这个ISO文件的。类似这种“投机取巧”的办法吧,但效果很好。
毕竟Ventoy里面的grub不是给别人用的,是特定服务于Ventoy的,我可以随便改, 不像您的那个工程。要是用假读的方法修改更简单,Ventoy就不会像您那样这么正式的去改了,我直接一个全局变量控制disk模块不去真读就可以了。

点评

一个10年前的旧U盘,算上敲命令的时间,也才两秒钟。ISO 7G [attachimg]415948[/attachimg] 读取时间超过1秒就说明代码没改好,实际上有的地方是真读的。 grub4dos 久经考验,它采取的方法一般都是可靠的。  详情 回复 发表于 2020-4-10 12:03
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 04:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表