无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: wintoflash
打印 上一主题 下一主题

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

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

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

使用道具 举报

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

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

点评

你想让grub具体显示什么系统信息?grub2-filemanager里面的系统信息界面可以查看 https://github.com/a1ive/grub2-filemanager/blob/master/boot/grubfm/hwinfo.sh 里面用到的命令都在什么模块里,可以到 command  详情 回复 发表于 2021-2-21 19:05
回复

使用道具 举报

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

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

使用道具 举报

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个菜单的问题么
回复

使用道具 举报

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

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

使用道具 举报

318#
发表于 2021-2-21 15:53:43 | 只看该作者
本帖最后由 江南一根葱 于 2021-2-21 15:57 编辑
liuzhaoyzz 发表于 2021-2-21 15:36
估计是不行的哟。这个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,标志文件放在硬盘上,这算什么?
回复

使用道具 举报

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

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

使用道具 举报

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里面的,还是不行。



回复

使用道具 举报

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

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

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

使用道具 举报

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

有一句

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

使用道具 举报

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

有一句
loopback --delete loop

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

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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
}


回复

使用道具 举报

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

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

使用道具 举报

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文件管理器没问题的。
回复

使用道具 举报

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这样试出来的。
回复

使用道具 举报

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, 下载次数: 145)

QQ拼音截图20210220124158.png
回复

使用道具 举报

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

使用道具 举报

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

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

使用道具 举报

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, 下载次数: 143)

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

使用道具 举报

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

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

使用道具 举报

300#
发表于 2021-2-20 21:55:16 | 只看该作者
江南一根葱 发表于 2021-2-20 21:50
我说"参考grubfm"的思路也没错啊
distro目录下有相应的脚本的(veket.sh)
是用了魔改grub2高科技命令mki ...

你说的不是我想要的,distro目录下有相应的脚本的(veket.sh),这个脚本是用了patch initrd的高科技方案。不是我说的loopback.cfg的方案啊,难道loopback.cfg方案中,也用了patch initrd了吗?好像这是两个独立的方案啊。
回复

使用道具 举报

299#
发表于 2021-2-20 21:50:29 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 21:32
你说的思路很对,但我想要知道细节,veket和puppy据我所知,原生不支持loopback.cfg的。不知道w大用了什 ...

我说"参考grubfm"的思路也没错啊
distro目录下有相应的脚本的(veket.sh)
是用了魔改grub2高科技命令mkinitrd,强改了initrd里init脚本,让它知道来世的路,正确地挂载正确的文件系统,ventoy也是类似的原理,实现方式不一样
这个貌似确实还没在论坛上讨论过,,,我玩倒是玩过会的,老眼昏花,累啊。
回复

使用道具 举报

298#
发表于 2021-2-20 21:32:22 | 只看该作者
江南一根葱 发表于 2021-2-20 19:01
linux的iso貌似都是靠给内核传递相关参数来启live的吧,,在正确的时间正确地传递正确的参数给内核,让内 ...

你说的思路很对,但我想要知道细节,veket和puppy据我所知,原生不支持loopback.cfg的。不知道w大用了什么魔法实现loopback.cfg启动的。
回复

使用道具 举报

297#
发表于 2021-2-20 19:01:10 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 16:51
我看了下脚本,没发现什么根本性的区别啊。好像获取了rootuuid,我试了也不行。

linux的iso貌似都是靠给内核传递相关参数来启live的吧,,在正确的时间正确地传递正确的参数给内核,让内核来根据uuid或其它路径查找正确的设备或路径加载正确的initrd挂载正确的文件系统。。就行了吧

启不来应该就是某步出错了,或者需要修改initrd脚本,让它强制加载你想要挂载的文件系统
grubfm启linux貌似干的就是这些事,即使是启win的iso也是干的这个事。
回复

使用道具 举报

296#
发表于 2021-2-20 16:51:28 | 只看该作者
江南一根葱 发表于 2021-2-20 16:11
直接参考grubfm里面的脚本不就行了

我看了下脚本,没发现什么根本性的区别啊。好像获取了rootuuid,我试了也不行。
回复

使用道具 举报

295#
发表于 2021-2-20 16:11:09 | 只看该作者
liuzhaoyzz 发表于 2021-2-20 15:48
大神,我试了loopback.cfg方案,用于启动veket和puppy,都失败了,我的菜单如下,虚拟机卡死,“固件遇到 ...

直接参考grubfm里面的脚本不就行了
回复

使用道具 举报

294#
发表于 2021-2-20 15:48:50 | 只看该作者
wintoflash 发表于 2021-1-22 11:17
什么叫"菜单界面"?
菜单项是不会随变量改变而更新的,只有主题才会。

大神,我试了loopback.cfg方案,用于启动veket和puppy,都失败了,我的菜单如下,虚拟机卡死,“固件遇到意外的异常情况。虚拟机无法引导”。实体机直接死机了。我用命令行进去看了,都是卡死在这一句:“configfile /boot/grub/loopback.cfg”。

可是你的grubfm,选择loopback.cfg方案之后,veket和puppy,是怎么做到的?

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
loopback loop $iso_path
root=(loop)
configfile /boot/grub/loopback.cfg
loopback --delete loop
}

menuentry "/linux/puppy/fossapup64-9.5.iso-loopback" "/linux/puppy/fossapup64-9.5.iso" {
set iso_path="/linux/puppy/fossapup64-9.5.iso"
export iso_path
search --no-floppy --set --file $2
loopback loop $2
set root=loop
configfile /boot/grub/loopback.cfg
loopback --delete loop
}

回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 07:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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