📄 0510osloader.htm
字号:
<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"><html><head> <meta http-equiv="Content-Type" content="text/html; "> <meta name="Author" content="VBird"> <meta name="GENERATOR" content="Mozilla/4.5 [zh-TW] (WinNT; I) [Netscape]"> <title>鸟哥的 Linux 私房菜 -- 开机关机流程与 Loader</title><!-- saved from url=(0022)http://internet.e-mail --><style> <!-- body{background-image=url(http://linux.vbird.org/VBirdLinux.jpg);background-ATTACHMENT=FIXED} --></style></head><body nosave="" background="0510osloader_files/VBirdLinux.jpg"><center><center><b><font size="+2" color="#3333ff"><font face="SimSun">鸟哥的</font><font face="Times New Roman,Times"> Linux </font><font face="SimSun">与</font><font face="Times New Roman,Times"> ADSL </font><font face="SimSun">私房菜</font></font></b><br><a href="http://linux.vbird.org/" target="_top"><img src="0510osloader_files/VBirdTitle2.jpg" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_basic"><img src="0510osloader_files/icon_system.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_server"><img src="0510osloader_files/icon_server.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/linux_security"><img src="0510osloader_files/icon_security.jpg" nosave="" border="0" height="25" width="90"></a><a href="http://phorum.vbird.org/" target="_blank"><img src="0510osloader_files/icon_forums.gif" nosave="" border="0" height="25" width="90"></a><a href="http://linux.vbird.org/adsl"><img src="0510osloader_files/icon_adsl.gif" nosave="" border="0" height="25" width="90"></a><br><hr width="100%"></center><font size="+2" color="#3333ff"><a href="http://linux.vbird.org//linux_basic/0510osloader.php" target="_self"><font face="Times New Roman,Times">Linux</font><font face="SimSun">开机流程分析</font></a></font></center><div align="right"><font size="-1" color="#3333ff" face="SimSun">最近更新日期:2003/02/10</font></div><font color="#000099"><font size="+1"><a href="#openling_flow">开机流程分析</a>:</font><a href="#sysconfig_dir">/etc/sysconfig</a></font><br><font size="+1" color="#000099"><a href="#login-runlevel">变换预设的登入模式</a></font><br><font color="#000099"><font size="+1"><a href="#lilo">Lilo</a> :</font><a href="#lilo_file">设定档/etc/lilo.conf</a>, <a href="#lilo_add">以预设的 lilo.conf 新增一个开机档</a>,<a href="#lilo_setup">安装lilo</a> ,<a href="#lilo_faq">一些问题的解决之道</a></font><br><font color="#000099"><font size="+1"><a href="#grub">Grub</a> :</font><a href="#grub_file">设定档/boot/grub/menu.lst</a>, <a href="#grub_install">安装 grub 在系统中</a>,<a href="#grub_manual">开机手动设定选项</a></font><br><font size="+1" color="#000099"><a href="#rescue">可开机磁盘与救援磁盘制作</a></font><br><font size="+1" color="#000099"><a href="#FAQ">本章习题练习</a></font><br><hr width="100%"><a name="openling_flow"></a><font size="+1" color="#000099">开机流程分析</font><blockquote>开机不是只要按一下电源钮而关机只要关掉电源钮就可以了吗?有何大学问?话是这样没错啦,但是由于Linux 是一套多人多任务的操作系统,你难保你在关机时没有人在在线,如果你关机的时候碰巧一大群人在在线工作,那会让当时在在线工作的人马上断线的!那不是害死人了!一些数据可以无价之宝哩!另外,与DOS 环境不同的是, Linux 在执行的时候,虽然你在画面上只会看到黑压压的一片,完全没有任何画面,但其实他是有很多的程序在背景底下执行的,例如邮件程序、浏览器主机程序等,你如果随便关机的话,是很容易伤害硬盘及数据传输的动作的!所以在Linux 下关机可是一门大学问喔<br> <br>既然开机是很严肃的一件事,呵呵,那我们来了解一下整个开机的过程吧!好让大家比较容易发现开机过程里面发生错误的地方,与解决之道!不过,由于开机的过程中,那个Boot Loader 使用的软件可能不一样,例如 Mandrake 9.0 已经同时提供 Lilo 与Grub 这两个开机管理程序,虽然 lilo 与 grub 的启动过程或许有点不太相同,但是他的原理则都是一样的哩!这里我们先介绍较老牌的Lilo 啰! Lilo 是什么?!简单的说,他是 LInux LOader 的缩写,就是 Linux开机时候载入的咚咚就对了!这东西可是控制了你的多重开机的命脉!底下的篇幅会再分别介绍这两套开机管理程序!底下先开始来谈谈Linux 是如何开机的呢?基本的流程为:<ol><li><font color="#000066">加载 BIOS 的硬件信息;</font></li><li><font color="#000066">读取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk等等)开机信息;</font></li><li><font color="#000066">加载 Kernel 的操作系统核心信息;</font></li><li><font color="#000066">Kernel 执行 init 程序并取得 run-level 信息;</font></li><li><font color="#000066">init 执行 /etc/rc.d/rc.sysinit 档案;</font></li><li><font color="#000066">启动核心的外挂式模块 (/etc/modules.conf);</font></li><li><font color="#000066">init 执行 run-level 的各个批次档( Scripts );</font></li><li><font color="#000066">init 执行 /etc/rc.d/rc.local 档案;</font></li><li><font color="#000066">执行 /bin/login 程序;</font></li><li><font color="#000066">登入之后开始以 Shell 控管主机。</font></li></ol>大概的流程就是上面写的那个样子啦,而每一个程序的内容主要是在干嘛呢?底下就分别来谈一谈吧!<ul><li><b><font color="#000066">寻找 BIOS 加载硬件信息:</font></b></li><br>稍微有 PC 硬件经验的人们大概都知道 BIOS ( Basic Input/Output Setup) 的作用!他是第一个被加载计算机的数据!你主机的 CPU 数据、开机顺序、硬盘大小、芯片组工作状态、PnP的开启与否、内存的频率等等等...这都记录在 BIOS 当中!所以啦,开机之后,系统会先去找这个东西;</ul><ul><li><b><font color="#000066">可开机硬盘的 MBR 读取 Kernel loader:</font></b></li><br>再来呢?呵呵!当然就是硬盘的开机数据啰!由于个人计算机的系统在读完 BIOS之后,会先去读取第一个开机硬盘的第一个扇区(就是 master boot record, MBR啰!),还记得这个 MBR 吗?嗄!忘记了?赶紧回到第二篇好好的再复习一遍ㄋㄟ?。而这个扇区主要就是在记录开机的信息!还记得上面提到的Lilo 及 grub 吧?他的纪录就是在这里啰!所以啰,这个时候 Lilo 纪录的信息就会被读出来,系统并依Lilo 的信息去不同的系统开机,这也就是多重开机设定的地方啦。<br> <br>好了,先再来回忆一下,如果你是以 grub 程序开机的话,那么在开机的时候会显示什么数据呢?呵呵!会显示蛮多的开机选单,没错?就是『选单』,然后选择了你的选择项目之后,系统就会跑到该扇区去读取该操作系统的核心啰!呵呵!所以一个好的boot loader 会具有两个功能,就是:<br> <ul><li><font color="#000066">选单功能 ( menu )</font></li><li><font color="#000066">指向功能 ( pointer )</font></li></ul> <br>那么为何要有 loader 呢?我想,我们得先来探讨一下这个话题才行!要探讨之前先来了解一下,晓不晓得Windows 与 Linux 的档案格式一不一样?!呵呵!当然不一样对不对,好了,那么再来说一说,请问,你的计算机怎么知道你的硬盘的数据是什么系统?哈哈!那就是loader 的主要功能啰!在你能使用系统之前,一定需要加载核心对吧!?但是怎样让你的硬件认识核心呢?那就是kernel loader 的主要功能了!所以这里需要提出的是, Linux 的 loader ( lilo或 grub ) 是可以认识 windows 的核心档案的,但是 Windows 的 loader 却不认识Linux 的核心档案,因此,作为一个多重开机的设定 loader ,就无法使用 Windows所提供的 loader 啰!由于需要让系统认识你的 kernel ,因此,就需要 kernelloader 啦!这样想就对啦!<br> <br>这一部份的信息我们在后续的章节会再提及!</ul><ul><li><b><font color="#000066">载入核心( Kernel ):</font></b></li><br>好了,等我们在 grub 的选单中选择了 Linux 这个系统,然后主机跑到 Linux所在的硬盘之下,就开始将他的核心载入啰。在 Linux 的系统下,通常开机的核心都摆在/boot 底下,因此,这个时候的 boot loader 就会到 /boot 去寻找相关的核心。我们的kernel 名称通常就是 /boot/vmlinuz-xxxx 的格式,目前 Mandrake 9.0 的核心版本为2.4.19,而 Mandrake 自行释出的版本为 2.4.19-16mdk ,所以,使用 uname –r会出现 2.4.19-16mdk 呦!然后 MDK 9.0 预设核心档案就是: /boot/vmlinuz-2.4.19-16mdk这一个!好了,载入这个档案再往下继续吧!</ul><ul><li><b><font color="#000066">核心执行 init 并由 /etc/inittab 取得系统登入状态:</font></b></li><br>核心加载之后,由核心执行的第一个程序就是 /sbin/init 啰!而这个程序第一个目标当然就是确定主机是要以怎样的情况登入!这个时候就必须要以/sbin/init 来加载 /etc/inittab 的信息啦!而 Linux 共有几种登入模式呢?嗯!这里似乎有需要说明一下Linux 有哪些登入的状态!如果你进入 Linux 的 /etc/inittab 档案的话( 可以使用vi 啦 ),你应该会看到如下的信息:<br> <table bgcolor="#000000" border="1" cols="1" width="650"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[root @test/root]# </font><font color="#ffff00">vi /etc/inittab</font></font><br><font size="-1" color="#ffffff" face="SimSun">#  0 - halt (Do NOT set initdefault to this)  关机 </font><br><font size="-1" color="#ffffff" face="SimSun">#  1 - Single user mode  单人使用(系统有问题时候的登入状况) </font><br><font size="-1" color="#ffffff" face="SimSun">#  2 - Multiuser, without NFS (The same as 3, if you do not have networking)多人但无网络 </font><br><font size="-1" color="#ffffff" face="SimSun">#  3 - Full multiuser mode 文字界面登入的多人系统 </font><br><font size="-1" color="#ffffff" face="SimSun">#  4 - unused      系统保留 </font><br><font size="-1" color="#ffffff" face="SimSun">#  5 - X11           X-Windows图形界面登入的多人系统 </font><br><font size="-1" color="#ffffff" face="SimSun">#  6 - reboot (Do NOT set initdefault to this)  重新开机 </font><br><font size="-1" color="#ffffff" face="SimSun"># </font><br><font size="-1" color="#ffff00" face="SimSun">id:3:initdefault:</font></td></tr></tbody></table> <br>上面显示的就是目前可以登入的状态了(就是 run-level 啦!),共有 0?6的登入状态,其中,我们比较常使用的是 3 与 5 , 因为我们需要 Linux 是多人多任务的情况,而较常登入的状态就是文字与图形界面啦!所以这里需要设定成3 或者是 5 ,千万不要设定成 0 或者是 6 喔!不然系统会一直直接重新开机或者是直接关机....预设的系统登入在上面这个表格的最底下一行纪录着!就是『id:3:initdefault』那一行!注意喔!因为 VBird 预设是以文字界面来登入,所以才会是 3 ,如果你要改成图形界面登入的话(请确定你的X-windows 没有问题),那么就将 /etc/inittab 里面的上面那一行,将 3 改成5 即可啰!<br> <br>那么什么是『<font color="#000066">单人维护模式 ( run-level 为 1 )</font>』?如果你有玩过Windows 的话,那么你在开机的时候如果按下 F8 时,不是会出现一些什么『安全模式』啦、『正常开机』啦或『MS-DOS 模式』等等的进入 Windows 的状态吗?尤其是当你不正常关机的时候,Windows 预设就会以『安全模式』来启动 Windows 啰!Windows 的『安全模式』几乎不加载一些复杂的模块,让你的Windows 一定可以开机成功!那么 Linux 的维护模式状态即是使用单人模式( 就是run_level 为 1 啦!)所以说, Linux 的登入情况是如何呢?呵呵!没错,就是在这里载入的啦!</ul><ul><li><b><font color="#000066">init 的第一个执行内容 /etc/rc.d/rc.sysinit :</font></b></li><br>确定了登入状态之后,再来当然就是需要将主机的信息给他读进去 Linux 系统啰!而Linux 系统的第一个数据内容就是 /etc/rc.d/rc.sysinit 这个档案啦!如果你有空进入这个档案去看看的话,会发现这个档案的内容包括了==>设定预设路径(PATH )、设定主机名称、执行 /etc/sysconfig/network 所记录的网络信息、挂载/proc 这个保存在内存当中的主机基本讯息、以及其它几个 Linux 操作系统最基本的几个信息!大抵来说,他的基本工作是:<br> <ol><li><font color="#000066">设定预设路径</font>:( PATH  )</li><li><font color="#000066">设定网络状态</font>:系统会再去读取 /etc/sysconfig/network,并将该档案内的数据,如NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV 等等的设定读入系统中。</li><li><font color="#000066">启动系统的置换空间</font>(简单的可以想成是虚拟内存):swapping</li><li><font color="#000066">检查档案系统</font>:这个时候系统会去检查一些可能会存在的目录,例如/fsckoptions 与 /forcfsck 及 /fastboot 等等的目录,当你的系统有不正常关机的现象时(例如突然的断电等等),那么Linux 将会自动的强制去检查 root 的档案系统 ( checking root filesystems)。简单的想一想,就好像是 Windows 系统下,当你不正常关机时,在开机的过程中就会出现扫瞄硬盘的情况相同啦!</li>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -