|
有极少数电脑在 USB 启动时,其 LBA 支持是有毛病的,如果进行多扇区访问(一次 int13 读取扇区数大于 1),则立即死机。
对于这样的电脑,常规的 grub4dos 接管控制后必然立即死机。任何访问 U 盘的动作,都会导致死机。比如查找 menu.lst 的动作就要死机(不管是否找到)。
因此,我觉得应该仿照 multimbr 项目的处理方式,来改进目前的内置菜单。
我把改进后的内置菜单贴出来,供 chenall、yaya 等维护者们研究、参考。
- pxe detect
- geometry --lba1sector
- default 0
- timeout 1
- title find menu.lst (fast, with geometry --lba127sector)
- geometry --lba127sector
- errorcheck off
- configfile /menu.lst
- configfile /boot/grub/menu.lst
- configfile /grub/menu.lst
- if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
- if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
- find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
- errorcheck on
- commandline
- title find menu.lst (slow, failsafe, without geometry --lba127sector)
- errorcheck off
- configfile /menu.lst
- configfile /boot/grub/menu.lst
- configfile /grub/menu.lst
- if "%@root%"=="(ud)" && calc *0x82A0=*0x82b9&0xff
- if "%@root:~1,1%"=="f" && find --set-root --devices=f /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
- find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
- find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
- errorcheck on
- commandline
- title commandline
- commandline
- title reboot
- reboot
- title halt
- halt
复制代码
默认的菜单适用于绝大多数情况。但是默认的菜单在 buggy 机器上会死机。如果用户遇到死机,那么在下次启动时,有机会选择慢速的、可靠的单扇区访问菜单项,从而成功进入 grub4dos,并完成后续一系列启动任务。
上述菜单所可能带来的兼容性问题,有待研究者们深入考察和检验。
|
|