LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1537|回复: 22

关于硬盘安装的一点特别想法

[复制链接]
发表于 2006-5-19 16:57:22 | 显示全部楼层 |阅读模式
我了解Linux时间并不短,但开始深入研究不过是这两天的事。按说不应在LFS这里混,但鉴于有C语言开发的功底和编译大型库的一点经验,还是厚着脸皮来了~~先请大家手下留个情^_^
说来惭愧,不愧是LFS,一上来就给我个下马威:LiveCD硬盘安装(硬盘启动)到现在也搞不定。从前我用kernel/initrd的方法硬盘引导过Ubuntu和Gentoo的LiveCD ISO,都很顺利,但这招用在LFS LiveCD上居然不灵了,虽然可以加载核,但最后总是提示不能在任何驱动器中找到LiveCD,重试三次(每次10秒)后关机。这还算是我用过的最好的方案,其他的方案,比如用ISOEMU,Loadiso,或grub的map功能,都还不如这个走得远。搜遍了百度Google都得不到一个解决方案,至今仍在摸爬滚打中。目前又有一个新想法,虽然初步尝试也告失败,但总还觉得有一线希望,帖上来希望和大家讨论一下~~

其具体指导思想,就是千方百计,让系统把一个硬盘分区当成光驱。初步设想,把一个硬盘分区划成和光盘一样大(一个扇区都不差,不知道是否可行,正在找资料+实验中),然后把ISO文件的内容整个写到这个分区中(这步可以用WinHex的磁盘编辑功能),再从这个分区引导。因为ISO太大了,太耗时间,于是我先做了个小规模的实验,把一个1.44M的软盘映像写到了一个分区中。——只是无法分出一个1.44M的分区,那连一个柱面都不到。在我机器上最小的分区只能做到7.78MB。硬着头皮试,grub chainloader +1,结果显示了starting DOS后死机。现在分析原因,也许是软盘和硬盘的CHS参数差异而导致的?看来事实不像我想得那么简单,如果用于光盘的ISO9660格式,肯定也是一样死法。于是我的思路发生转移,还得用硬盘的原生格式,只是如何设法把ISO中的引导信息提出来并解读,看看它究竟做了什么,装载了光盘中的哪个文件。这样,我就可以仿照着自己写个bootloader,于是硬盘启动版LiveCD完美诞生了^_^或者我不写,可爱的Grub也可以应付自如了~哪位大侠了解ISO9660格式,请不吝赐教,感谢!

另外也许有你要问,既然都装了Ubuntu什么的就用那些做宿主好了还为什么非要LFS LiveCD?——仅仅因为本人初学么,LiveCD不是成功机会更大么,至少不会编译到一半缺什么工具对吧^_^
发表于 2006-5-19 17:22:21 | 显示全部楼层
楼主的精神令人佩服!
不过~这个~,会不会是把简单的事情复杂化了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-19 17:31:56 | 显示全部楼层
~这个~,其实,俺也觉得自己思想有点复杂了……
其实光盘引导,做得也不外乎就是运行光盘上的别的程序吧?比如EasyBoot做的那些N合1 超级宇宙无敌霹雳Windows安装盘之类,不也是每个菜单项执行一个命令么?只要找出LiveCD一上来执行了什么命令,应该就可以的吧……^_^
回复 支持 反对

使用道具 举报

发表于 2006-5-19 18:57:38 | 显示全部楼层
楼主是要把 LiveCD 拷贝到硬盘然后从硬盘启动?

如果是用 initrd 的话,你想干什么都可以,就是启动的时候必须要找到该设备,才能 mount 根目录。

不过还是觉得工程太大了。。。
回复 支持 反对

使用道具 举报

发表于 2006-5-19 19:35:04 | 显示全部楼层
自己写 initrd 的 /linuxrc , mount 光盘镜像, chroot 就行了.
但这时 intrd 里内容就会多一点, 磁盘驱动, iso 所在分区驱动, iso 驱动, loop 设备驱动.......
而且 initrd 一般用 nash ,脚本不太好写, 主要是功能太简单.
还有 initrd 里用到的所有程序都必须是 static 的.
回复 支持 反对

使用道具 举报

发表于 2006-5-19 19:43:40 | 显示全部楼层
而且 initrd 一般用 nash ,脚本不太好写, 主要是功能太简单.
还有 initrd 里用到的所有程序都必须是 static 的.
也不一定,在initrd里边放一个uclibc/klibc/glibc 也可以,strip后大小还是能接受的。
至于nash,我还是用的bash。大家的内存都不小了,别省那一点空间了吧。。。:)。
回复 支持 反对

使用道具 举报

发表于 2006-5-19 20:44:21 | 显示全部楼层
这样 initrd 是不是大了一点?
不是要节省内存, 只是一般 initrd 大小都是 kernel 里写死的, 够用吗?
还有, initrd 是 grub 先装载的, 有没有大小限制?

其实一般的 distro 的硬盘安装initrd 只用了 static nash ,足够了, 也很小, 不会用到 libc 的, 可以拿来参考. 所以说, 实现并不是太难.
回复 支持 反对

使用道具 举报

发表于 2006-5-19 20:51:28 | 显示全部楼层
LFS 硬盘安装的想法不是曾经讨论过了麽?

题材的很可取,只是觉得本末倒置了。。。
回复 支持 反对

使用道具 举报

发表于 2006-5-19 21:03:13 | 显示全部楼层
knaotix 的 initrd 解开后 9.8M,,默认用了 100M 的 initrd。

initrd 可以随机指定,用 ramdisk_size=10240 这个格式指定。
initrd 的大小限制就是你的内存限制,别超过内存大小,在多一点预留空间应该就可以了。。

至于 distro 的 initrd,有时间我看看,:)。
回复 支持 反对

使用道具 举报

发表于 2006-5-19 21:16:37 | 显示全部楼层
不同发行版的 initrd 不大一样,Kanotix,LFS 及 Gentoo 等也各不相同
回复 支持 反对

使用道具 举报

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

本版积分规则

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