感谢分享 |
对对对 |
liuzhaoyzz 发表于 2021-2-12 15:14 我从来不把pe部署到本地硬盘启动,因为要维护大量不同环境的电脑,那个32M卡死的情况应该没必要折腾了,和碎片有关 message红毛的usm在用 |
本帖最后由 liuzhaoyzz 于 2021-2-12 15:15 编辑 江南一根葱 发表于 2021-2-12 14:09 1、我没有遇到过这样子奇怪的情况,大部分时候,我会把PE部署到本地硬盘启动,我喜欢从本地硬盘启动,优盘和移动硬盘启动我都是备胎用法,我对USB启动完全不感兴趣,你说的32MB卡死的情况,我没有碰到过,感觉还是可以给yaya大神反馈下,这个可能是某个隐藏的bug。虽然不点大说BIOS即将成为过去,但是我觉得这还是有很长的过渡期的。我喜欢grub4dos这个引导器,虽然经过了十几年的使用,但我觉得我对他的使用还是不够深入。现在用着RAMOS,可以说每天都在用grub4dos进行引导,又怎么能轻易舍弃,虽然UEFI下面也有了g4e/grub2,但我还是更喜欢g4d。 2、message是早就被抛弃的用法,是会导致花屏现象的,message最早好像是2007年左右bean开发的,后来被弃用了,你怎么还在用? |
本帖最后由 江南一根葱 于 2021-2-12 14:25 编辑 liuzhaoyzz 发表于 2021-2-12 09:41 前几天遇到错误的是2020年的grub4dos版本....记得我注册无忧的号就是来反馈grub4dos的问题的,是hp热门机型上的问题, 不过前几天遇到的是“联想”特殊机型,联想毕竟属于“少见”的机型。。 我发的东西少,关于grub4dos的帖就这几个http://bbs.wuyou.net/forum.php?mod=viewthread&tid=388596&extra= 还有个就是wimboot启wim的问题了,C大已经修复这问题了 http://bbs.wuyou.net/forum.php?m ... 4114&fromuid=504115 ----------------------------------------------------------------------- 再就是“最少数”的联想新机器,菜单使用了message会花屏的问题,是我用usm的时候第二次启动usm菜单就遇到的 还有就是有些机上读文件巨慢的问题,是我介绍给同事用usm的时候第一次启动遇到的 这些问题我个人估计在grub2下使用类似模式也会有这样的现象,就没去提交了 ------------------------------------------------------------------ 前几天遇到的我可能有时间去重现一下,等年后了,应该有几十台机有这个问题(都是联想) __________________ bios下,要想引导兼容性好,估计就不能把菜单搞得太华丽,中文和背景都不要有 |
江南一根葱 发表于 2021-2-11 23:14 怎么没有见到你反馈什么grub4dos的错误? 我用grub4dos没有遇到你说的那么多错误,你说的是以前的grub4dos版本吧? |
liuzhaoyzz 发表于 2021-2-9 17:20 本来不想说的,但我装机十多年实际应用中bios下用grub4dos有一大堆问题,花屏、启动菜单项莫名其妙找不到文件,grub2除了启动慢个两秒,花屏几率也不多,没发现其他问题, |
wintoflash 发表于 2021-2-10 19:27 看了下grubfm里面的partnew方案,grubfm好像是用动态脚本func.sh,动态判断iso所在的硬盘${grubfm_disk}是否存在,如果存在就给出提示让用户确认,告知用户会删除该分区里面的所有数据,感觉还是有一定的风险,如果能够把写入分区表项的风险控制在开发侧,而不是在用户侧就好了。否则用户把菜单里面的(hd1,4)改成(hd1,0)就可能导致已存在的(hd1,0)分区表项失效,用diskgenius找回分区可能会找到很多个(以前的旧的分区都有可能被找到),如果保存错误,就有数据丢失的风险。 1、能否在partnew的源代码级别进行修改判断,比如(hd1,4)如果是个存在的真实的物理分区,partnew -t 0x00 -f /fossapup64-9.5.iso (hd1) 4直接抛出个错误,并拒绝执行后续操作。如果(hd1,4)不是个真实的物理分区,而是partnew创造出来的分区表项,内容是iso的文件,就修改对应的分区表项,建立(hd1,4)主分区。grub2应该可以判断(hd1,4)是否是真实的物理分区,还是“假的”分区表项吧? 2、能否让partnew支持GPT分区,这样子的话,iso放在GPT分区,由于GPT支持很多个主分区,完全可以用一个后面的空白分区表项建立一个指向iso的新的,比如(hd1,99),这样子就不会干扰原来的物理分区了。这样子的话,基本上绝大多数liveCD的linux.iso启动都没问题了。 |
wintoflash 发表于 2021-2-10 19:27 哦,你这里已经有成套的解决方案了,这个看起来容易懂。我怎么看easy2boot那么复杂,里面那么多文件。 |
liuzhaoyzz 发表于 2021-2-10 19:15 https://github.com/a1ive/grub2-f ... fm/rules/iso/e2b.sh |
wintoflash 发表于 2021-2-9 19:15 大神,我用一楼的grub2菜单,当我用partnew“新建一个”分区表项,这个分区表项已经存在,然后我用一楼的菜单启动linux.iso,结果partnew新建的这个分区表项(其实就是linux.iso),会把真实的原来的物理分区表项给覆盖掉,导致windows下我的电脑里面,丢失了真实的物理分区,这个后果有点严重。 g4d下面没有这个风险,如果partnew新建一个指向已有的分区比如(hd0,1)的时候,g4d会提示出错并拒绝执行,很安全。 想请问下,grub2菜单里面怎么判断某个分区已经存在? if [ -f (hd0,1)]; then echo 分区已存在 fi; |
本帖最后由 wintoflash 于 2021-2-9 19:19 编辑 liuzhaoyzz 发表于 2021-2-9 17:59 grub4dos 是基于年久失修的 grub legacy 开发的,现在已经很难在最新的系统上编译了,而且里面用了很多 hack,一般的 gcc 编译出来的都有问题,代码已经快成 "屎山" 了,很难修改。 |
liuzhaoyzz 发表于 2021-2-9 17:59 理论上是可以的。 比如 vtoyboot 这个功能现在就独立出来了。https://www.ventoy.net/cn/plugin_vtoyboot.html 当然Ventoy从最开始的一个设想到后面的具体实现,有很多细节都是边想、边做、边改。等后面有时间了可以回过头来好好设计一番。 |
longpanda 发表于 2021-2-9 17:45 本地硬盘上面,有微软bootmgfw.efi,有BIOS下面的g4d,有UEFI下面的grub2,ventoy设计初衷主要用于USB设备,这是个有损的方案,要想占领硬盘,就要重新分区,难度挺大。我对于ventoy的hook+注入initrd这一套机制挺感兴趣,如果能把有些东西独立出来或者融入g4d、g4e、grub2之中,那就很有意思了。我不懂瞎说的。 |
liuzhaoyzz 发表于 2021-2-9 17:20 我也觉得partnew方案不是个很完美的方案,只能用于原生不支持ISO整体启动的linux.iso,只能作为备胎 这个原生支持ISO整体启动的Linux ISO 也能用啊。 |
g4d和grub2完全是两套东西啊,这样的话工作量就翻翻了。 现在Ventoy我只需要一套grub2的代码。而且菜单、主题、内部实现等等,都是相同的,无需分别考虑。 Easy2Boot 就是这样的,Legacy BIOS模式用g4d, UEFI 模式用 agFM。用起来没有统一的一套方案的感觉,有点像大杂烩。当然这只是我个人的观点。 再者就是 UEFI 是未来的主流,Legacy BIOS模式越来越少,总会有退出舞台的一天。现在可以认为是主要支持UEFI模式,Legacy BIOS模式顺带就支持了,有些兼容性问题也没太大关系。 Ventoy安装在本地硬盘还是U盘都可以,只是现在U盘上用的最多,也最合适。不过Ventoy解决ISO整体启动的思路未来是可以独立出来的。 |
liuzhaoyzz 发表于 2021-2-9 17:20 我也纳闷L大为什么没有选择g4d做legacy方案。grub2天生是强efi弱bios |
longpanda 发表于 2021-2-9 16:22 我也觉得partnew方案不是个很完美的方案,只能用于原生不支持ISO整体启动的linux.iso,只能作为备胎。ventoy用于linux.iso方案确实是个比较好的方案,但ventoy主要是想解决USB设备启动这一个问题,我对于所有USB启动方案其实都不怎么感兴趣,包括十年前的ud方案,udm方案,USB启动方案是我的备胎方案。另外ventoy似乎都是用的grub2为主引导?包括BIOS和UEFI,这会导致BIOS下面会有花屏这样的难以解决的问题,BIOS下面为什么不用grub4dos方案呢? |
liuzhaoyzz 发表于 2021-2-9 13:28 这个其实算不上是好处,反而某些情况下可能会出问题。 这其实是利用了一个Linux内核检查分区表时不严格的一个漏洞(不检查两个分区表对应的区域相互交叉嵌套的情况)。让系统误认为是两个独立的分区。如果你这样启动起来之后,你把分区上的这个对应的ISO文件删除了,或者是其他原因导致这个ISO文件位置变动了。你当前这个系统可能直接就挂掉了。 |
在整体引导 Linux ISO 方面: 目前来看只有 partnew 和 Ventoy 的 patch initrd 这两种算是比较通用的方案。 相比来讲,Ventoy的方案支持的系统更多一些,缺点少一些。(这句算是自卖自夸的 ![]() |
wintoflash 发表于 2021-2-9 14:10 Ventoy开发初期也考虑过类似loopback的方式,不过缺点也很多,比如: 1. 支持的发行版少,只有几种类型的发行版支持,其他大部分都不支持 2. loopback 最终还是依赖 grub 来引导,但有些系统比如 BSD/Xen 等 标准grub是引导不了 3. 有些系统的grub会自己魔改,比如 CentOS 7系列的grub 菜单里面的 \x 就自己修改支持的 4. 几乎很难支持用户基于某个发行版自己定制的系统 5. 当前支持loopback的系统,挂载 exFAT/NTFS 都只能依赖fuse这种用户态的文件系统, 性能损失很多 |
liuzhaoyzz 发表于 2021-2-9 13:28 用这种或者类似方案的多了去了。 AIOBoot 也是用的这种方案,不过增加了对 BSD disklabel 的支持。 UD, UDm 等一些隐藏分区的方案,其实也用到了一些修改分区表的小把戏。 我也不喜欢这种需要写磁盘的方式,只不过它是最省事和通用的。 我更喜欢 loopback.cfg ,不过除了 Ubuntu 和 Manjaro 等发行版,其他的发行版根本不鸟这种方式。(https://www.supergrubdisk.org/wiki/Loopback.cfg) |
本帖最后由 liuzhaoyzz 于 2021-2-9 15:16 编辑 longpanda 发表于 2021-2-9 11:31 你这个帖子揭示了很多真相,我之前从来没有了解和接触过的,原来Easy2boot用的是基于partnew的方案啊,我没有用过Easy2boot。感谢! 感觉用partnew方案有个好处是,所有的分区都是可读写的。对于linux.iso如果原生支持iso整体启动,那么iso所在的介质会被linux挂载为只读分区,有的linux系统甚至完全不会挂载这个iso所在的硬盘介质。 |
wintoflash 发表于 2021-2-9 11:23 感谢指点! |
本帖最后由 longpanda 于 2021-2-9 16:17 编辑 Easy2Boot很多年了,一直以来它的核心就是 partnew partnew 有一些固有缺点,其中有一些你已经提到了。 1. U盘必须可写,写保护了肯定不行 2. BIOS必须支持写入磁盘的操作(比如一些虚拟机上就不行) 3. ISO文件在磁盘上必须连续,不能分段 4. 必须预留一个MBR分区表的位置给它用,4个主分区表都用满了就不行了 5. 应该还不支持 GPT 分区表 6. 有一些系统(比如 FreeBSD系列)根本不认这种假分区表 7. 有一些系统(比如CentOS 6系列)U盘里的iso9660格式的分区它也不认,它只认传统光驱 8. 遗留副作用。平时U盘插在Linux系统下会多出一个分区来 9. 无法实现一些高级功能(比如自动安装、自动注入驱动等) Ventoy在一定程度上就是为了突破这些限制而开始设计开发的。 |
参与人数 1 | 无忧币 +10 | 收起 理由 |
---|---|---|
| + 10 | 很给力! |
liuzhaoyzz 发表于 2021-2-9 10:48 它就是一个用来写分区表的命令,你在另一个磁盘上按这个磁盘上文件的起始扇区和长度创建分区,那么这个新建的分区里面的数据一般来说都是无效的。 |
wintoflash 发表于 2021-2-9 10:01 感谢讲解partnew的原理。 你的意思是说,grub2下面,partnew仍然要求xxx.iso所在的分区比如(hdx,y)这种,与partnew所修改的硬盘必须是同一个硬盘,必须也是(hdx)是吗? 可能我前一次我已经用partnew修改了物理硬盘的分区表项,创建的主分区指向了xxx.iso文件,已经生效了。所以导致我产生了错误的认识。 |
本帖最后由 wintoflash 于 2021-2-9 10:18 编辑 partnew 就是直接改写你的硬盘mbr分区表,新建一个分区。这个分区当然是真实的,不是虚拟的。如果参数是一个文件,它只是把文件开头所在扇区号当作分区的开始,把文件的长度当作分区的长度,创建这样一个分区。文件如果不连续,那分区里面的数据就是乱的。 Linux (以及一些 BSD 发行版) 认可这种分区,所以能找到这个分区里面的系统文件。 Windows / GRUB 不认可这种类型为 0x00 的分区,所以就当这个分区不存在。 如果这个文件是个 img , 里面是 FAT 或者 NTFS 等文件系统,GRUB 就可以识别它,修改分区表的时候填上合适的分区类型,这样这个分区可以被 Windows / GRUB 识别了。 Fbinst 搞的分区表项法支持多个 efi 启动分区,玩的就是这种操作。 不要求iso所在的硬盘和partnew所虚拟的硬盘必须是同一个硬盘,可以跨硬盘,而且partnew不但支持MBR硬盘虚拟出一个主分区(要求主分区数目小于等于3个),还支持在一个存在的gpt硬盘后面虚拟出一个主分区。菜单中输入一个不存在的硬盘的时候,虽然也会出错,但是好像仿真还是会生效,比较强大。 根本就没有这回事。 |
partnew 命令是 grub legacy 原来就有的。grub4dos 对 grub legacy 的许多命令都进行了功能加强或改进,而且排除了其中的很多 bug。改造幅度最大的,是 map 命令。对 partnew 命令也进行了较大幅度的改造。 原来如此。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.