无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: wintoflash
打印 上一主题 下一主题

[发布] grub2文件管理器(BIOS/UEFI启动 ISO/WIM/VHD...)

    [复制链接]
301#
发表于 2021-2-20 22:05:54 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 21:55
你说的不是我想要的,distro目录下有相应的脚本的(veket.sh),这个脚本是用了patch initrd的高科技方案。 ...

没有吧,我看来看去就一个方案啊。。
回复

使用道具 举报

302#
发表于 2021-2-20 22:08:27 | 只看该作者
江南一根葱 发表于 2021-2-20 22:05
没有吧,我看来看去就一个方案啊。。

应该是三个方案。直接上图。
第一个是patch initrd方案。
第二个是loopback.cfg方案。
第三个是partnew方案,也就是Easy2boot采用的方案。



GPT_test-2021-02-19-21-08-48.png (282.66 KB, 下载次数: 222)

GPT_test-2021-02-19-21-08-48.png
回复

使用道具 举报

303#
发表于 2021-2-20 22:19:20 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 22:08
应该是三个方案。直接上图。
第一个是patch initrd方案。
第二个是loopback.cfg方案。

那选第二个,按E不就知道脚本和流程了。。
回复

使用道具 举报

304#
发表于 2021-2-20 23:23:03 | 只看该作者
给力
回复

使用道具 举报

305#
发表于 2021-2-21 07:33:39 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-21 07:45 编辑
江南一根葱 发表于 2021-2-20 22:19
那选第二个,按E不就知道脚本和流程了。。

哦,loopback.cfg选项那里,按了e键,菜单是configfile (memdisk)/boot/grubfm/rules/iso/loop.sh

进去看了下:
  1. source ${prefix}/func.sh;

  2. loopback -d loop;
  3. loopback loop "${grubfm_file}";
  4. probe --set=rootuuid -u "(${grubfm_device})";
  5. export iso_path="${grubfm_path}";
  6. export rootuuid;
  7. if [ -f "${theme_std}" ];
  8. then
  9.   export theme=${theme_std};
  10. fi;
  11. set root=loop;
  12. configfile /boot/grub/loopback.cfg;
复制代码


source ${prefix}/func.sh里面好像是交换了磁盘:
function to_g4d_path {
  set g4d_path="${1}";
  lua ${prefix}/g4d_path.lua;
}

function to_g4d_menu {
  set g4d_menu="${1}";
  loopback -d rd;
  loopback -m rd ${prefix}/initrd.img.xz;
  lua ${prefix}/g4d_menu.lua;
}

function auto_swap {
  if regexp '^hd[0-9a-zA-Z,]+$' ${grubfm_disk};
  then
    regexp -s devnum '^hd([0-9]+).*$' ${grubfm_disk};
    if test "devnum" != "0";
    then
      map -s (hd0) (${grubfm_disk});
    fi;
  fi;
}

function swap_hd01 {
  if [ "$grub_platform" != "efi" ];
  then
    if [ "${bootdev}" = "hd0" ];
    then
      map -s (hd0) (hd1);
    fi;
  fi;
}

regexp --set=1:grubfm_path '(/.*)$' "${grubfm_file}";
regexp --set=1:grubfm_dir '^(.*/).*$' "${grubfm_path}";
regexp --set=1:grubfm_device '^\(([0-9a-zA-Z,]+)\)/.*' "${grubfm_file}";
regexp --set=1:grubfm_disk '([chf]d[0-9]+)[0-9,]*' "${grubfm_device}";
regexp --set=1:grubfm_name '^.*/(.*)$' "${grubfm_file}";
unset grubfm_filename;
unset grubfm_fileext;
regexp --set=1:grubfm_filename '^(.*)\.(.*)$' "${grubfm_name}";
regexp --set=1:grubfm_fileext '^.*\.(.*)$' "${grubfm_name}";

于是我把菜单改成了类似的,loopback loop $iso_path的前面加上了loopback -d loop;
menuentry "/linux/veket/veket-20.10.iso-loopback" "/linux/veket/veket-20.10.iso" {
iso_path="/linux/veket/veket-20.10.iso"
export iso_path
search --set=root --file $iso_path;probe -u ($root) -s rootuuid;echo $rootuuid;export rootuuid;
loopback -d loop;
loopback loop $iso_path
root=(loop)
configfile /boot/grub/loopback.cfg
}

结果还是不行啊。虚拟机卡死,“固件遇到意外的异常情况。虚拟机无法引导”。实体机直接死机了。卡死在这一句:configfile /boot/grub/loopback.cfg

QQ拼音截图20210220124158.png (17.41 KB, 下载次数: 227)

QQ拼音截图20210220124158.png
回复

使用道具 举报

306#
发表于 2021-2-21 10:01:29 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 07:33
哦,loopback.cfg选项那里,按了e键,菜单是configfile (memdisk)/boot/grubfm/rules/iso/loop.sh

进 ...

最好不要写成菜单,手打一句一句来。。比如configfile前先
ls /看看能不能取到文件,
再cat /boot/grub/loopback.cfg看看啥内容。。、
或者也source下func.sh,
遇到报错啥的我都是反复用到ls,set这样试出来的。
回复

使用道具 举报

307#
发表于 2021-2-21 10:23:18 | 只看该作者
江南一根葱 发表于 2021-2-21 10:01
最好不要写成菜单,手打一句一句来。。比如configfile前先
ls /看看能不能取到文件,
再cat /boot/grub ...

前面几个帖子我都说过了啊,试过了啊,前面的语句都不出错,configfile /boot/grub/loopback.cfg这一句出错了。
wintoflash的不出错,我自己手工写的菜单出错,我写的菜单,没有source下func.sh这些。
cat /boot/grub/loopback.cfg?这个loopback.cfg是原版linux.iso光盘镜像里面的,这个文件是只读的,不是这个问题,因为光盘镜像里面的同一个loopback.cfg,grubfm就可以启动,我手工写的菜单就不同。
我对于loopback.cfg的原理有点好奇,所以想尝试下。
grubfm文件管理器没问题的。
回复

使用道具 举报

308#
发表于 2021-2-21 10:29:33 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 10:23
前面几个帖子我都说过了啊,试过了啊,前面的语句都不出错,configfile /boot/grub/loopback.cfg这一句出 ...

那直接看下内容loopback.cfg的菜单内容。。
回复

使用道具 举报

309#
发表于 2021-2-21 10:30:33 | 只看该作者
江南一根葱 发表于 2021-2-21 10:29
那直接看下内容loopback.cfg的菜单内容。。

E:\linux\veket\veket-20.10\boot\grub\loopback.cfg内容:

loadfont /boot/grub/font.pf2

# https://help.ubuntu.com/community/Grub2/Displays
color_normal=cyan/black
#menu_color_highlight=black/light-gray
menu_color_highlight=yellow/red
menu_color_normal=light-gray/black

menuentry "fossapup64 9.5" {
    linux /vmlinuz pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - Copy SFS files to RAM" {
    linux /vmlinuz pfix=copy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - Don't copy SFS files to RAM" {
    linux /vmlinuz pfix=nocopy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - RAM only" {
    linux /vmlinuz pfix=ram,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - No X" {
    linux /vmlinuz pfix=nox,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - No KMS (Kernel modesetting)" {
    linux /vmlinuz nomodeset pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "fossapup64 9.5 - Ram Disk SHell" {
    linux /vmlinuz pfix=rdsh pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "Shutdown" {
        halt
}

menuentry "Reboot" {
        reboot
}


回复

使用道具 举报

310#
发表于 2021-2-21 10:33:41 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 10:30
E:\linux\veket\veket-20.10\boot\grub\loopback.cfg内容:

loadfont /boot/grub/font.pf2

或者你把这个菜单复制出来改成xxoo.cfg
再configfile /xxoo.cfg
回复

使用道具 举报

311#
发表于 2021-2-21 10:40:28 | 只看该作者
江南一根葱 发表于 2021-2-21 10:33
或者你把这个菜单复制出来改成xxoo.cfg
再configfile /xxoo.cfg

这个loopback.cfg好像不能随意改名字吧,必须是光盘镜像iso里面的,因为加载了光盘镜像iso里面的loopback.cfg之后,系统就会把iso所在的盘符作为root传递给linux的kernel,从硬盘加载这个loopback.cfg,原理上讲不通,应该没有意义。
https://www.supergrubdisk.org/wiki/Loopback.cfg
回复

使用道具 举报

312#
发表于 2021-2-21 12:22:14 | 只看该作者
https://www.supergrubdisk.org/wiki/Loopback.cfg网页上的示例

有一句
loopback --delete loop

是不是  boot时,iso文件被占用着呢,出错了
回复

使用道具 举报

313#
发表于 2021-2-21 12:28:39 | 只看该作者
2011whp 发表于 2021-2-21 12:22
https://www.supergrubdisk.org/wiki/Loopback.cfg网页上的示例

有一句

这一句,我试过了,删除或者保留,都不行;位置移动到loopback loop xxx.iso前面,或者放到最后都不行。
回复

使用道具 举报

314#
发表于 2021-2-21 13:40:23 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 10:23
前面几个帖子我都说过了啊,试过了啊,前面的语句都不出错,configfile /boot/grub/loopback.cfg这一句出 ...

wintoflash的不出错,我自己手工写的菜单出错,我写的菜单,没有source下func.sh这些。

应该是你自己的菜单有问题,把全部的菜单贴出来看看。

点评

set default=0 set fallback=1 set timeout=2 set pager=20 set grub_draw_border=1 #设定菜单字体及背景颜色 set menu_color_normal=white/black set menu_color_highlight=white/blue #loopback -m ra  详情 回复 发表于 2021-2-21 15:27
回复

使用道具 举报

315#
发表于 2021-2-21 15:27:22 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-21 15:28 编辑
xbmc 发表于 2021-2-21 13:40
应该是你自己的菜单有问题,把全部的菜单贴出来看看。

set default=0
set fallback=1
set timeout=2
set pager=20
set grub_draw_border=1

#设定菜单字体及背景颜色
set menu_color_normal=white/black
set menu_color_highlight=white/blue

#loopback -m ramdisk /boot/grub2/unicode.xz
#loadfont (ramdisk)/grub2/fonts/unicode.pf2
#set locale_dir=(ramdisk)/grub2/locale
#set lang=zh_CN
set gfxmode=auto,800x600,1024x768
terminal_output gfxterm

#loadfont /boot/grub2/fonts/unicode.pf2
#set locale_dir=/boot/grub2/locale
#set lang=zh_CN
#set gfxmode=auto,800x600,1024x768
#terminal_output gfxterm

menuentry "/linux/veket/veket-20.10.iso-loopback" "/linux/veket/veket-20.10.iso" {
iso_path="/linux/veket/veket-20.10.iso"
export iso_path
search --set=root --file $iso_path;probe -u ($root) -s rootuuid;echo $rootuuid;export rootuuid;
loopback -d loop;
loopback loop $iso_path
root=(loop)
configfile /boot/grub/loopback.cfg
}

我曾经怀疑过加载了两次字体的原因导致的异常,于是注释掉了字体那些语句,结果还是不行。grub.cfg里面加载了一次字体,loopback.cfg里面也有加载字体的语句loadfont /boot/grub/font.pf2,我注释掉了grub.cfg里面的,还是不行。



回复

使用道具 举报

316#
发表于 2021-2-21 15:33:26 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 10:40
这个loopback.cfg好像不能随意改名字吧,必须是光盘镜像iso里面的,因为加载了光盘镜像iso里面的loopback ...

所谓loopback.cfg也是一个普通的菜单,把iso里的资源拿出来执行不是很正常么
回复

使用道具 举报

317#
发表于 2021-2-21 15:36:04 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-21 15:46 编辑
江南一根葱 发表于 2021-2-21 15:33
所谓loopback.cfg也是一个普通的菜单,把iso里的资源拿出来执行不是很正常么

估计是不行的哟。这个loopback.cfg的作用,除了菜单的作用之外,应该还相当于定位光盘iso的一个标志文件,通过这个标志文件确定linux-kernel的root,标志文件放在硬盘上,这算什么?
回复

使用道具 举报

318#
发表于 2021-2-21 15:53:43 | 只看该作者
本帖最后由 江南一根葱 于 2021-2-21 15:57 编辑
liuzhaoyzz 发表于 2021-2-21 15:36
估计是不行的哟。这个loopback.cfg的作用,除了菜单的作用之外,应该还相当于定位光盘iso的一个标志文件 ...

目的不是让它出菜单么,你是菜单都出不了吧把它菜单拿出来,一行一行删,定位问题
回复

使用道具 举报

319#
发表于 2021-2-21 16:10:46 | 只看该作者
江南一根葱 发表于 2021-2-21 15:53
目的不是让它出菜单么,你是菜单都出不了吧把它菜单拿出来,一行一行删,定位问题

菜单调用顺序是硬盘里面的grub.cfg调用光盘iso里面的loopback.cfg,grub.cfg菜单可以出来,执行到最后一句configfile /boot/grub/loopback.cfg这里,死机了。
回复

使用道具 举报

320#
发表于 2021-2-21 16:19:41 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 16:10
菜单调用顺序是硬盘里面的grub.cfg调用光盘iso里面的loopback.cfg,grub.cfg菜单可以出来,执行到最后一 ...

configfile /boot/grub/loopback.cfg
这个就是显示菜单啊,,不就是loopback.cfgp0个菜单的问题么
回复

使用道具 举报

321#
发表于 2021-2-21 17:22:09 来自手机 | 只看该作者
江南一根葱 发表于 2021-2-21 16:19
configfile /boot/grub/loopback.cfg
这个就是显示菜单啊,,不就是loopback.cfgp0个菜单的问题么

应该不是iso里面的loopback.cfg的问题,因为同样的菜单,grumfm的就不出问题啊。
回复

使用道具 举报

322#
发表于 2021-2-21 17:45:16 | 只看该作者
本帖最后由 青青草 于 2021-2-21 17:49 编辑

请教W大:显示系统信息,除了加载 cpuid 模块,还需要加载哪个模块?
回复

使用道具 举报

323#
发表于 2021-2-21 18:24:58 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 17:22
应该不是iso里面的loopback.cfg的问题,因为同样的菜单,grumfm的就不出问题啊。

看到324#想到,估计可能也许大概一般来说或许约莫应该那就是你精简了某些模块
回复

使用道具 举报

324#
发表于 2021-2-21 18:36:52 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 15:36
估计是不行的哟。这个loopback.cfg的作用,除了菜单的作用之外,应该还相当于定位光盘iso的一个标志文件 ...

听江南一根葱的,把loopback.cfg放到硬盘上执行试试。
回复

使用道具 举报

325#
发表于 2021-2-21 18:58:26 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-21 19:00 编辑
xbmc 发表于 2021-2-21 18:36
听江南一根葱的,把loopback.cfg放到硬盘上执行试试。

1、刚才试过了,把loopback.cfg放到硬盘上,ls -l看了下,是(hd2,2),grub.cfg里面改成configfile (hd2,2)/boot/grub/loopback.cfg,结果一样,还是卡死。光盘里面loopback.cfg的内容很简单。311楼,似乎没有什么值得怀疑会导致卡死的情况 啊?!实在是匪夷所思!

2、刚才试过了,grub2-latest2021-02-10,直接用里面的build_grub.bat生成grubx64.efi进行测试,结果一样,还是卡死。

感觉好像是func.sh交换磁盘施加了魔法,但我也没有发现有什么黑魔法啊?

回复

使用道具 举报

326#
发表于 2021-2-21 19:01:30 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 18:58
1、刚才试过了,把loopback.cfg放到硬盘上,ls -l看了下,是(hd2,2),grub.cfg里面改成configfile (hd2,2 ...

直接把grub.cfg的内容替换为loopback.cfg,看看死不死机,就知道问题出在哪部分了。
你仔细看下,func.sh里面只是一些函数,并没有实际执行这些命令。
回复

使用道具 举报

327#
发表于 2021-2-21 19:03:55 | 只看该作者
本帖最后由 liuzhaoyzz 于 2021-2-21 19:05 编辑
xbmc 发表于 2021-2-21 19:01
直接把grub.cfg的内容替换为loopback.cfg,看看死不死机,就知道问题出在哪部分了。
你仔细看下,func.s ...

替换后正常加载菜单,没有任何问题。直接上图。
我感觉光盘iso里面的loopback.cfg是不是被wintoflash替换过,换用了grubfm自己写的菜单?

GPT_test-2021-02-21-19-03-04.png (8.59 KB, 下载次数: 205)

GPT_test-2021-02-21-19-03-04.png
回复

使用道具 举报

328#
发表于 2021-2-21 19:05:20 | 只看该作者
青青草 发表于 2021-2-21 17:45
请教W大:显示系统信息,除了加载 cpuid 模块,还需要加载哪个模块?

你想让grub具体显示什么系统信息?grub2-filemanager里面的系统信息界面可以查看 https://github.com/a1ive/grub2-f ... ot/grubfm/hwinfo.sh

里面用到的命令都在什么模块里,可以到 command.lst 里面查找。
回复

使用道具 举报

329#
发表于 2021-2-21 19:08:40 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 19:03
替换后正常加载菜单,没有任何问题。直接上图。
我感觉光盘iso里面的loopback.cfg是不是被wintoflash替 ...

逻辑坏道了吧,重启下电脑,chkdsk一下iso所在分区估计就好了。
回复

使用道具 举报

330#
发表于 2021-2-21 19:16:04 | 只看该作者
liuzhaoyzz 发表于 2021-2-21 19:03
替换后正常加载菜单,没有任何问题。直接上图。
我感觉光盘iso里面的loopback.cfg是不是被wintoflash替 ...

那说明你的grub.cfg有问题。
  1. set default=0
  2. set fallback=1
  3. set timeout=2
  4. set pager=20
复制代码

pager 能设成这个值吗?
https://www.gnu.org/software/gru ... tml_node/pager.html

  1. set grub_draw_border=1
  2. set menu_color_normal=white/black
  3. set menu_color_highlight=white/blue
  4. set gfxmode=auto,800x600,1024x768
  5. terminal_output gfxterm
  6. menuentry "/linux/veket/veket-20.10.iso-loopback" "/linux/veket/veket-20.10.iso" {
复制代码

这里第二个参数似乎没用到。
  1. iso_path="/linux/veket/veket-20.10.iso"
  2. export iso_path
复制代码

不建议这样设置变量。设置变量,要用set AAA=BBB,设置全局变量,用export AAA=BBB。
  1. search --set=root --file $iso_path
  2. probe -u ($root) -s rootuuid
  3. echo $rootuuid
  4. export rootuuid
  5. loopback -d loop
  6. loopback loop $iso_path
  7. root=(loop)
复制代码

同上,不建议这样设置变量。
错误:root 应该被设为(loop),而应该设为loop。root 变量里面存储的应该是不带括号的盘符。
https://github.com/a1ive/grub2-f ... les/iso/loop.sh#L12

  1. configfile /boot/grub/loopback.cfg
  2. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 10:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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