无忧启动论坛

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

[原创] fbinst制作启动盘,出现 lupu_525.sfs not found 的原因及解决方法

[复制链接]
跳转到指定楼层
1#
发表于 2011-8-12 21:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用 unetbootin 制作启动盘(U盘或移动硬盘),我没有遇到过不能启动的,除非不能U盘启动的老爷机。
可是时下挺流行 fbinst 制作启动盘,初步研究了一下,原因估计有二:
1. fbinst 聪明的将前64个扇区都写入引导信息,解决了传递参数不同而引起部分bios不能启动U盘的问题,因此几乎绝杀所有机子。
2. fbinst 会生成一个隐藏分区,可以把所有引导启动文件和镜像文件都放进去,该分区隐藏得很深,windows 和 linux 下都不能识别出该分区,只能识别出外面的空白分区,只有自己的UI工具才能查看,从而将U盘变成一个“永远不会中毒”的启动盘,该特性深受大众欢迎。

问题出来了,当我们把 puppylinux(及其衍生版本)的四个文件都放进 fbinst 生成的隐藏分区里,menu.lst 也写好,启动能找到 initrd.gz 和 vmlinuz,就是死活找不到 lupu_525.sfs 文件,这是怎么了?

我没有深入技术细节去找原因,不过想了很久,估计找到原因了。问题就恰恰出现在隐藏分区里。这个隐藏分区是 fbinst 生成的,windows 和 linux 系统都无法识别出来,只有 fbinst 能识别出来,而且用来引导启动的 grub4dos 引导文件 grldr 也是 fbinst 作者 bean 定做的,从而让 grldr 能识别该隐藏分区。我们用 find 命令就可以看到隐藏分区的识别符是 (ud),外面空白分区的识别符是 (hd0,0),而一般的 initrd.gz 是识别不出 (ud) 的,因此也就找不到放在 (ud) 里的 lupu_525.sfs 。

现在我们可以重现启动过程:
1. bios 找到U盘的启动信息,将启动权交给 grldr;
2. grldr 根据 menu.lst 列出启动选项(我们选 linux);
3. grldr 在隐藏分区 (ud) 里找到 initrd.gz 和 vmliuz,将启动权交给 initrd.gz;
4. initrd.gz 开始找 lupu_525.sfs,因为不能识别出 (ud),经过 searching deeper,在硬盘和U盘都找不到任何 lupu_525.sfs,退出到dos界面。

废话许多,就一句话,initrd.gz不能识别隐藏分区 (ud),折腾各种 kernel 参数都是神马!

解决方法:
很简单,就是把 lupu_525.sfs 放到U盘外面的空白分区里,也就是 windows 和 linux 都能识别的那个分区,可以放在任何文件夹里。 initrd.gz 和 vmliuz 可以放在隐藏分区里,也可以跟 lupu_525.sfs 放在一起。这样 initrd.gz 启动时就能找到 lupu_525.sfs 了。
以下是我写的 menu.lst(放在隐藏分区的):

title Puppy Linux
find --set-root --ignore-floppies /puppy/initrd.gz
kernel /puppy/vmlinuz pmedia=usbflash psubdir=puppy pfix=fsck
initrd /puppy/initrd.gz

title Puppy Linux (RAM Mode)
find --set-root --ignore-floppies /puppy/initrd.gz
kernel /puppy/vmlinuz pmedia=usbflash psubdir=puppy pfix=ram,fsck
initrd /puppy/initrd.gz

首发:http://www.minilinux.net/node/2296


[ 本帖最后由 2011westmin 于 2011-8-12 22:02 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-17 20:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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