尽量运用现有的功能达到目的,避免重复开发, 我将批处理改了下,算是一个通用的外部命令了 用法: WENV set INIFILE=INI文件 [段名] GETSECT.BAT 目前只能在11-03版的grldr上运行(11-04以后的版本批处理有BUG,新版正常后批处理还可以简化,并且可以将通过参数指定一个文件名,将结果写入文件) !BAT设置变量INIFILE=INI文件名 [段名],打印该段内容 |
@zhaohj 问题1 可以这样解决 cat --locate=... | WENV set a= WENV set a=0x${a! = 0x} # 最前面加上0x,然后将空格替换为空格0x [ 本帖最后由 tuxw 于 2010-11-5 21:23 编辑 ] |
我觉得这些不是很重要的东西尽量不要使用内部的命令去实现。 你可以把你最终想要得到的结果贴出来。 注:是最终的目的,而不是使用这个命令要达到的过程,也许会有更好的解决方案。 看看tuxw或zxw能不能想办法去实现。 |
11-05 版批处理BUG 随便写一个简单的语句集合的批处理文件,运行正常 在中间任意位置加一句 WENV check 1==2 echo ok 再运行批处理将在这句后退出 应该是只要有一条语句返回0就终止了 比如插入 WENV calc 1-1 && WENV echo ok 也一样 |
我比较希望的用法是这样的 WENV read GetSect.env inifile [aaaa] |
使用fbinsttool 创建的启动盘 重新创建一个efi引导软盘,然后替换。至于怎么创建,怎么加载,在本板块有答案。 |
这个回复也太长了吧。。。 |
本帖最后由 2010guoguo 于 2024-2-20 11:54 编辑 使用fbinsttool 创建的启动盘,映射了 efi分区,在EFI分区内用G4E启动WIN10PE 时遇到如下错误,ISO未解开无法启动,而虚拟机可以正常启动,菜单是这样的:title [01]启动64位WIN10PE系统\n find --set-root /efi/imgs/win10pe_x64.iso map /efi/imgs/win10pe_x64.iso (0xff) || map --mem /efi/imgs/win10pe_x64.iso (0xff) chainloader (0xff) ISO解开后使用NTBOOT NTLOADER也可以启动wim,G4E用的最新版 1129 |
2011yaya2007777 发表于 2024-1-26 18:30 PC是老电脑了,系统加载至内存是因为在内存中运行得更快,同时不怕中病毒和木马,也不怕各种软件搞坏系统。 |
2011yaya2007777 发表于 2024-1-26 18:30 PC是老电脑了,系统加载至内存是因为在内存中运行得更快,同时不怕中病毒和木马,也不怕各种软件搞坏系统。 |
关键是不加载到内存能不能用?如果能用,干嘛要加载到内存?加载到内存难道不占用内存?悖论。 |
2011yaya2007777 发表于 2024-1-26 17:04 感谢指点,按这方法启动后,可用空间倒是也变成6.6GB,但这样就没有将系统加载至内存的功效了。 |
map --mem --top 修改为 map 试一试 |
请教楼主,同一VHD文件,用不同方法启动,为何可用空间区别很大? 第一种方法启动: title win10 HD uuid (hd0,2) chainloader /efi/grub/ntloader initrd=/efi/grub/initrd.lz1 uuid=%?_UUID% file=/win10/win10.vhd启动完成后可用空间为6.5GB 第二种方法启动 title win10 --mem(hd) map --mem --top (hd0,2)/win10/win10.vhd (hd) chainloader (hd-1) 启动完成后可用空间就变为985MB 请问如何解决这个?谢谢! |
2011yaya2007777 发表于 2024-1-12 15:27 十分感谢!这个已经可以了。 我关注这个功能是在实验在硬盘上安装多个linux系统并启动。其中内核参数需要boot=/dev/sda13这样的参数,但是不方便的,具体办法是查找uuid传递给内核boot=uuid=xxxxxxxx之类的。 具体办法:一、用find发现一个自己预先建立的标识文件,再用uuid查找该分区的uuid再传递给内核;二、预先设置卷标,用vol查找分区,再用uuid查找uuid值再传递给内核;三、预先查找linux分区的uuid,用变量传递给内核。其中办法二最方便,用磁盘工具给linux分区设置一个唯一卷标就行,这样安装几种linux也可以轻松启动了。 |
这次应当可以了。 |
175 KB, 下载次数: 13, 下载积分: 无忧币 -2
vol和uuid返回(hd44#)这样的值,其中#是类似各种制表符的怪符号。还是有问题的。官网的只要不超过10个分区不会出错。 |
本帖最后由 2011yaya2007777 于 2024-1-12 15:28 编辑 用find命令查找一个文件ISO等,再用vol和uuid查找label和uuid没问题。如:一个ISO文件在(hd0,13), 试一试这个。 |
2011xnsfgw 发表于 2023-12-11 17:49 用find命令查找一个文件ISO等,再用vol和uuid查找label和uuid没问题。如:一个ISO文件在(hd0,13), vol (hd0,13)返回label卷标,uuid (hd0,13)返回UUID值是正确的。 但如果已知(hd0,13)的卷标为yyzz,则vol yyzz返回的值则不是(hd0,13)而是(hd0,%)等值,导致%@root%值错误。同理,如果已知uuid,则UUID xxxxx-yyyy返回的值导致%@root%值错误。 |
2011xnsfgw 发表于 2023-12-11 17:29 2023-11-27官网的grldr问题依旧,你发的grldr变了,但仍有问题。 find命令正常:(hd0,0)一直到(hd0,14),共15个分区,输出正常。 vol和uuid命令:(hd0,0)一直到(hd0,9)正常,后面输出(hd0,b),(hd0,c),(hd0,d),(hd0,e),还是少一个分区,输出仍然不正确。应该和find命令一样,输出的分区表示应为(hdx,y),x和y均为数字。(hd0,b)在grub4dos中是不认的。 |
不点 发表于 2023-12-8 15:29 使用的是grub4dos.chenall.net下载的grldr,编译时间是2022-01-18. 你新编译的我试一下,有无问题我再反馈。 |
2011xnsfgw 发表于 2023-12-8 09:31 如果因为权限问题不方便上传图片,可以去github上提issue |
分区类型有:fat32,ntfs,exfat,ext4等。 所问非所答。 你不是反馈: “vol和uuid命令发生错误,可以发现(hd0,0)到(hd0,9)这些分区,而后面的分区成了如:(hd0,;),(hd0,<),(hd0,=)....." 这个问题解决否? |
本帖最后由 不点 于 2023-12-8 15:32 编辑 2011yaya2007777 发表于 2023-12-8 10:42 下载次数为 0,——咦?—— 难道说,积分少的人,没法下载?嗯?? 想到一个办法,用 email。 |
2011xnsfgw 发表于 2023-12-8 15:13 你在打什么哑谜? |
分区类型有:fat32,ntfs,exfat,ext4等。 |
请测试 |
2011yaya2007777 发表于 2023-12-8 10:42 0.4.6a (Legacy BIOS) |
本帖最后由 2011yaya2007777 于 2023-12-8 10:49 编辑 BUG反馈: legacy bios? uefi? |
175.13 KB, 下载次数: 6, 下载积分: 无忧币 -2
BUG反馈: 启动硬盘上的Linux系统,需要查找内核所在分区,以及向内核传递参数。kennel (hdx,y)/vmlinuz root=/dev/sda? #或root=LABEL=%label1% 或 root=UUID=%uuid_1% 内核参数问题: 1、root=/dev/sda?这个在分区不变时没问题,但在改变分区个数(增加或减少)时,该值会发生变化,需要重新确定。 2、root=LABEL=%label1% 这个在不改变卷标时没问题,但改变或删除卷标会发生问题。 3、 root=UUID=%uuid_1%这个是最稳定的,只要不重新格式化该分区,UUID是确定的。 比如: 1、通过在安装好的linux分区建立一个空文件(如:centos9.txt),查找该文件,确定(hdx,y),如(hd0,7),再确定该分区卷标或UUID传递给Linux内核。 2、通过查找卷标,确定(hdx,y),如(hd0,7),并将卷标传递给Linux内核。 3、通过查找UUID,确定(hdx,y),如(hd0,7),并将UUID传递给Linux内核。 4、如上,root=/dev/sda?并不好用,因为是需要预先确定,而且GNU Grub2和grub4dos以及Linux内核对分区表示方法并不一致。 现在可以通过GNU Grub2的search和probe组合可以实现上述目的,而grub4dos for legacy bios最新版用find和vol以及uuid命令时发生问题,有BUG的。 因反复对分区改变,改变大小或增加分区,分区增加到10多个,grub4dos的vol和uuid命令发生错误!图片发不上来,文字描述一下! find命令正常,可以发现(hd0,0)到(hd0,13)所有分区,--set-root是正常的。 而vol和uuid命令发生错误,可以发现(hd0,0)到(hd0,9)这些分区,而后面的分区成了如:(hd0,;),(hd0,<),(hd0,=),并丢了一个分区。也就是说这两个命令对第十一个(含)以后的分区返回的分区值是错误的。如需要截图,加QQ:1121621061,可以反馈截图。 希望修正错误! 另外,在legacy bios下的grub4dos已很好用,个人认为grub4dos for UEFI开发重点应放在和原grub4dos重要功能相同或相似功能上面,比如像a1ive grub2的map功能,以及网络功能的开发。而目前开发者对windows的VHD、wim文件的支持花费了大量精力,其实对wim的支持能够利用ipxe的wimboot即可,因为windows对自身的vhd和wim支持已相当完善,只是菜单不好看需要编辑BCD而已。也可以增加或借用ventoy的linux vhd的支持。 |
论坛级别不够,发不了新贴,如何反馈BUG? |
谢谢yaya大佬解答,那我如果是通过别的引导器引导它,是否也可以放在盘任意分区呢还是只能放在第一分区? |
我想问一下yaya大大,grub4dos启动文件必须放在U盘第一分区且分区格式必须为fat格式吗? bios模式: 1. grub.mbr启动:任意。 2. grub.pbr启动:1)在mbr激活引导分区。2)在pbr使用grub4dos引导代码。3)分区根目录有grldr. uefi模式: 1. 启动分区一般必须是fat格式,除非你主板的启动芯片支持从其他格式的分区启动,或者你自己注入驱动。 2. 在启动分区有 efi -> boot -> bootx64.efi(即G4E) |
但是我看ventoy第一个分区就是为exfat格式,它的bios启动方法是不是通过将启动文件写入分区前的1m间隙空间里来达到启动的目的,那么grub4dos是否也可以在exfat分区前弄弄一个1m间隙放grub4dos的启动文件来达到在exfat分区里也能启动grub4dos呢?另外,我看见有的pe把grub4dos放在第二个分区,分区格式为fat32,也就是说bios启动文件和uefi启动文件都放在第二个区,bios模式也能启动,不知道是怎么做到的? |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.