linux 0.11根文件系统,linux内核与根文件系统之间的关联的理解

学者 于 2011-10-19 12:46:08发表:

哦,原来还有一个initrd镜像,后缀名为“.img”,我一直以为只有一个内核镜像呢;

还有引导程序的路径表示与系统不同啊!

/root

目前正在学习linux中,希望先从系统启动开始一直到开始登陆;

感谢各位的帮助,对我很有用,谢谢!:0)1

gogo11 于 2011-10-18 08:28:34发表:

找到一篇关于这方面的:引用:

1、BIOS 阶段

依照 RHEL 启动流程的顺序来看,第一个阶段就是 BIOS 。这个阶段,主要负责执行启动设备上的启动加载器。

如果无法找到启动设备,或无法执行启动加载器,则整个启动的动作,就会中断。

其中,最常见的,与 BIOS 有关的错误,则是 BIOS 设置启动设备的配置错误。使 BIOS 无法找到启动设备,进而无法执行启动设备中的启动加载器,最好导致 RHEL 的启动失败。

因此,如果怀疑是在 BIOS 这个阶段中造成的无法启动,那么,请详细检查 BIOS 中的设置。

2、启动加载器的错误

启动 RHEL 的第二个阶段,就是启动加载器。启动加载器的任务,主要是加载与执行 Linux 内核,还有要去挂载初始化内存磁盘镜像文件(Initialize RAM Disk Image,initrd),并将内核启动参数(Kernel Boot Parameter)传递给 Linux 内核。

如果,在启动加载器阶段发生错误,则会造成 RHEL 启动失败。

常见的启动加载器的错误,包括启动加载器坏掉了,和其配置文件中的错误这两项。以下是这两个常见的错误的详细介绍:

(1)启动加载器坏掉了

GRUB 这个 RHEL 默认的启动加载器被设计成两个阶段(Stage)

第一个阶段(First Stage):

其大小仅 446 个字节(Bytes),以便能塞进磁盘的 MBR 扇区中的 IPL 区域。其第一个阶段的任务,主要是用来负责寻找,并执行 GRUB 的第二个阶段。

第二个阶段(Second Stage):

大小长度不固定,存储于其他的扇区中。(实际上,我认为是这个文件 /boot/grubstage2 )。由它负责加载并解析 GRUB 的配置文件,并以 GRUB 配置文件中的配置,来启动指定的操作系统。实际上,Linux 的内核,实际上是在这里被加载执行的。

如果 GRUB 的第一个阶段受损了,则可能就会卡在这儿。或者 BIOS 会继续搜寻并执行其他的启动设备中的启动加载器。

如果第一个阶段正常,但第二个阶段损坏了,则 GRUB 将会出现类似如下所示的错误信息:

GRUB loading . please wait...

Error 15

注意:第二个阶段损坏,跟配置文件没有关系。这里只是第二个阶段损坏,配置文件并没有坏掉。

反正,如果是启动加载器坏掉了,不管是第一个阶段,还是第二个阶段,都要重装 GRUB 启动加载器。方法如下:

A. 使用安装用的启动介质,来进入救援环境(Rescue Environment),并且让硬盘中的 RHEL 根文件系统挂载到救援环境中的 /mnt/sysimage/ 目录中去。

B. 由于重新安装 GRUB ,必须在硬盘的 RHEL 的根环境中安装,所以,请使用 chroot 命令将目前的根环境,切换至硬盘中的 RHEL 中原来的根文件系统上。

# chroot /mnt/sysimage/

C. 使用 grub-install 重新安装 GRUB 到你的硬盘中去。

# grub-install /dev/sda

// 将 /dev/sda 换成你自己的硬盘设备文件。 // 在这一步中,不需要指定安装源吗??可以直接执行??

修正后,结束救援环境,重新启动 RHEL 。此时,就应该可以看到 GRUB 正常地启动了。

(2)配置文件的错误

启动加载器的错误,除了 GRUB 的第一个阶段和第二个阶段会出问题以外,其配置文件 //boot/grub/grub.conf 也会出问题。

如果要修正 GRUB 的配置文件中的错误,请执行下列步骤:

A. 使用安装用的启动介质,进入救援环境(Rescue Environment),并挂载硬盘中的 RHEL 的根文件系统到救援环境中去。

B. 使用 chroot 命令,切换至硬盘中的根文件系统

# chroot /mnt/sysimage/

//这一步,应该是可以略过去的。

C. 使用 vi 来修正 GRUB 的配置文件 /boot/grub/grub.conf 。修正后,结束救援环境即可。

如果没有执行第二个步骤,则 GRUB 的配置文件的路径为 /mnt/sysimage/boot/grub/grub.conf 。

3、无法启动内核

启动加载器的主要工作之一,就是启动 Linux 内核。不过,常会因为以下原因,造成 Linux 内核启动失败。

(1)内核镜像文件,是否存在?

(2)启动加载器的配置文件中的内核镜像文件名称,是否正确?

(3)初始化内存磁盘镜像文件(Initial RAM Disk Image,initrd)是否存在?文件名称是否正确?

如果有错误,请进入救援环境,逐一检查上述设置的错误。修正这些错误后,结束救援环境即可。

提示:如果没有内核镜像文件了,或者没有初始化内存磁盘镜像文件了,则需要安装相应的 RPM 包。

4、无法挂载根文件系统

Linux 内核启动后,除了会驱动必要的硬件设备外,还有一个很重要的工作,那就是需要挂载根文件系统。以便启动 init 服务,才能进行后续的初始化 RHEL 的工作。注意:此时是由内核去挂载根文件系统,是以只读的方式进行挂载的。

如果无法挂载根文件系统,RHEL 会显示 Kernel Panic 的错误信息,然后,终止启动的工作。

一般来说,出现无法挂载根文件系统的原因,有以下两种:

(1)内核启动参数错误

(2)根文件系统错乱

lykginy 于 2011-10-17 14:23:48发表:

我就是那样换内核的,都己经换了N次了-_-!

age 于 2011-10-17 12:17:00发表:

以一个启动项为例说明下[code]title Fedora Core (2.6.12-1.1456_FC4)

root (hd0,0)

kernel /boot/vmlinuz-2.6.12-1.1456_FC4 ro root=/dev/hda1 quiet vga=787

initrd /boot/initrd-2.6.12-1.1456_FC4.img[/code]这是一个FC的启动项[code]title Fedora Core (2.6.12-1.1456_FC4)[/code]这是无关紧要的,只是用于在启动菜单上显示,不涉及具体系统,比如上面的虽然是FC,你写成windows也可以

这里重要的是几个root的定义[code]root (hd0,0)[/code]这个root是/boot位置,而不是根/位置,当然如果/boot没单独分区,那二个就是一样的。[code]kernel /boot/vmlinuz-2.6.12-1.1456_FC4 ro root=/dev/hda1 quiet vga=787[/code]这一行指定kernel文件,/boot/vmlinuz-2.6.12-1.1456_FC4这是内核文件名,其它发行版也可能是vmlinuz之类,它的全路径实际还要加上盘符名,本例中即为 (hd0,0)/boot/vmlinuz-2.6.12-1.1456_FC4,后一个root=/dev/hda1,这才是指定根目录位置所在,在本例中,(hd0,0)和/dev/hda1其实是同一个分区。[code]initrd /boot/initrd-2.6.12-1.1456_FC4.img[/code]这是指定initrd镜像位置,它和kernel定位是一样的。全路径同样为(hd0,0)/boot/initrd-2.6.12-1.1456_FC4.img

Yutie 于 2011-10-17 08:46:40发表:

不太懂这么深的东东

gogo11 于 2011-10-16 19:22:37发表:

我和你理解一样~~~~~`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值