Legacy BIOS 访问范围限制

  • 背景介绍

某些主板上的BIOS,在Legacy模式下有访问范围的限制。比如,有些在Legacy BIOS模式下只能访问磁盘前面137GB的数据,超出这个范围就无法访问。 你可以网上搜索 "Legacy BIOS 137GB" 能搜到不少相关的文章。
这是BIOS的固有缺陷,任何软件都无法解决,除非你升级主板里的BIOS。另外,这个限制的值在不同机器上也是不一样的,只是 137GB 这个值比较常见,但也确实有一些机器的BIOS上, 这个值更小,比如在有一些惠普的服务器上 (DL380 Gen8),这个值是 8GB,超过 8GB 的范围就不能访问。
因此如果你的电脑主板BIOS也有这个问题,而你又把Ventoy安装在一个容量较大(比如 256GB)的U盘上时,启动就会有问题。

  • 典型现象

1. 只在Legacy BIOS模式出问题,UEFI OK
2. 同样的操作,使用小容量的U盘(比如 8GB/16GB)就OK,大容量U盘(比如256GB)就有问题
3. 出问题时不显示Ventoy启动菜单,直接进入grub命令行

  • 为什么使用其他工具没问题(比如 Rufus)

当你使用其他工具(比如 Rufus)创建可启动U盘时,U盘会被重新格式化,ISO文件内的数据一般会按照从前到后的顺序依次写入U盘。
一般很少有ISO文件会超过 8GB,因此,正常写入的数据都不会超出BIOS的访问范围(比如 137GB),因此普通使用时一般不会触发这个问题。
但是Ventoy启动相关的文件保存在第2个分区,而第2个分区位于U盘最后面,所以,Ventoy启动时一上来就要访问U盘最后面的位置,所以一上来就会出问题。

  • 规避方案1 (推荐)

Ventoy支持安装时在磁盘的后面保留一部分空间。可以利用这个功能,在安装时,保留一大部分空间,使得Ventoy的分区1和分区2不超过BIOS的访问限制范围即可。
比如,对于 256GB 的U盘,如果BIOS的最大访问范围为 137GB,在安装时保留 150GB空间,则Ventoy前2个分区就只会位于前面 106GB的范围,就不会触发BIOS的这个限制了。
关于保留空间的配置,请参考 说明

  • 规避方案2
  1. 重新手动格式化第1个分区 (NTFS/exFAT ...)
  2. 这是为了确保下面第2步中的文件保存在BIOS可访问范围之内

  3. 拷贝 ventoy.disk.img.xz 文件到第1个分区的 ventoy目录下
  4. ventoy.disk.img.xz文件位于Ventoy的安装包内(ventoy目录下)。把这个文件拷贝到第1个分区的ventoy目录下(需要手动创建此目录)。

  • 说明

规避方案2 的原理也很简单,就是如果第2个分区读不到就从第1个分区的上面这个文件中读取。
需要说明的是,这只是一个规避方案。一般情况下,U盘里的文件不多,文件都不会超出BIOS的访问范围,就不会出问题。
而一旦你在U盘中放了非常多的ISO文件,就有可能有些文件会超出BIOS的可访问范围。这些ISO文件在启动时一定会出问题,因为BIOS无法读取他们。

额外的好处
只针对Legacy模式来说,方案2 虽然是用来规避BIOS的缺陷的,不过也可以用来规避第二个分区的数据被破坏的情况。因为流程上都是访问Ventoy的相关文件失败时就转而从 上面提到的那个文件中获取。而访问失败有可能是BIOS的限制,也有可能是文件被破坏了。