按下电脑上的电源按钮,片刻之后您就会看到Linux登录提示。
你有没有想过从按下电源按钮到Linux登录提示出现在幕后发生了什么?
以下是典型Linux引导过程的6个高级阶段。
1.BIOS
- BIOS代表基本输入/输出系统
- 执行一些系统完整性检查
- 搜索、加载和执行引导加载程序。
- 它在软盘、CD-ROM或硬盘驱动器中查找引导加载程序。您可以在BIOS启动期间按一个键(通常是F12或F2,但这取决于您的系统)来更改启动顺序。
- 一旦检测到引导加载程序并将其加载到内存中,BIOS就会将控制权交给它。
- 因此,简单来说,BIOS加载并执行MBR引导加载程序。
2.MBR
- MBR代表主引导记录。
- 它位于可引导磁盘的第一个扇区。通常是/dev/hda或/dev/sda
- MBR的大小小于512字节。这包含三个部分:1)第一个446字节目中的主引导加载程序信息2)接下来64字节目中的分区表信息3)最后2字节中的mbr验证检查。
- 它包含有关GRUB(或旧系统中的LILO)的信息。
- 因此,简单来说,MBR加载并执行GRUB引导加载程序。
3.GRUB
- GRUB代表GrandUnifiedBootloader。
- 如果您的系统上安装了多个内核映像,您可以选择执行哪一个。
- GRUB显示一个启动屏幕,等待几秒钟,如果您不输入任何内容,它会加载grub配置文件中指定的默认内核映像。
- GRUB了解文件系统(旧的Linux加载器LILO不了解文件系统)。
- Grub配置文件是/boot/grub/grub.conf(/etc/grub.conf是指向此处的链接)。以下是CentOS的示例grub.conf。
#boot=/dev/sdadefault=0timeout=5splashimage=(hd0,0)/boot/grub/splash.xpm.gzhiddenmenutitleCentOS(2.6.18-194.el5PAE)root(hd0,0)kernel/boot/vmlinuz-2.6.18-194.el5PAEroroot=LABEL=/initrd/boot/initrd-2.6.18-194.el5PAE.img
- 正如您从上述信息中注意到的,它包含内核和initrd映像。
- 因此,简单来说,GRUB只是加载并执行内核和initrd映像。
4.内核
- 挂载grub.conf中“root=”中指定的根文件系统
- 内核执行/sbin/init程序
- 由于init是Linux内核执行的第一个程序,它的进程id(PID)为1。执行'ps-ef|grepinit'并检查pid。
- initrd代表初始RAM磁盘。
- initrd被内核用作临时根文件系统,直到内核启动并挂载真正的根文件系统。它还包含内部编译的必要驱动程序,这有助于它访问硬盘驱动器分区和其他硬件。
5.初始化
- 查看/etc/inittab文件已确定Linux运行级别。
- 以下是可用的运行级别0–h alt1–Singleusermode2–Multiuser,withoutNFS3–Fullmultiusermode4–unused5–X116–reboot
- Init从/etc/inittab中识别默认的initlevel并使用它来加载所有适当的程序。
- 在您的系统上执行“grepinitdefault/etc/inittab”以识别默认运行级别
- 如果你想惹麻烦,你可以将默认运行级别设置为0或6。既然你知道0和6的含义,你可能不会那样做。
- 通常,您会将默认运行级别设置为3或5。
6.运行级程序
- 当Linux系统启动时,您可能会看到各种服务正在启动。例如,它可能会说“开始发送邮件……。好的”。这些是运行级别程序,从运行级别定义的运行级别目录执行。
- 根据您的默认初始化级别设置,系统将从以下目录执行程序。Runlevel0–/etc/rc.d/rc0.d/Runlevel1–/etc/rc.d/rc1.d/Runlevel2–/etc/rc.d/rc2.d/Runlevel3–/etc/rc.d/rc3.d/Runlevel4–/etc/rc.d/rc4.d/Runlevel5–/etc/rc.d/rc5.d/Runlevel6–/etc/rc.d/rc6.d/
- 请注意,在/etc下面这些目录也有可用的符号链接。因此,/etc/rc0.d链接到/etc/rc.d/rc0.d
- 在/etc/rc.d/rc*.d/目录下,您会看到以S和K开头的程序。
- 以S开头的程序在启动时使用。S为启动。
- 以K开头的程序在关机期间使用。K表示杀戮。
- 程序名称中的S和K旁边有数字。这些是应该启动或终止程序的序列号。
- 例如,S12syslog是启动syslog守护进程,序号为12。S80sendmail是启动sendmail守护进程,序号为80。因此,syslog程序将在sendmail之前启动。