LinuxSir.cn,穿越时空的Linuxsir!

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

如何创建 initrd 文件??

[复制链接]
发表于 2007-7-27 14:54:32 | 显示全部楼层 |阅读模式
我下载了 slack 12 的前两个ISO文件,解压到FAT32分区,
通过 grub for Dos 启动,硬盘安装,
根分区装在 /dev/sda11 上,用的是xfs 文件系统
在最后没有安装 lilo , 在启动 slack 时发现 /boot  下面没有 initrd 文件

通过启动盘启动,挂载了 /dev/sda11 分区,再 chroot 到 挂载目录 下,
cd /boot
mkinitrd -c -m xfs -f xfs -k 2.6.21.5 -r /dev/sda11
用上面那条命令用各种参数组合创建了不同的 initrd.gz  文件,但是这个文件 只有几百K,不到1M,用 gunzip 解压 ,cpio 导出文件内容来看,在lib 下只有一个 xfs.ko 模块 ,而且连 sbin 目录都没有。。。。 这样在启动时,显示到  SGI XFS .. 那几行时,下面提示无法挂载 / 分区,系统了停在那里了。


我想问一下slack 安装时不会自己创建内核对应的initrd 文件吗? 如果是手工创建的话要怎样创建?
发表于 2007-7-27 16:29:07 | 显示全部楼层
mkinitrd的时候确保根分区的模块在其中,如果不能顺利挂载,用loop方式挂上文件,手工修改一下它的脚本。脚本很简单,相信你不会看不懂。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-27 17:23:12 | 显示全部楼层
楼上的说怎么做还是没看明白 。。。


不过问题。。。我用 huge 的内核启动,没带 initrd 。。。。。就解决了。。。。(刚开始没注意,一直用 generic 的内核在启动)
回复 支持 反对

使用道具 举报

发表于 2007-7-28 03:03:32 | 显示全部楼层
Post by windwiny

cd /boot
mkinitrd -c -m xfs -f xfs -k 2.6.21.5 -r /dev/sda11
我想问一下slack 安装时不会自己创建内核对应的initrd 文件吗? 如果是手工创建的话要怎样创建?
Slackware 共提供了两种类型的kernel,一个是huge, 另一个是generic, 每种kernel又有两个版本,SMP和non-SMP。在kernels/目录下的huge kernel是用来安装用的,包含了所有的文件系统,因此使用huge kernel则不需要initrd. 另一个gerneric kernel在/slackware/a/目录下,只包含了少量的文件系统支持,因此当使用gerneric 时,必须使用initrd加载所需要的文件系统。

如果你使用kernel-generic-2.6.21.5, 则
  1. # installpkg kernel-generic-2.6.21.5-i486-1.tgz
  2. # installpkg kernel-modules-2.6.21.5-i486-1.tgz
  3. # cd /boot
  4. # mkinitrd -c -k 2.6.21.5 -m xft -f xft -r /dev/sda11
复制代码
如果你使用kernel-generic-2.6.21.5-smp, 则
  1. # installpkg kernel-generic-smp-2.6.21.5-i486-1.tgz
  2. # installpkg kernel-modules-smp-2.6.21.5-i486-1.tgz
  3. # cd /boot
  4. # mkinitrd -c -k 2.6.21.5-smp -m xft -f xft -r /dev/sda11
复制代码
使用initrd,必须在/etc/lilo.conf增加一行  initrd = /boot/initrd.gz, 并重新安装lilo
  1. # Linux bootable partition config begins
  2. image = /boot/vmlinuz
  3.   initrd = /boot/initrd.gz
  4.   root = /dev/sda11        <==[b]改成你自己的root[/b]
  5.   label = Linux
  6.   read-only
  7. # Linux bootable partition config ends
复制代码

注:Slackware 12.0  的huge kernel是安装系统用的, Slackware 不反对在安装完成后仍然使用huge kernel作为日常, 但Slackware 建议使用SMP版本的kernel.  详见Release Notes.

Slackeware的 kernel
slackware/a/kernel-generic-2.6.21.5-i486-2.tgz
slackware/a/kernel-generic-smp-2.6.21.5_smp-i686-2.tgz
slackware/a/kernel-huge-2.6.21.5-i486-2.tgz
slackware/a/kernel-huge-smp-2.6.21.5_smp-i686-2.tgz

Reference: Slackware official announcement
There are two kinds of kernels in Slackware -- the huge kernels, which
contain support for just about every driver in the Linux kernel. These are
primarily intended to be used for installation, but there's no real reason
that you couldn't continue to run them after you have installed.
The
other type of kernel is the generic kernel, in which nearly every driver
is built as a module.  To use a generic kernel you'll need to build an
initrd to load your filesystem module
and possibly your drive controller
or other drivers needed at boot time, configure LILO to load the initrd at
boot, and reinstall LILO.  See the docs in /boot after installing for more
information.  Slackware's Linux kernels come in both SMP and non-SMP types
now.  The SMP kernel supports multiple processors, multi-core CPUs,
HyperThreading, and about every other optimization available.  In our own
testing this kernel has proven to be fast, stable, and reliable.  We
recommend using the SMP kernel even on single processor machines if it
will run on them.
回复 支持 反对

使用道具 举报

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

本版积分规则

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