LinuxSir.cn,穿越时空的Linuxsir!

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

关于initrd文件的疑问

[复制链接]
发表于 2009-12-17 16:14:45 | 显示全部楼层 |阅读模式
我的理解是这样的
我的/分区是ext3,boot分区是ext2
磁盘是scsi
我没有将这些编译进内核(为了让内核最小),而是将它们作为了modules
那么这个时候如果没有initrd这个文件,在系统启动的时候就会无法访问磁盘
所以需要生成一个initrd文件,这样启动的时候bootloader会把内核文件和initrd
文件加载到内存,然后解压,之后内核靠initrd文件才能挂在磁盘,识别文件系统

这里我也有一个疑问?磁盘的驱动是不是一定要编译进内核,而不能作为模块?
不然,bootloader怎么吧kernel加载到内存?还是bootloader加载kernel的时候不依赖磁盘驱动和文件系统呢?

另外:在配置内核的时候,那个选项是选择内核支持initrd的呢?
没有找到。。
发表于 2009-12-17 17:00:23 | 显示全部楼层
Post by pamirs;2056626
我的理解是这样的
我的/分区是ext3,boot分区是ext2
磁盘是scsi
我没有将这些编译进内核(为了让内核最小),而是将它们作为了modules
那么这个时候如果没有initrd这个文件,在系统启动的时候就会无法访问磁盘
所以需要生成一个initrd文件,这样启动的时候bootloader会把内核文件和initrd
文件加载到内存,然后解压,之后内核靠initrd文件才能挂在磁盘,识别文件系统

这里我也有一个疑问?磁盘的驱动是不是一定要编译进内核,而不能作为模块?
不然,bootloader怎么吧kernel加载到内存?还是bootloader加载kernel的时候不依赖磁盘驱动和文件系统呢?

另外:在配置内核的时候,那个选项是选择内核支持initrd的呢?
没有找到。。


bootloader加载内核到内存的过程和能力好像和内核里面的东西完全没关系
bootloader需要能够读取相应的文件系统
回复 支持 反对

使用道具 举报

发表于 2009-12-17 17:13:20 | 显示全部楼层
在x86的桌面、服务器系统上,bootloader一般是通过bios服务(int 0x13)来访问磁盘的,不论启动盘是ide、scsi还是usb,只要bios支持bootloader就能加载内核到内存中并激活它,如果提供了附加的initrd也会通过相同方法加载。
内核激活之后如果需要再对磁盘进行访问(比如说挂在root文件系统)就需要通过自己的driver来操作了,这点和windows 9x不同,win支持兼容模式的ide访问,实际上是调用bios的int 0x13来实现的。所以说磁盘驱动如果没有特殊原因最好还是编译到内核里面,因为你编译成模块也不能减少运行时内存开销,核心整个生命期内磁盘驱动始终都要驻留内存,放到initrd里面给日后维护增添了不少麻烦。
回复 支持 反对

使用道具 举报

发表于 2009-12-17 17:16:25 | 显示全部楼层
如果是scsi磁盘作为启动分区,特别是通过光纤通道卡或者raid卡连接磁盘阵列的情况下,除了选择low level的scsi驱动之外还要将scsi disk模块也编入内核(不要选成模块),而且最好选中探索全部scsi id的选项,否则位于scsi id的空槽后面的磁盘可能无法找到。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-17 18:38:17 | 显示全部楼层
明白了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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