占楼 |
学习 |
chen463 发表于 2025-9-21 08:05 已下载,谢谢! |
qj_tzy 发表于 2025-9-20 19:01 那只是引导启动文件,从魔改版或官方版去提取 |
chen463 发表于 2025-9-19 16:58 我安装的ventoy 1.107版中,无vtldr及core.img 请问:在哪可下载? |
chen463 发表于 2025-9-19 16:58 我再次如上操作,成功引导了uos的grub2菜单,非常感谢您的悉心指导! |
chen463 发表于 2025-9-19 16:58 我按上法测试UOS的grub2菜单,仍出现无此分区的提示,不知为何? |
chen463 发表于 2025-9-19 16:58 感谢指点,我试试再反馈 |
qj_tzy 发表于 2025-9-17 12:32 title Ventoy kernel- /vtldr- /grub/i386-pc/core.img find --set-root /vtldr kernel /grub/i386-pc/core.img boot title GRUB2-kernel- /g2gdr.mbr- /grub find --set-root /g2gdr.mbr kernel /g2gdr.mbr boot |
chen463 发表于 2024-9-25 11:17 我的一台只支持legacy引导的电脑,先后安装了win7+统信uos2.0系统, 用DiskGenius查看主引导硬盘第1分区前的起始扇区数为4096,备份MBR为uos_mbr_4096.bin,执行下句想引导UOS自带的grub2菜单,但重启 kernel uos_mbr_4096.bin 或chainloader uos_mbr_4096.bin 再进入uos系统,在\usr\lib\grub\i386-pc\提取了boot.img,在\boot\grub\i386-pc\目录下提取了core.img, 在win下执行copy /b boot.img+core.img g2ldr.mbr 执行如下菜单,提示无此分区 kernel gr2ldr.mbr 再执行如下两句,也提示无此分区 find --set-root --devices=h /boot/vmlinuz-5.10.0-amd64-desktop kernel gr2ldr.mbr 不知如何处理? |
赞同,深有体会! |
补充: 使用W大GRUB2提取boot.img+core.img=g2ldr.mbr 经测试 扇区数是 86 kernel /g2ldr.mbr 成功 chainloader /g2ldr.mbr 失败 |
2024-09-25_1.png (9.79 KB, 下载次数: 192)
本帖最后由 chen463 于 2024-8-28 17:17 编辑 1.现在论坛多年前所制作的boot.img+core.img=g2ldr其实路径是efi\grub\ grub.cfg。 2.Grub2-BIOS启动模式现今几乎很少使用,Vontoy-BIOS启动模式,路径是grub\ grub.cfg,如果还有使用Grub2-BIOS旧操作习惯,将会被覆盖有重迭现象。 3.基于以上两种启动模式,推断是否两种模式混乱使用而造成失败。 4.如果确认使用启动模式正确,路径是否正确。 5. Deepin虽然未接触,猜测引导Grub2方式,应该是EFI启动,显然是无法通过而失败。 6.建议可以使用BOOTICE来制作Grub2主引导后再备份[63扇区]更名为*MBR来引导它,如果您建立了主引导可以成功引导Deepin,那么备份MBR来引导使用应该是没问题的。 7.我现在就有在Grub4DOS菜单去引导g2ldr是成功的。如果把它改成BIOS指令可试一试-kernel /g2ldr可引导成功。 |
2024-08-28_3.png (9.73 KB, 下载次数: 405)
2024-08-28_2.png (8.25 KB, 下载次数: 360)
2024-08-28_1.png (16.96 KB, 下载次数: 235)
fanet 发表于 2024-8-22 21:57 顶楼就已经说过你这个方法了啊? ![]() |
本帖最后由 fanet 于 2024-8-22 22:00 编辑 把mbr考贝出来是一个方法,需要知道core.img嵌入的位置和长度。更通常的做法是自定义一个core.img,最好内嵌搜索菜单,然后boot.img+core.img生成一个grub2的启动文件grldr,就可以用多种启动器加载了。 |
都是高手啊! |
hilsonma 发表于 2024-8-22 06:39 受教了,你这个办法很好。下次我也学习一下。 |
Climbing 发表于 2024-8-21 23:41 g4d不一定要安装到mbr,如果这个磁盘预计要安装win系统的话,还是保留nt6引导为好,这样能保证最大兼容。 我试过g4d引导、wee引导,曾经因wee的强大一度热衷于wee引导,后来在某一台机子上装wee引导结果开不了机,才更加明白,兼容是第一位的,无论你多喜欢,无论它多强大,只要设备不兼容,你就必须屈服,毕竟你的努力就是让这台设备更好地工作 所以现在的磁盘,传统引导方面,如果考虑安装win系统的话,我都是保留nt6引导,需要使用g4d的话,我会将bootmgr放到boot目录,把g4d的grldr改名为bootmgr替换到激活分区根目录。 |
hilsonma 发表于 2024-8-21 22:59 我因为要安装grub4dos到mbr,所以肯定要事先保存下来这些扇区,否则就被grub4dos覆盖了。 ![]() |
Climbing 发表于 2024-8-21 20:04 我刚才又试了一下,保存更多扇区是可以的,保存少了就不行 比如bootice写的core.img 是62个扇区,保存60个扇区会引导失败,保存100个扇区则引导成功 还有,如果你没有改变这些扇区的话,可以不保存,直接引导这些扇区就可以了的 比如 bootice 写在(hd0)的core.img,可以直接 kernel (hd0)1+62 这样引导,表示引导(hd0)上 LBA1 开始的62个扇区. |
hilsonma 发表于 2024-8-21 19:06 谢谢你的试验,我只需要再试一下将deepin安装的mbr保存1000个扇区,然后用chainloader加载一下就可以了。其实有很方便的kernel core.img的方式从grub4dos加载grub2。我只是尝试这种直接chainloader mbr的方式能否成功。 |
Climbing 发表于 2024-8-21 18:39 core.img是multiboot格式的内核,可以由kernel命令加载启动。 前面加上lnxboot.img之后,就变成了linux格式的内核,也可以由kernel命令加载启动。 |
Climbing 发表于 2024-8-21 18:09 我刚刚试了使用bootice安装的grub2 mbr,保存63个扇区,然后使用g4d 去chainloader 我保存的文件,是可以成功引导到grub2的 我没有安装deepin,所以不知道deepin安装程序写mbr的细节,如果deepin安装程序写的boot.img跟bootice的不一样的话,你可以尝试只保存后面的扇区,不保存第一个扇区(不保存lba0),这样就是保存了deepin的core.img,你再将grub2通用的boot.img跟保存的这个core.img合并成grub2.mbr就可以了 |
2011whp 发表于 2024-8-21 18:21 我觉得你说的很重要,但我看不太懂你在说什么。 尤其是最后一句,你说的这个linux.img是指lnxboot.img吗?如何用? copy /b lnxboot.img + core.img = grub2 然后用grub4dos来chainloader grub2就可以正常启动? ![]() |
boot.img 是 找 当时 bios 启动设备表的 hd0 的第二扇区 微软的 是找 hd0上的活动分区区的 pbr boot.img + core.img 只能用bootice写MBR用 想当文件用: 加linux.img, (可以当 作bootmgr用) |
hilsonma 发表于 2024-8-21 11:38 问题就是,我就算保存了全部的扇区,如果它的第一扇区引导代码固定的到硬盘上找第二个扇区,还是会启动失败。话说回来,我不知道它占用了多少个扇区,但我可以多保存几个扇区,比如保存100个,甚至保存2048个。 ![]() |
本帖最后由 my9823 于 2024-8-21 17:24 编辑 天涯海角1216 发表于 2024-8-21 16:04 Ventoy就移动了core.img,看看它的制作脚本。 vtinfo "writing data to disk ..." //将boot.img的前446个字节写入磁盘MBR。 dd status=none conv=fsync if=./boot/boot.img of=$DISK bs=1 count=446 //如果检测时GPT分区,把MBR扇区的93字节改为十六进制22(core.img的第一个扇区号?)貌似gpt磁盘的前33扇区是分区表,所以从34扇区开始。) if [ -n "$VTGPT" ]; then echo -en '\x22' | dd status=none of=$DISK conv=fsync bs=1 count=1 seek=92 xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2014 seek=34 //这个应该是core.img剩余扇区数量吧? echo -en '\x23' | dd of=$DISK conv=fsync bs=1 count=1 seek=17908 status=none else xzcat ./boot/core.img.xz | dd status=none conv=fsync of=$DISK bs=512 count=2047 seek=1 fi ![]() 由此推断出boot.img前446字节是mbr,且记录了core.img的第一扇区地址,而core.img必须是连续的扇区存放,core.img第一扇区保存了剩余扇区的数量。 |
我记得很久以前看过这段代码,grub2将boot.img(这是真正的mbr)放到了LBA0扇区,而core.img则放到了LBA1-LBA67扇区,加载的过程也是LBA0加载LBA1,LBA1加载剩余的部分。 其中,LBA0扇区尾部有LBA1-LBA67扇区的相对位置扇区号, 所以,如果LBA1-LBA67扇区被清除,或者移动位置,则不能启动了。 |
本帖最后由 my9823 于 2024-8-21 15:32 编辑 其实你完全可以参照deepin的grub.cfg 写grub4dos的菜单,无非一个是kernel,一个是linux,initrd应该是一样的写法。linux都是: kernel /path/内核 内核参数 initrd /patn/initrd名字 补充一句:boot.img和core.img的第一个扇区diskboot.img应该就是grub2自带的吧?之后后边的kernel.img中式用grub-mkimage生成的,里边包含的模块不同。boot.img被写入硬盘mbr,应该有变化,除了分区表部分,前面有一部分也变了,机器码不知道有啥动作,不懂汇编,猜的。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.