18_开机关机流程与 Loader
- 格式:doc
- 大小:149.86 KB
- 文档页数:24
开机关机流程与 Loader
切换分辨率为
800x600
最近更新日期:2007/06/27
本文已不再维护,更新文章请参考此处
在这个章节当中,我们特别要来看一看整个开机的流程设定, 看看能不能在开机的时候就主动的帮我们将所需要的信息都填进去!此外,还想要知道一下, 我们要如何来设定多重引导呢?设定多重引导的原理是什么?最重要的是那个『什么是开机管理程序 ( boot loader ) 呢?』这些东西对于家里只有一部计算机,却又要安装多个操作系统的朋友来说,
是相当重要而有趣的项目呢!鸟哥底下会介绍 Linux 下的两套相当棒的 boot loader 系统,分别是 lilo
及 grub。
1. 开机流程分析:
1.1 boot loader 与 kernel
载入
1.2 第一支程序 init 及配置文件 /etc/inittab 与 runlevel(图形/纯文本接口的转换)
1.3 init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)
1.4 启动系统服务与相关启动配置文件 (/etc/rc.d/rc.n &
/etc/sysconfig)
1.5 用户自定义开机启动程序 (/etc/rc.d/rc.local)
1.6 根据 /etc/inittab 之设定,加载终端机或 X-Window 接口
1.7 其他开机相关事项:/etc/modprobe.conf, /etc/sysconfig/*
1.8 Run level 之变换: init
2. 核心与核心模块
2.1 核心模块与相依性: depmod 2.2 核心模块的观察: lsmod, modinfo
2.3 核心模块的加载与移除:insmod, modprobe, rmmod
2.4 核心模块的额外参数设定:/etc/modprobe.conf
3. Boot loader: Grub
3.1 boot loader 的功能与意义:
3.2
grub 的配置文件 /boot/grub/menu.lst 与安装型态
3.3 initrd 的重要性
3.4 测试与安装 grub: grub-install, grub shell
3.5 开机前的额外功能修改
3.6 关于核心功能当中的 vga 设定:
3.7 关于大硬盘的问题
4. Boot loader: LILO
4.1 LILO 的配置文件 /etc/lilo.conf
4.2 测试与安装 LILO 开机管理程序
4.3 一些问题的解决之道
5. 开机过程的问题解决:
5.1 忘记 root 密码的解决之道;
5.2 因设定错误无法开机(/etc/fstab, filesystem & fsck);
5.3 利用
chroot 切换到另一颗硬盘工作
6. 参考数据
7. 本章习题练习
8. 针对本文的建议:/viewtopic.php?t=23891
开机流程简介
开机不是只要单击电源钮而关机只要关掉电源钮就可以了吗?有何大学问?话是这样没错啦,但是由于 Linux 是一套多人多任务的操作系统,你难保你在关机时没有人在在线,如果你关机的时候碰巧一大群人在在线工作, 那会让当时在在线工作的人马上断线的!那不是害死人了!一些数据可是无价之宝哩!
另外,与 DOS 环境不同的是, Linux 在执行的时候,虽然你在画面上只会看到黑压压的一片,完全没有任何画面, 但其实他是有很多的程序在背景底下执行的,例如登录文件管控程序、前面两章提到的例行性命令, 当然还有一大堆网络服务,如邮件服务器、WWW服务器等等。你如果随便关机的话, 是很容易伤害硬盘及数据传输的动作的!所以在 Linux 下关机可是一门大学问喔。
既然开机是很严肃的一件事,呵呵,那我们来了解一下整个开机的过程吧! 好让大家比较容易发现开机过程里面发生错误的地方,与解决之道!不过,由于开机的过程中,那个开机管理程序 ( Boot Loader ) 使用的软件可能不一样,例如目前各大 Linux
distributions 的主流为 grub, 但早期 Linux 预设是使用 LILO ,台湾地区则很多朋友喜欢使用 spfdisk 。 但无论如何,我们总是得要了解整个 boot loader 的工作情况,才能了解为何进行多重引导的设定时, 为何老是听人家讲要先安装 Windows
再安装 Linux 的原因~
我们先来想一想, Linux 整个开机的程序是怎样呢?还记得我们提过,开机时要载入核心, 让核心来驱动整个硬件,这样才能算是一个最阳春、最基础的操作系统吧?然后才能够执行各种程序的运作。 同样的,开机的流程也是需要先加载核心的。不过,加载核心前,却需要一些前置作业,才能够正确无误的加载核心嘛! 所以,整个开机的程序是这样的:
加载 BIOS 的硬件信息,并取得第一个开机装置的代号;
读取第一个开机装置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk
等等) 的开机信息;
加载 Kernel 操作系统核心信息, Kernel 开始解压缩,并且尝试驱动所有硬件装置;
Kernel 执行 init 程序并取得
run-level 信息;
init 执行 /etc/rc.d/rc.sysinit 档案;
启动核心的外挂模块 (/etc/modprobe.conf);
init 执行 run-level 的各个批处理文件( Scripts );
init 执行 /etc/rc.d/rc.local 档案;
执行 /bin/login 程序,并等待用户登入;
登入之后开始以 Shell 控管主机。
大概的流程就是上面写的那个样子啦,而每一个程序的内容主要是在干嘛呢?底下就分别来谈一谈吧!
boot loader 与 kernel 载入
由第一篇里面谈到的一些基础的主机硬件概念当中,我们知道整个主机在开机的时候,第一个被读取的地方, 就是 BIOS ( Basic Input Output System ) 啦,这个 BIOS 里面记录了主板的芯片组与相关的设定, 例如 CPU 与接口设备的沟通频率啊、开机装置的搜寻顺序啊、硬盘的大小与类型啊、 系统时间啊、各周边总线的是否启动 Plug and
Play (PnP, 即插即用装置) 啊、 各接口设备的 I/O 地址啊、以及与 CPU 沟通的 IRQ
岔断等等的信息都记录在此, 所以啰,系统要顺利的开机,首先就是要去读取 BIOS 的相关设定值了。
读取了 BIOS 设定值之后,系统会根据 BIOS 的数据,进行开机自我测试 (power on self test, POST),
然后开始执行硬件侦测的初始化,并设定
PnP
装置,之后再定义出可开机的装置, 之后就会开始进行开机装置的数据读取了 (MBR 相关的任务开始)。
读完了 BIOS 并且了解了主要的主机硬件相关信息后,主机便会开始尝试由储存媒体加载操作系统了。 我们刚刚提到 BIOS
会记录『可用来开机的装置搜寻顺序』对吧!所以,系统会开始去第一个开机装置上面进行开机程序。 我们在第二篇的 磁盘文件系统(filesystem) 当中提到过整个储存装置的特性, 如果以硬盘来看,那么开机流程读到硬盘的过程中,第一个要读取的就是该硬盘的主要启动扇区 (Master Boot Record,
MBR) 了,而系统可以由主要开机区所安装的开机管理程序 (boot loader)
开始执行核心辨识的工作。
Tips:
我们知道每颗硬盘的第一个扇区称为 MBR ,那么如果我的主机上面有两颗硬盘的话, 系统会去哪颗硬盘的 MBR 读取数据呢?这个就得要看 BIOS 的设定了。 基本上,我们常常讲的『系统的 MBR』其实指的是 第一个开机装置的
MBR 才对! 所以,改天如果您要将开机管理程序安装到某颗硬盘的 MBR 时, 要特别注意当时系统的『第一个开机装置』是那个,否则会安装到错误的硬盘上面喔!重要重要!
那么为什么要在 MBR 安装 boot loader 呢?而这个 boot loader 有什么功能呢?
还记得我们在第二篇提到的 磁盘文件系统 吧? 我们的操作系统核心必须要认识磁盘文件系统才能读取里面的数据啊, 但是整个系统才刚刚到开机起头的地方而已,要如何认识磁盘文件格式呢? 那就得要藉由 boot loader 来辅助啦!所以啰,当然必须要有 boot loader 才有办法加载 Linux 的核心 (kernel) 啊!由于 boot loader 的特殊功能,因此,想要加载 Linux 核心时, 当然得使用支持 Linux filesystem 的 boot
loader 了,目前主流的 grub 这套开机管理程序, 不但可以支持 Linux ,同时也支持 Windows 相关的核心系统呢!
好了,先再来回忆一下,如果你是以 grub 程序开机的话,那么在开机的时候会显示什么数据呢?呵呵! 会显示蛮多的开机选单,没错~就是『选单』,然后选择了你的选择项目之后, 系统就会跑到该扇区去读取该操作系统的核心啰!呵呵!所以一个好的
boot loader 会具有两个功能,就是:
•
选单功能 (menu)
• 指向功能
(pointer)
再来强调一下,因为 Windows 与 Linux 的文件格式不一样?! 为了加载系统核心,所以必须要安装认识我们操作系统的 loader, 而 Linux 的 loader ( lilo 或 grub )
是可以认识 windows 的核心档案的,但是 Windows 的 loader 却不认识 Linux 的核心档案,因此,作为一个多重引导的设定 loader ,就无法使用 Windows 所提供的 loader
啰!由于需要让系统认识你的 kernel ,因此,就需要 boot loader 啦!这样想就对啦!
好了,当我们藉由 boot loader
的管理而开始读取核心档案后,接下来, Linux 就会将核心解压缩到主存储器当中, 并且利用核心的功能,开始测试与驱动各个周边装置,包括储存装置、CPU、网络卡、声卡等等。 那么核心档案在哪里啊?一般来说,他会被放置到 /boot 里面,
并且取名为 /boot/vmlinuz 才对!
在加载核心的过程当中,我们必须要知道的是,系统只会『挂载根目录』而已,而且是以只读的方式挂载的。
此外,有时为了让某些功能可以用档案的方式来读取,因此,有的系统在开机的时候, 会制作所谓的虚拟硬盘 (RAM Disk) 来辅助的,那就是
initrd 以及 linuxrc 的功用了。 利用 boot loader 的功能,可以在加载核心的时候,一起加载 initrd 的映象檔 (/boot/initrd-xxxx.img), Linux 系统会主动的以 initrd