无忧启动论坛

标题: 使ventoy可以调用menu.lst [打印本页]

作者: linqyx    时间: 2024-7-3 06:51
标题: 使ventoy可以调用menu.lst
本帖最后由 linqyx 于 2024-10-9 18:07 编辑

今天突然发现ventoy本地启动自带grub4dos搜索并启动,以前没有发现。
按F4就能出现。
太尴尬了。



最近使用ventoy_grub.cfg添加菜单,遇到一些系统想使用menu.lst调用。写在最前面,基础好的,直接看24楼代码。http://bbs.wuyou.net/forum.php?m ... 9981&fromuid=270414,学会了使用grldr+menu.lst的组合。通过编辑grldr,发现可以自定义menu.lst的名称,位置。显然这样比grub.exe的方式更灵活一些。将grldr和menu.lst拷贝到硬盘。代码如下:menuentry "grub4dos" --class=custom {
    echo 'grub4dos'
    search -n -s -f /grldr
    ntldr /grldr
}

grldr正确的话,就能进入menu菜单。

推荐使用这种方法,更灵活。下边是使用grub.exe+menu.lst的方式,小白的我感觉最简单







上网搜资料发现这是grub4dos的功能,查了一些资料。找到以下代码(注意:把GRUB.EXE文件拷贝进入ventoy 32M分区的grub文件夹中,本贴中可以下载GRUB.EXE。)

menuentry "加载GRUB4DOS" --class=custom{
        linux ($vtoydev,gpt2)/grub/GRUB.EXE  
}

#这里改为你的grub.exe的路径,变量$vtoydev用来获取当前移动设备的名称和编号,gpt2为ventoy 32m分区,如果ventoy是mbr分区,gpt2改成msdos2.
把上面代码写入到ventoy_grub.cfg,并放入ventoy第一分区的ventoy文件夹中。


自己寻找grldr 、MESSAGE、menu.lst(一般在多功能pe的镜像中可以找到这些文件),grldr放入需要引导系统的分区根目录,本帖下载grldr编辑器、message编辑器,需要的话编辑grldr和message。把menu.lst放入对应的目录,一般和grldr放在一起,也可以修改grldr中的内容。经十三楼网友提醒,grub.exe和grldr功能一样,故把grldr去掉了。见
http://bbs.wuyou.net/forum.php?m ... 9416&fromuid=270414
启动进入ventoy,按F6,你会发现菜单中多了一个选项 加载GRUB4DOS,选择进入。
你可以使用记事本编辑menu.lst,添加系统引导。原来msgdiyer修改老是失败,不知道什么原因,更换了一个个性化启动菜单,本论坛有更新的般本。












GRUB.EXE

333.93 KB, 下载次数: 41, 下载积分: 无忧币 -2

GRLDR编辑器V4.0.exe

1.16 MB, 下载次数: 43, 下载积分: 无忧币 -2

修改grldr文件

个性化启动菜单制作(1.0.2.7).7z.001.txt

3 MB, 下载次数: 12, 下载积分: 无忧币 -2

去掉.txt后缀

个性化启动菜单制作(1.0.2.7).7z.002.txt

2.06 MB, 下载次数: 10, 下载积分: 无忧币 -2

去掉.txt后缀


作者: szwp    时间: 2024-7-3 07:10
进来一看,不是UEFI
作者: yyz2191958    时间: 2024-7-3 07:14
谢谢分享
作者: linqyx    时间: 2024-7-3 07:19
szwp 发表于 2024-7-3 07:10
进来一看,不是UEFI

不了解uefi引导,理论上grub4dos是可以引导uefi的,只是我不懂。
作者: wang1126    时间: 2024-7-3 07:49
谢谢分享
作者: linqyx    时间: 2024-7-3 07:49
yyz2191958 发表于 2024-7-3 07:14
谢谢分享

哥,专业点赞人啊。
看过的帖子大多都有大哥的身影。
作者: 19353048280    时间: 2024-7-3 08:03
谢谢分享
作者: 2010kingkang    时间: 2024-7-3 08:19

谢谢分享
作者: 13705551980    时间: 2024-7-3 08:30


谢谢分享
作者: wintoflash    时间: 2024-7-3 08:37
1. 既然你已经用grub2加载grub.exe了,那grldr是不需要的。
2. 可以直接写 ($vtoydev,2),这样就不用区分分区表了。
作者: linqyx    时间: 2024-7-3 08:47
本帖最后由 linqyx 于 2024-7-3 08:50 编辑
wintoflash 发表于 2024-7-3 08:37
1. 既然你已经用grub2加载grub.exe了,那grldr是不需要的。
2. 可以直接写 ($vtoydev,2),这样就不用区分 ...

谢谢指导,我只是比着别人的代码抄的,不懂原理。我看网上说,grldr可以搜索menu.lst,是不添加grldr的话,默认使用根目录下的menu.lst,而不搜索其他目录下的menu.lst。
作者: 1G空间100元    时间: 2024-7-3 08:52
来学习了 不错
作者: wintoflash    时间: 2024-7-3 09:34
linqyx 发表于 2024-7-3 08:47
谢谢指导,我只是比着别人的代码抄的,不懂原理。我看网上说,grldr可以搜索menu.lst,是不添加grldr的话 ...

grub.exe和grldr两个文件的作用是相同的。你改内置菜单也要改grub.exe里面的才行,因为你启动的是grub.exe而不是grldr。
作者: plutoshen    时间: 2024-7-3 10:13
linqyx 发表于 2024-7-3 07:19
不了解uefi引导,理论上grub4dos是可以引导uefi的,只是我不懂。

了解一下吧,新机器根本就没有BIOS启动了,以后UEFI才是主流。
作者: dfw9    时间: 2024-7-3 10:28
有 grldr 还要什么menu(自行车)?
作者: linqyx    时间: 2024-7-3 10:37
dfw9 发表于 2024-7-3 10:28
有 grldr 还要什么menu(自行车)?

我理解很浅,很多东西只是描葫芦画瓢,见笑了。
作者: 2267981144    时间: 2024-7-3 10:40
谢谢提供分享!
作者: 不点    时间: 2024-7-3 10:47
本帖最后由 不点 于 2024-7-3 10:55 编辑

我记得 grub.exe 作为 Linux kernel 格式而被 grub2 或 syslinux 加载时,是支持命令行的 --config-file=“...” 参数的。省略号的位置,可以直接填写菜单命令,命令之间用分号分隔。省略号的位置,也可以是一个 menu.lst 格式的文件名,路径采用 grub4dos 格式。grub4dos 的 readme 应该有详细说明。

顺便提一下,从 grub2 启动 grub4dos,还有一种方式,即,采用启动 ntldr 的方式来启动 grldr(百度应该可以找到这个知识)。不过,这种情况就不能支持 --config-file=“...” 参数了,而只能通过修改 grldr 的内置菜单来实现。

在 UEFI 体系之下,我猜,也应该有办法从 grub2 来启动 grub4dos for UEFI。完善起见,楼主应该考虑这个问题。毕竟,legacy BIOS 已经处于颓废之境了。


作者: yc2428    时间: 2024-7-3 10:47
谢谢分享
作者: linqyx    时间: 2024-7-3 10:54
不点 发表于 2024-7-3 10:47
我记得 grub.exe 作为 Linux kernel 格式而被 grub2 或 syslinux 加载时,是支持命令行的 --config-file=“ ...

谢谢指导
作者: linqyx    时间: 2024-7-3 10:56
不点 发表于 2024-7-3 10:47
我记得 grub.exe 作为 Linux kernel 格式而被 grub2 或 syslinux 加载时,是支持命令行的 --config-file=“ ...

谢谢指导。我想以前的老旧linux系统应该也不支持uefi吧,支持uefi启动的大部分镜像应该也可以被ventoy直接启动了,不需要中转grub4dos了。
作者: guong    时间: 2024-7-3 12:08

谢谢分享
作者: wn168cn@163.com    时间: 2024-7-3 12:16
谢谢分享
作者: liuzhaoyzz    时间: 2024-7-3 17:11
本帖最后由 liuzhaoyzz 于 2024-7-3 17:18 编辑

你的测试很奇怪。
1、我在qemu虚拟机中测试,ventoy1.0.99本来就可以启动CDLinux0.9.7.1.iso啊?(直接上图)
2、CDLinux0.9.7.1是过期的版本,最后的版本是CDlinux-0.9.8b7-amd64.iso
https://cloud.189.cn/web/share?code=iu6jQvNbuqQr(访问码:h6nq)
3、ventoy转grub2可以直接启动CDLinux0.9.7.1.iso。
#Ventoy 的界面上按 F6 加载执行\ventoy\ventoy_grub.cfg
menuentry "/linux/CDlinux-0.9.7.1.iso" "/linux/CDlinux-0.9.7.1.iso" {
set gfxpayload=keep
search --no-floppy --set --file $2;probe -u ($root) -s uuid;echo $uuid
loopback loop $2
linux (loop)/CDlinux/bzImage CDL_DEV=UUID=$uuid CDL_IMG=$2 CDL_DIR=/ CDL_LANG=zh_CN.UTF-8 CDL_AMOUNT=yes CDL_GUI=yes
initrd (loop)/CDlinux/initrd
}
4、ventoy转grub4dos,不建议调用grub.exe,这是DOS/linux的东西,为啥不直接用grub2的ntldr命令直接调用grldr,这样子调用的话,会全盘查找grldr,全盘查找menu.lst。
#Ventoy 的界面上按 F6 加载执行\ventoy\ventoy_grub.cfg
menuentry "grub4dos" --class=custom {
    echo 'grub4dos'
    search -n -s -f /grldr
    ntldr /grldr
}

#menu.lst启动CDlinux-0.9.7.1.iso
title /linux/CDlinux-0.9.7.1.iso
find --ignore-floppies --ignore-cd --set-root /linux/CDlinux-0.9.7.1.iso ;; uuid () ;; echo %?_UUID%
map /linux/CDlinux-0.9.7.1.iso (hd32)
map --hook
kernel (hd32)/CDlinux/bzImage CDL_DEV=UUID=%?_UUID% CDL_IMG=/linux/CDlinux-0.9.7.1.iso CDL_DIR=/ CDL_LANG=zh_CN.UTF-8 CDL_AMOUNT=yes CDL_GUI=yes
initrd (hd32)/CDlinux/initrd
5、建议用uuid模式启动CDlinux-0.9.7.1.iso,通杀各种CDlinux,不建议用CDLabel方式,uuid更加可靠。

CDLinux0.9.7.1可启动.png (156.91 KB, 下载次数: 120)

CDLinux0.9.7.1可启动.png

作者: linqyx    时间: 2024-7-3 17:56
liuzhaoyzz 发表于 2024-7-3 17:11
你的测试很奇怪。
1、我在qemu虚拟机中测试,ventoy1.0.99本来就可以启动CDLinux0.9.7.1.iso啊?(直接上 ...

谢谢指导。
1.虚拟机可以直接启动cdlinux的镜像。通过ventoy启动cdlinux0.9.7.1的镜像不成功。
2.我对grub2和grub4dos的完全属于不了解的程度,代码怎么写都是抄的网上的。结果就是启动不来。
3.虽然您给了详细的代码,奈何我的底子太烂。阅读理解都做不了
作者: linqyx    时间: 2024-7-3 18:27
liuzhaoyzz 发表于 2024-7-3 17:11
你的测试很奇怪。
1、我在qemu虚拟机中测试,ventoy1.0.99本来就可以启动CDLinux0.9.7.1.iso啊?(直接上 ...

ntldr /grldr

是不是需要下载一个ntldr文件和grldr放到一起,还是怎么弄?
实在是不懂,见笑了
作者: linqyx    时间: 2024-7-3 18:32
linqyx 发表于 2024-7-3 17:56
谢谢指导。
1.虚拟机可以直接启动cdlinux的镜像。通过ventoy启动cdlinux0.9.7.1的镜像不成功。
2.我对g ...

复制了代码,试了下,不知道怎么修改,不出意外的失败了。
只能等待学会了再用了
作者: liuzhaoyzz    时间: 2024-7-3 18:35
本帖最后由 liuzhaoyzz 于 2024-7-3 18:37 编辑
linqyx 发表于 2024-7-3 18:27
ntldr /grldr

是不是需要下载一个ntldr文件和grldr放到一起,还是怎么弄?

此ntldr,并非微软的NTLDR文件。
ntldr /grldr中的ntldr,指的是grub2内置的ntldr命令,帖子里面已经说了ntldr命令了。

grldr和menu.lst放在ventoy盘的根目录下即可。

我的帖子里面CDLinux0.9.7.1.iso放在/linux/CDlinux-0.9.7.1.iso,如果你的位置变化了,可以照葫芦画瓢。

好奇怪,24楼的帖子,怎么被人顶上去了,显得像是穿越了一样。

作者: linqyx    时间: 2024-7-3 19:01
liuzhaoyzz 发表于 2024-7-3 18:35
此ntldr,并非微软的NTLDR文件。
ntldr /grldr中的ntldr,指的是grub2内置的ntldr命令,帖子里面已经说 ...

嗯,我再试试。
谢谢您的耐心。

作者: linqyx    时间: 2024-7-4 22:02
liuzhaoyzz 发表于 2024-7-3 17:11
你的测试很奇怪。
1、我在qemu虚拟机中测试,ventoy1.0.99本来就可以启动CDLinux0.9.7.1.iso啊?(直接上 ...

今天使用这个代码,成功进入系统。感觉这个代码太巧妙了。
在网上找到了一段代码
title CDlinux098
        find --ignore-floppies --ignore-cd --set-root /iso/CDlinux098.iso
        map  /iso/CDlinux098.iso (0xff) || map --mem /iso/CDlinux098.iso (0xff)
        map --e820cycles=0
        map --hook
        chainloader (0xff)
可以进入启动界面,但是出现了
/Media/CDLINux/CDlinux:kernel version mismatch. Skipped.
/Media/CDLINux/CDlinux:kernel version mismatch. Skipped.
can`t find out where CDlinux is installed.
如图

这是什么原因啊?
能不能改动,让CDlinux成功进入系统?

2024-07-04_215955.jpg (74.66 KB, 下载次数: 20)

2024-07-04_215955.jpg

作者: liuzhaoyzz    时间: 2024-7-5 07:07
linqyx 发表于 2024-7-4 22:02
今天使用这个代码,成功进入系统。感觉这个代码太巧妙了。
在网上找到了一段代码
title CDlinux098

写出这样子代码的人,根本不了解linux的启动机理,代码就是错误的。
这样子的代码只能启动到linux的内核initrd,后续的启动流程无法继续,因为iso没有被挂载。


作者: linqyx    时间: 2024-7-5 07:11
liuzhaoyzz 发表于 2024-7-5 07:07
写出这样子代码的人,根本不了解linux的启动机理,代码就是错误的。
这样子的代码只能启动到linux的内核 ...


作者: linqyx    时间: 2024-7-5 07:36
本帖最后由 linqyx 于 2024-7-5 08:12 编辑
liuzhaoyzz 发表于 2024-7-3 17:11
你的测试很奇怪。
1、我在qemu虚拟机中测试,ventoy1.0.99本来就可以启动CDLinux0.9.7.1.iso啊?(直接上 ...

你好,打扰了,问你几个问题可以吗?不是不想自己研究,可行看了网上的许多资料,依然稀里糊涂的,只能找人求助了。在代码
menuentry "/linux/CDlinux-0.9.7.1.iso" "/linux/CDlinux-0.9.7.1.iso" {
set gfxpayload=keep
search --no-floppy --set --file $2;probe -u ($root) -s uuid;echo $uuid
loopback loop $2
linux (loop)/CDlinux/bzImage CDL_DEV=UUID=$uuid CDL_IMG=$2 CDL_DIR=/ CDL_LANG=zh_CN.UTF-8 CDL_AMOUNT=yes CDL_GUI=yes
initrd (loop)/CDlinux/initrd
}
之中,
1. loopback loop $2   这个$2是不是必须是一个文件,iso镜像这种?
2. --no-floppy --set --file $2 这个是不是和下边的$2必须是同一文件?
3.代码
search --no-floppy --set --file $2;probe -u ($root) -s uuid;echo $uuid
loopback loop $2
linux (loop)/CDlinux/bzImage CDL_DEV=UUID=$uuid CDL_IMG=$2 CDL_DIR=/ CDL_LANG=zh_CN.UTF-8 CDL_AMOUNT=yes CDL_GUI=yes
initrd (loop)/CDlinux/initrd
可不可以写成
search --no-floppy --set --file /veket8/vmlinuz;probe -u ($root) -s uuid;echo $uuid
linux /veket8/vmlinuz fullinstall root=UUID=$uuid pmedia=atahd
initrd /veket8/initrd
boot

这种形式?
不行的话可以写成类似的吗?


作者: liuzhaoyzz    时间: 2024-7-5 11:04
本帖最后由 liuzhaoyzz 于 2024-7-5 11:49 编辑
linqyx 发表于 2024-7-5 07:36
你好,打扰了,问你几个问题可以吗?不是不想自己研究,可行看了网上的许多资料,依然稀里糊涂的,只能找 ...

menuentry "/linux/CDlinux-0.9.7.1.iso" "/linux/CDlinux-0.9.7.1.iso" {
$1就是menuentry后面的第一个参数,你可以随意修改为其他任意的,比如改成CDlinux。
$2就是menuentry后面的第二个参数。这个参数是CDlinux的长文件路径,必须适配你自己那边的文件位置和文件名
你的文件名字变了,路径变了,只需要改第二个参数即可,其他的都不用变。
照葫芦画瓢啊!照葫芦画瓢啊!照葫芦画瓢啊!

另外,我给个例子,是iso不解开整体启动的菜单,并非解开的。
解开的另有菜单。



作者: linqyx    时间: 2024-7-5 14:40
liuzhaoyzz 发表于 2024-7-5 11:04
menuentry "/linux/CDlinux-0.9.7.1.iso" "/linux/CDlinux-0.9.7.1.iso" {
$1就是menuentry后面的第一个 ...

嗯,明白了。
在网上看到了很多关于grub2的说明,以及命令详解,只认得字,但是学不会,理解偏差太大。
我也知道这是小白的问题,奈何不懂就是不懂,网上资料放在眼前也看不懂,有您一说,就明白了。
谢谢您的解释。
作者: shy20070509    时间: 2024-8-20 16:46
水平太差,看不懂技术贴。
作者: jackerkang    时间: 2024-8-30 16:12
学习了,谢谢分享
作者: 逍遥逸仙    时间: 2024-8-30 16:35
火绒提示“个性化启动菜单制作”有毒
作者: linqyx    时间: 2024-8-30 16:38
逍遥逸仙 发表于 2024-8-30 16:35
火绒提示“个性化启动菜单制作”有毒

这个我倒是不知道,不放心就在虚拟机里运行试试吧
作者: 82247888ok    时间: 2024-10-9 18:05
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3