北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>

                鸟哥的 Linux 私房菜
                Linux 根底篇 | Linux 效劳器篇 | Linux 企业使用篇 | 平安办理
                     
                 
                第二十章、开机流程、模组办理与 Loader
                近来更新日期:2009/09/14
                零碎开机实在是一项十分庞大的顺序,由于中心得要探测硬体并载入得当的驱动顺序后, 接上去则必需要呼唤顺序来预备好零碎运作的情况,以让运用者可以顺遂的操纵整部主机零碎。 假如你可以了解开机的原理,那么将有助于你在零碎出题目时可以很疾速的修复零碎喔! 并且还可以顺遂的设置装备摆设多重作业零碎的多重开机题目。为了多重开机的题目,你就不克不及不学学 grub 这个 Linux 底下良好的开机办理顺序 (boot loader)。 而在零碎运作时期,你也得要学会办理中心模组呢!

                1. Linux 的开机流程剖析
                  1.1 开机流程一览
                  1.2 BIOS, boot loader 与 kernel 载入
                  1.3 第一支顺序 init 及设定档 /etc/inittab 与 runlevel
                  1.4 init 处置零碎初始化流程 (/etc/rc.d/rc.sysinit)
                  1.5 启动零碎效劳与相干启动设定档 (/etc/rc.d/rc N & /etc/sysconfig)
                  1.6 运用者自订开机启动顺序 (/etc/rc.d/rc.local)
                  1.7 依据 /etc/inittab 之设定,载入终端机或 X-Window 介面
                  1.8 开机进程会用到的次要设定档: /etc/modprobe.conf, /etc/sysconfig/*
                  1.9 Run level 的切换runlevel, 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 的两个 stage
                  3.2 grub 的设定档 /boot/grub/menu.lst 与选单范例磁碟代号, menu.lst
                  3.3 initrd 的紧张性与树立新 initrd 文件mkinitrd
                  3.4 测试与装置 grubgrub-install, grub shell
                  3.5 开机前的额定功用修正
                  3.6 关于中心功用当中的 vga 设定
                  3.7 BIOS 无法读取大硬碟的题目
                  3.8 为一般选单加上暗码grub-md5-crypt
                4. 开机进程的题目处理
                  4.1 遗忘 root 暗码的处理之道
                  4.2 init 设定档错误
                  4.3 BIOS 磁碟对应的题目 (device.map)
                  4.4 因文件零碎错误而无法开机
                  4.5 应用 chroot 切换到另一颗硬碟任务
                5. 重点回忆
                6. 本章习题
                7. 参考材料与延伸阅读
                8. 针对本文的发起:http://phorum.vbird.org/viewtopic.php?t=23891

                大标题的图示Linux 的开机流程剖析

                开机不是只需按一下电源钮而关机只需关失电源钮就可以了吗?有何大学问?话是如许没错啦,但是由于 Linux 是一套多人多工的作业零碎,你难保你在关机时没有人在线上,假如你关机的时分可巧一大群人在线上任务, 那会让事先在线上任务的人立刻断线的!那不是害去世人了!一些材料但是价值连城哩!

                别的 Linux 在实行的时分,固然你在画面上只会看到黑漆漆的一片,完全没有任何画面, 但实在他是有许多的顺序在配景底下实行的,比方登录档管控顺序、后面提到的例行性任务排程等, 固然另有一大堆网络效劳,如邮件效劳器、WWW 效劳器等等。你假如随意关机的话, 是很容易损伤硬碟及材料传输的举措的!以是在 Linux 下关机但是一门大学问喔。


                小标题的图示开机流程一览

                既然开机是很严峻的一件事,那我们就来理解一下整个开机的进程吧! 好让各人比拟容易发明开机进程外面能够会发作题目的中央,以及呈现题目后的处理之道! 不外,由于开机的进程中,谁人开机办理顺序 (Boot Loader) 运用的软件能够纷歧样,比方现在各大 Linux distributions 的主流为 grub,但晚期 Linux 预设是运用 LILO ,台湾地域则许多冤家喜好运用 spfdisk 。 但无论怎样,我们总是得要理解整个 boot loader 的任务状况,才干理解为何停止多重开机的设定时, 总是听人家讲要先装置 Windows 再装置 Linux 的缘由~

                假定以团体电脑搭建的 Linux 主机为例 (先回到第零章盘算机概论看看相干的硬体知识喔), 当你按下电源按键后电脑硬领会自动的读取 BIOS 来载入硬体资讯及停止硬体零碎的自我测试, 之后零碎会自动的去读取第一个可开机的安装 (由 BIOS 设定的) ,此时就可以读入开机办理顺序了。

                开机办理顺序可以指定运用哪个中心文件来开机,并实践载入中心到影象体当中解紧缩与实行, 此时中心就可以开端在影象体内运动,并探测一切硬体资讯与载入得当的驱动顺序来使整部主机开端运作, 比及中心探测硬体与载入驱动顺序终了后,一个最阳春的作业零碎就开端在你的 PC 下面跑了

                主机零碎开端运作后,此时 Linux 才会呼唤内部顺序开端预备软件实行的情况, 而且实践的载入一切零碎运作所需求的软件顺序哩!最初零碎就会开端等候你的登入与操纵啦! 复杂来说,零碎开机的颠末可以汇整成底下的流程的:

                1. 载入 BIOS 的硬体资讯与停止自我测试,并根据设定获得第一个可开机的安装;
                2. 读取并实行第一个开机安装内 MBR 的 boot Loader (亦便是 grub, spfdisk 等顺序);
                3. 根据 boot loader 的设定载入 Kernel ,Kernel 会开端探测硬体与载入驱动顺序;
                4. 在硬体驱动乐成后,Kernel 会自动呼唤 init 顺序,而 init 会获得 run-level 资讯;
                5. init 实行 /etc/rc.d/rc.sysinit 文件来预备软件实行的作业情况 (如网络、时区等);
                6. init 实行 run-level 的各个效劳之启动 (script 方法);
                7. init 实行 /etc/rc.d/rc.local 文件;
                8. init 实行终端机模仿顺序 mingetty 来启动 login 顺序,最初就等候运用者登入啦;

                大约的流程便是下面写的谁人样子啦,你会发明 init 这个家伙占的比重十分重! 以是我们才会在第十七章的 pstree 指令中谈到这家伙。 那每一个顺序的内容次要是在干嘛呢?底下就辨别来谈一谈吧!


                小标题的图示BIOS, boot loader 与 kernel 载入

                我们在第三章已经谈过复杂的开机流程与 MBR 的功用, 事先为了多重开机而停止的冗长的引见。如今你曾经有充足的 Linux 根底了,以是底下让我们来增强阐明啦!


                • BIOS, 开机自我测试与 MBR

                我们在第零章的盘算机概论就曾谈过电脑主机架构, 在团体电脑架构下,你想要启动整部零碎起首就得要让零碎去载入 BIOS (Basic Input Output System),并透过 BIOS 顺序去载入 CMOS 的资讯,而且藉由 CMOS 内的设定值获得主机的各项硬体设定, 比方 CPU 与周边设置装备摆设的相同时脉啊、开机安装的搜索次序啊、硬碟的巨细与范例啊、 零碎工夫啊、各周边汇流排的能否启动 Plug and Play (PnP, 随插即用安装) 啊、 各周边设置装备摆设的 I/O 位址啊、以及与 CPU 相同的 IRQ 岔断等等的资讯。

                在获得这些资讯后,BIOS 还会停止开机自我测试 (Power-on Self Test, POST) (注1)。 然后开端实行硬体探测的初始化,并设定 PnP 安装,之后再界说出可开机的安装次序, 接上去就会开端停止开机安装的材料读取了 (MBR 相干的义务开端)。

                由于我们的零碎软件大多安排到硬碟中嘛!以是 BIOS 会指定开机的安装好让我们可以读取磁碟中的作业零碎中心文件。 但由于差别的作业零碎他的文件零碎款式不相反,因而我们必需要以一个开机办理顺序来处置中心文件载入 (load) 的题目, 因而这个开机办理顺序就被称为 Boot Loader 了。那这个 Boot Loader 顺序装置在那边呢?就在开机安装的第一个磁区 (sector) 内,也便是我们不断谈到的 MBR (Master Boot Record, 次要开机记载区)

                那你会不会以为很奇异啊?既然中心文件需求 loader 来读取,那每个作业零碎的 loader 都不相反, 如许的话 BIOS 又是怎样读取 MBR 内的 loader 呢?很风趣的题目吧!实在 BIOS 是透过硬体的 INT 13 中缀功用来读取 MBR 的,也便是说,只需 BIOS 可以探测的到你的磁碟 (不管该磁碟是 SATA 照旧 IDE 介面),那他就有方法透过 INT 13 这条通道来读取该磁碟的第一个磁区内的 MBR 啦!(注2) 如许 boot loader 也就可以被实行啰!

                Tips:
                我们晓得每颗硬碟的第一个磁区内含有 446 bytes的 MBR 地区,那么假如我的主机下面有两颗硬碟的话, 零碎会去哪颗硬碟的 MBR 读取 boot loader 呢?这个就得要看 BIOS 的设定了。 根本上,我们经常讲的‘零碎的 MBR’实在指的是 第一个开机安装的 MBR 才对! 以是,改天假如你要将开机办理顺序装置到某颗硬碟的 MBR 时, 要特殊留意事先零碎的‘第一个开机安装’是哪个,不然会装置到错误的硬碟下面的 MBR 喔!紧张紧张!
                鸟哥的图示

                • Boot Loader 的功用

                方才说到 Loader 的最次要功用是要看法作业零碎的文件款式并据以载入中心到主影象体中去实行。 由于差别作业零碎的文件款式纷歧致,因而每种作业零碎都有本人的 boot loader 啦!用本人的 loader 才有方法载入中心文件嘛!那题目就来啦,你应该有听说过多重作业零碎吧?也便是在一台主机下面装置多种差别的作业零碎。 既然你 (1)必需要运用本人的 loader 才干够载入属于本人的作业零碎中心,而 (2)零碎的 MBR 只要一个,那你怎样会有方法同时在一台主机下面装置 Windows 与 Linux 呢?

                这就得要回到第八章的磁碟文件零碎去回想一下文件零碎功用了。 实在每个文件零碎 (filesystem, 或许是 partition) 都市保存一块开机磁区 (boot sector) 提供作业零碎装置 boot loader , 而通常作业零碎预设都市装置一份 loader 到他根目次地点的文件零碎的 boot sector 上。假如我们在一台主机下面装置 Windows 与 Linux 后,该 boot sector, boot loader 与 MBR 的相干性会有点像下图:

                boot loader 装置在 MBR, boot sector 与作业零碎的干系
                图 1.2.1、 boot loader 装置在 MBR, boot sector 与作业零碎的干系

                如上图所示,每个作业零碎预设是会装置一套 boot loader 到他本人的文件零碎中 (便是每个 filesystem 左下角的方框),而在 Linux 零碎装置时,你可以选择将 boot loader 装置到 MBR 去,也可以选择不装置。 假如选择装置到 MBR 的话,那实际上你在 MBR 与 boot sector 都市保有一份 boot loader 顺序的。 至于 Windows 装置时,他预设会自动的将 MBR 与 boot sector 都装上一份 boot loader!以是啦, 你会发明装置多重作业零碎时,你的 MBR 经常会被差别的作业零碎的 boot loader 所掩盖啦! ^_^

                我们方才提到的两个题目照旧没有处理啊!固然各个作业零碎都可以装置一份 boot loader 到他们的 boot sector 中, 如许作业零碎可以透过本人的 boot loader 来载入中心了。题目是零碎的 MBR 只要一个哩! 你要怎样实行 boot sector 外面的 loader 啊?这个我们得要回想一下第三章大抵提过的 boot loader 的功用了。boot loader 次要的功用如下:

                • 提供选单:运用者可以选择差别的开机项目,这也是多重开机的紧张功用!
                • 载入中心文件:间接指向可开机的顺序区段来开端作业零碎;
                • 转交其他 loader:将开机办理功用转交给其他 loader 担任。

                由于具有选单功用,因而我们可以选择差别的中心来开机。而由于具有控制权转交的功用,因而我们可以载入其他 boot sector 内的 loader 啦!不外 Windows 的 loader 预设不具有控制权转交的功用,因而你不克不及运用 Windows 的 loader 来载入 Linux 的 loader 喔!这也是为啥第三章谈到 MBR 与多重开机时,会特殊夸大先装 Windows 再装 Linux 的缘故。 我们将上述的三个功用以底下的图示来表明你就看的懂了!(与第三章的图示也十分相似啦!)

                开机办理顺序的选单功用与控制权转交功用表示图
                图 1.2.2、 开机办理顺序的选单功用与控制权转交功用表示图

                如上图所示,我的 MBR 运用 Linux 的 grub 这个开机办理顺序,而且外面假定曾经有了三个选单, 第一个选单可以间接指向 Linux 的中心文件而且间接载入中心来开机;第二个选单可以将开机办理顺序控制权交给 Windows 来办理,此时 Windows 的 loader 会接收开机流程,这个时分他就可以启动 windows 了。第三个选单则是运用 Linux 在 boot sector 内的开机办理顺序,此时就会跳出另一个 grub 的选单啦!理解了吗?

                而终极 boot loader 的功用便是‘载入 kernel 文件’啦!


                • 载入中心探测硬体与 initrd 的功用

                当我们藉由 boot loader 的办理而开端读取中心文件后,接上去, Linux 就会将中心解紧缩到主影象体当中, 而且应用中心的功用,开端测试与驱动各个周边安装,包罗贮存安装、CPU、网络卡、音效卡等等。 此时 Linux 中心会以本人的功用重新探测一次硬体,而纷歧定会运用 BIOS 探测到的硬体资讯喔!也便是说,中心此时才开端接收 BIOS 后的任务了。 那么中心文件在那边啊?普通来说,他会被安排到 /boot 外面,而且取名为 /boot/vmlinuz 才对!

                [root@www ~]# ls --format=single-column -F /boot
                config-2.6.18-92.el5      <==此版本中心被编译时选择的功用与模组设定档
                grub/                     <==便是开机办理顺序 grub 相干材料目次
                initrd-2.6.18-92.el5.img  <==假造文件零碎档!
                System.map-2.6.18-92.el5  <==中心功用安排到影象体位址的对应表
                vmlinuz-2.6.18-92.el5     <==便是中心文件啦!最紧张者!
                

                从上表我们也可以晓得此版本的 Linux 中心为 2.6.18-92.el5 这个版本!为了硬体开辟商与其他中心功用开辟者的便当, 因而 Linux 中心是可以透过静态载入中心模组的 (就请想成驱动顺序即可),这些中心模组就安排在 /lib/modules/ 目次内。 由于模组安排到磁碟根目次内 (要记得 /lib 不行以与 / 辨别放在差别的 partition !), 因而在开机的进程中中心必需要挂载根目次,如许才干够读取中心模组提供载入驱动顺序的功用。 并且为了担忧影响到磁碟内的文件零碎,因而开机进程中根目次因此唯读的方法来挂载的喔。

                普通来说,非须要的功用且可以编译成为模组的中心功用,现在的 Linux distributions 都市将他编译成为模组。 因而 USB, SATA, SCSI... 等磁碟安装的驱动顺序通常都因此模组的方法来存在的。 如今来考虑一种状况,假定你的 linux 是装置在 SATA 磁碟下面的,你可以透过 BIOS 的 INT 13 获得 boot loader 与 kernel 文件来开机,然后 kernel 会开端接收零碎而且探测硬体及实验挂载根目次来获得额定的驱动顺序。

                题目是,中心基本不看法 SATA 磁碟,以是需求载入 SATA 磁碟的驱动顺序, 不然基本就无法挂载根目次。但是 SATA 的驱动顺序在 /lib/modules 内,你基本无法挂载根目次又怎样读取到 /lib/modules/ 内的驱动顺序?是吧!十分的两难吧!在这个状况之下,你的 Linux 是无法顺遂开机的! 那怎办?不要紧,我们可以透过假造文件零碎来处置这个题目。

                假造文件零碎 (Initial RAM Disk) 普通运用的档名为 /boot/initrd ,这个文件的特征是,他也可以透过 boot loader 来载入到影象体中, 然后这个文件会被解紧缩而且在影象体当中模仿成一个根目次, 且此模仿在影象体当中的文件零碎可以提供一支可实行的顺序,透过该顺序来载入开机进程中所最需求的中心模组, 通常这些模组便是 USB, RAID, LVM, SCSI 等文件零碎与磁碟介面的驱动顺序啦!等载入完成后, 会协助中心重新呼唤 /sbin/init 来开端后续的正常开机流程。

                BIOS 与 boot loader 及中心载入流程表示图
                图 1.2.3、 BIOS 与 boot loader 及中心载入流程表示图

                如上图所示,boot loader 可以载入 kernel 与 initrd ,然后在影象体中让 initrd 解紧缩成为根目次, kernel 就可以藉此载入得当的驱动顺序,终极开释假造文件零碎,并挂载实践的根目次文件零碎, 就可以开端后续的正常开机流程。更细致的 initrd 阐明,你可以自利用用 man initrd 去查阅看看。 底下让我们来理解一下 CentOS 5.x 的 initrd 文件内容有什么吧! ^_^

                # 1. 先将 /boot/initrd 复制到 /tmp/initrd 目次中,等候解紧缩:
                [root@www ~]# mkdir /tmp/initrd
                [root@www ~]# cp /boot/initrd-2.6.18-92.el5.img /tmp/initrd/
                [root@www ~]# cd /tmp/initrd
                [root@www initrd]# file initrd-2.6.18-92.el5.img
                initrd-2.6.18-92.el5.img: gzip compressed data, ...
                # 原来是 gzip 的紧缩档!由于是 gzip ,以是副档名给他改成 .gz 吧!
                
                # 2. 将上述的文件解紧缩:
                [root@www initrd]# mv initrd-2.6.18-92.el5.img initrd-2.6.18-92.el5.gz
                [root@www initrd]# gzip -d initrd-2.6.18-92.el5.gz
                [root@www initrd]# file initrd-2.6.18-92.el5
                initrd-2.6.18-92.el5: ASCII cpio archive (SVR4 with no CRC)
                # 搞了老半天,原来照旧 cpio 的指令紧缩成的文件啊!解紧缩看看!
                
                # 3. 用 cpio 解紧缩
                [root@www initrd]# cpio -ivcdu < initrd-2.6.18-92.el5
                [root@www initrd]# ll
                drwx------ 2 root root    4096 Apr 10 02:05 bin
                drwx------ 3 root root    4096 Apr 10 02:05 dev
                drwx------ 2 root root    4096 Apr 10 02:05 etc
                -rwx------ 1 root root    1888 Apr 10 02:05 init
                -rw------- 1 root root 5408768 Apr 10 02:00 initrd-2.6.18-92.el5
                drwx------ 3 root root    4096 Apr 10 02:05 lib
                drwx------ 2 root root    4096 Apr 10 02:05 proc
                lrwxrwxrwx 1 root root       3 Apr 10 02:05 sbin -> bin
                drwx------ 2 root root    4096 Apr 10 02:05 sys
                drwx------ 2 root root    4096 Apr 10 02:05 sysroot
                # 看!能否很像根目次!尤其也是有 init 这个实行档!务必看一下权限!
                # 接上去看看 init 这个文件内有啥咚咚?
                
                # 4. 察看 init 文件内较紧张的实行项目
                [root@www initrd]# cat init
                #!/bin/nash                  <==运用相似 bash 的 shell 来实行
                mount -t proc /proc /proc    <==挂载影象体的假造文件零碎
                ....(两头省略)....
                echo Creating initial device nodes
                mknod /dev/null c 1 3        <==树立零碎所需求的各项安装!
                ....(两头省略)....
                echo "Loading ehci-hcd.ko module"
                insmod /lib/ehci-hcd.ko      <==载入各项中心模组,便是驱动顺序!
                ....(两头省略)....
                echo Creating root device.
                mkrootdev -t ext3 -o defaults,ro hdc2 <==实验挂载根目次啦!
                ....(底下省略)....
                

                嘿嘿!透过上述实行档的内容,我们可以晓得 initrd 有载入模组而且实验挂载了假造文件零碎。 接上去就可以顺遂的运作啦!那么能否肯定需求 initrd 呢?

                例题:
                能否没有 initrd 就无法顺遂开机?
                答:
                不见得的!需求 initrd 最紧张的缘由是,当开机时无法挂载根目次的状况下, 此时就肯定需求 initrd ,比方你的根目次在特别的磁碟介面 (USB, SATA, SCSI) , 或许是你的文件零碎较为特别 (LVM, RAID) 等等,才会需求 initrd。

                假如你的 Linux 是装置在 IDE 介面的磁碟上,而且运用预设的 ext2/ext3 文件零碎, 那么不需求 initrd 也可以顺遂的开机进入 Linux 的!

                在中心完好的载入后,您的主机应该就开端准确的运作了,接上去,便是要开端实行零碎的第一支顺序: /sbin/init。


                小标题的图示第一支顺序 init 及设定档 /etc/inittab 与 runlevel

                在中心载入终了、停止完硬体探测与驱动顺序载入后,此时你的主机硬体应该曾经预备停当了 (ready) , 此时中心会自动的呼唤第一支顺序,那便是 /sbin/init 啰。这也是为啥第十七章的 pstree 指令引见时,你会发明 init 的 PID 号码是一号啦。 /sbin/init 最次要的功用便是预备软件实行的情况,包罗零碎的主机称号、网络设定、语系处置、文件零碎款式及其他效劳的启动等。 而一切的举措都市透过 init 的设定档,亦便是 /etc/inittab 来计划,而 inittab 内另有一个很紧张的设定项目,那便是预设的 runlevel (开机实行品级) 啦!


                • Run level:实行品级有哪些?

                那么什么是 run level 呢?他有什么服从啊?实在很复杂啦, Linux 便是藉由设定 run level 来规则零碎运用差别的效劳来启动,让 Linux 的运用情况差别。根本上,根据有无网络与有无 X Window 而将 run level 分为 7 个品级,辨别是:

                • 0 - halt (零碎间接关机)
                • 1 - single user mode (单人维护形式,用在零碎出题目时的维护)
                • 2 - Multi-user, without NFS (相似底下的 runlevel 3,但无 NFS 效劳)
                • 3 - Full multi-user mode (完好含有网络功用的纯笔墨形式)
                • 4 - unused (零碎保存功用)
                • 5 - X11 (与 runlevel 3 相似,但加载运用 X Window)
                • 6 - reboot (重新开机)

                由于 run level 0, 4, 6 不是关机、重新开机便是零碎保存的,以是:‘ 您固然不克不及将预设的 run level 设定为这三个值 ’, 不然零碎就会不时的主动关机或主动重新开机.... 好了,那么我们开机时,究竟是怎样获得零碎的 run level 的?固然是 /etc/inittab 所设定的啰! 那么 /etc/inittab 究竟有什么资讯呢?我们先来看看这个文件的内容好了:


                • /etc/inittab 的内容与语法
                [root@www ~]# vim /etc/inittab
                id:5:initdefault:                 <==预设的 runlevel 设定, 此 runlevel 为 5 
                
                si::sysinit:/etc/rc.d/rc.sysinit  <==预备零碎软件实行的情况的剧本实行档
                
                # 7 个差别 run level 的,需求启动的效劳的 scripts 安排途径:
                l0:0:wait:/etc/rc.d/rc 0    <==runlevel 0 在 /etc/rc.d/rc0.d/
                l1:1:wait:/etc/rc.d/rc 1    <==runlevel 1 在 /etc/rc.d/rc1.d/
                l2:2:wait:/etc/rc.d/rc 2    <==runlevel 2 在 /etc/rc.d/rc2.d/
                l3:3:wait:/etc/rc.d/rc 3    <==runlevel 3 在 /etc/rc.d/rc3.d/
                l4:4:wait:/etc/rc.d/rc 4    <==runlevel 4 在 /etc/rc.d/rc4.d/
                l5:5:wait:/etc/rc.d/rc 5    <==runlevel 5 在 /etc/rc.d/rc5.d/
                l6:6:wait:/etc/rc.d/rc 6    <==runlevel 6 在 /etc/rc.d/rc6.d/
                
                # 能否容许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目:
                ca::ctrlaltdel:/sbin/shutdown -t3 -r now
                
                # 底下两个设定章是关于不时电零碎的 (UPS),一个是没电力时的关机,一个是来电的处置
                pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
                pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
                
                1:2345:respawn:/sbin/mingetty tty1  <==实在 tty1~tty6 是由底下这六行决议的。
                2:2345:respawn:/sbin/mingetty tty2
                3:2345:respawn:/sbin/mingetty tty3
                4:2345:respawn:/sbin/mingetty tty4
                5:2345:respawn:/sbin/mingetty tty5
                6:2345:respawn:/sbin/mingetty tty6
                
                x:5:respawn:/etc/X11/prefdm -nodaemon <==X window 则是这行决议的!
                

                让我们剖析一下这个文件吧!起首,这个文件的语法是应用冒号 (:) 将设定分开成为四个栏位,每个栏位的意义与阐明如下:

                [设定项目]:[run level]:[init 的举措举动]:[指令项目]
                
                1. 设定项目:最多四个字元,代表 init 的次要任务项目,只是一个复杂的代表阐明。

                2. run level:该项目在哪些 run level 底下停止的意思。假如是 35 则代表 runlevel 3 与 5 都市实行。

                3. init 的举措项目:次要可以停止的举措项目意义有:
                  inittab 设定值意义阐明
                  initdefault代表预设的 run level 设定值
                  sysinit代表零碎初始化的举措项目
                  ctrlaltdel代表 [ctrl]+[alt]+[del] 三个按键能否可以重新开机的设定
                  wait代表前面栏位设定的指令项目必需要实行终了才干持续底下其他的举措
                  respawn代表前面栏位的指令可以有限制的再生 (重新启动)。举例来说, tty1 的 mingetty 发生的可登入画面, 在你登出而完毕后,零碎会再开一个新的可登入画面等候下一个登入。
                  更多的设定项目请参考 man inittab 的阐明。

                4. 指令项目:亦即应该可以停止的指令,通常是一些 script 啰。


                • init 的处置流程

                现实上 /etc/inittab 的设定也有点相似 shell script 啦,由于该文件内容的设定也是一行一行的从上往下处置的, 因而我们可以晓得 CentOS 的 init 根据 inittab 设定的处置流程会是:

                1. 先获得 runlevel 亦即预设实行品级的相干品级 (以鸟哥的测试机为例,为 5 号);
                2. 运用 /etc/rc.d/rc.sysinit 停止零碎初始化
                3. 由于 runlevel 是 5 ,因而只停止‘l5:5:wait:/etc/rc.d/rc 5’,其他行则略过
                4. 设定好 [ctrl]+[alt]+[del] 这组的组合键功用
                5. 设定不时电零碎的 pf, pr 两种机制;
                6. 启动 mingetty 的六个终端机 (tty1 ~ tty6)
                7. 终极以 /etc/X11/perfdm -nodaemon 启动图形介面啦!

                如今你可以晓得为啥 [ctrl]+[alt]+[del] 可以重新开机而我们预设提供 6 个假造终端机 (tty1~tty6) 给你运用了吧!由于整个设建都是根据 /etc/inittab 来决议的,因而假如你想要修正任何细节的话, 可以如许做喔:

                • 假如不想让运用者应用 [crtl]+[alt]+[del] 来重新启动零碎,可以将‘ ca::ctrlaltdel:/sbin/shutdown -t3 -r now ’加上表明 (#) 来取消该设定

                • 规则开机的预设 run level 是纯笔墨的 3 号或许是具有图形介面的 5 号 ,可经过 ‘ id:5:initdefault: ’谁人数字来决议! 以鸟哥本人这个文件为例,我是运用预设的图形介面。假如你想要封闭图形介面的话,将该行 5 改成 3 即可。

                • 假如不想要启动六个终端机 (tty1~tty6),那么可以将‘ 6:2345:respawn:/sbin/mingetty tty6’封闭数个。但务必至多启动一个喔!

                以是说,你如今会自行修正登入时的预设 run level 设定值了吗?够复杂的吧? 普通来说,我们预设都是 3 或许是 5 来作为预设的 run level 的。但偶然后能够需求进入 run level 1, 也便是单人维护形式的情况当中。这个 run level 1 有点像是 Windows 零碎当中的‘平安形式’啦, 专门用来处置当零碎有题目时的操纵情况。别的,当零碎发明有题目时,举例来说,不正常关机形成 filesystem 的纷歧致景象时,零碎会自动的进入单人维护形式呢!

                好了, init 在获得 run level 之后,接上去要干嘛? 下面 /etc/inittab 文件内容不是有提到 sysinit 吗?预备初始化零碎了吧!


                小标题的图示init 处置零碎初始化流程 (/etc/rc.d/rc.sysinit)

                还记得下面提到 /etc/inittab 外头有这一句‘ si::sysinit:/etc/rc.d/rc.sysinit ’吧? 这表现:‘我开端载入各项零碎效劳之前,得先做好整个零碎情况,我次要应用 /etc/rc.d/rc.sysinit 这个 shell script 来设定好我的零碎情况的。’够清晰了吧? 以是,我想要晓得究竟 CentOS 开机的进程当中帮我停止了什么举措,就得要细心的剖析 /etc/rc.d/rc.sysinit 啰。

                Tips:
                诚实说,这个文件的档名在各差别的 distributions 当中都不相反, 比方 SuSE server 9 就运用 /etc/init.d/boot 与 /etc/init.d/rc 来停止的。 以是,你最好照旧自行到 /etc/inittab 去观察一下零碎的任务喔! ^_^
                鸟哥的图示

                假如你运用 vim 去查阅过 /etc/rc.d/rc.sysinit 的话,那么可以发明他次要的任务大致有这几项:

                1. 获得网络情况与主机范例:
                  读取网络设定档 /etc/sysconfig/network ,获得主机称号与预设通讯闸 (gateway) 等网络情况。
                2. 测试与挂载影象体安装 /proc 及 USB 安装 /sys:
                  除挂载影象体安装 /proc 之外,还会自动探测零碎上能否具有 usb 的安装, 如有则会自动载入 usb 的驱动顺序,而且实验挂载 usb 的文件零碎。
                3. 决议能否启动 SELinux :
                  我们在第十七章谈到的 SELinux 在此时停止一些检测, 而且检测能否需求帮一切的文件重新编写规范的 SELinux 范例 (auto relabel)。
                4. 启动零碎的乱数发生器
                  乱数发生器可以协助零碎停止一些暗码加密演算的功用,在此需求启动两次乱数发生器。
                5. 设定终端机 (console) 字形:
                6. 设定表现于开机进程中的欢送画面 (text banner);
                7. 设定零碎工夫 (clock) 与时区设定:需读入 /etc/sysconfig/clock 设定值
                8. 周边设置装备摆设的探测与 Plug and Play (PnP) 参数的测试:
                  依据中心在开机时探测的后果 (/proc/sys/kernel/modprobe ) 开端停止 ide / scsi / 网络 / 音效 等周边设置装备摆设的探测,以及应用以载入的中心模组停止 PnP 安装的参数测试。
                9. 运用者自订模组的载入
                  运用者可以在 /etc/sysconfig/modules/*.modules 参加自订的模组,则此时会被载入到零碎当中
                10. 载入中心的相干设定:
                  零碎会自动去读取 /etc/sysctl.conf 这个文件的设定值,使中心功用成为我们想要的样子。
                11. 设定主机称号与初始化电源办理模组 (ACPI)
                12. 初始化软件磁碟阵列:次要是透过 /etc/mdadm.conf 来设定好的。
                13. 初始化 LVM 的文件零碎功用
                14. 以 fsck 查验磁碟文件零碎:会停止 filesystem check
                15. 停止磁碟配额 quota 的转换 (非须要):
                16. 重新以可读写形式挂载零碎磁碟:
                17. 启动 quota 功用:以是我们不需求自订 quotaon 的举措
                18. 启动零碎假造乱数发生器 (pseudo-random):
                19. 肃清开机进程当中的暂存文件:
                20. 将开机相干资讯载入 /var/log/dmesg 文件中。

                在 /etc/rc.d/rc.sysinit 将根本的零碎设定材料都写好了,也将零碎的材料设定完好! 而假如你想要晓得究竟开机的进程中发作了什么事变呢?那么就实行‘ dmesg ’吧。 别的,根本上,在这个文件当中所停止的许多任务的预设设定档,实在都在 /etc/sysconfig/ 当中呢! 以是,请记得将 /etc/sysconfig/ 内的文件好好的瞧一瞧喔! ^_^

                在这个进程当中,比拟值得留意的是自订模组的载入!在 CentOS 当中,假如我们想要载入中心模组的话, 可以将整个模组写入到 /etc/sysconfig/modules/*.modules 当中,在该目次下, 只需记得档名最初因此 .modules 开头即可。 这个进程黑白须要的,由于我们现在的预设模组真实曾经很够用了,除非是您的主机硬体真实太新了, 非要本人载入新的模组不行,不然,在颠末 /etc/rc.d/rc.sysinit 的处置后, 你的主机零碎应该是曾经跑得很顺畅了啦!就等着你将零碎相干的效劳与网络效劳启动啰!


                小标题的图示启动零碎效劳与相干启动设定档 (/etc/rc.d/rc N & /etc/sysconfig)

                载入中心让整个零碎预备承受指令来任务,再颠末 /etc/rc.d/rc.sysinit 的零碎模组与相干硬体资讯的初始化后,你的 CentOS 零碎应该曾经顺遂任务了。 只是,我们还得要启动零碎所需求的各项‘效劳’啊!如许主机才干提供我们相干的网络或许是主机功用嘛! 这个时分,根据我们在 /etc/inittab 外面提到的 run level 设定值,就可以来决议启动的效劳项目了。 举例来说,运用 run level 3 固然就不需求启动 X Window 的相干效劳啰,您说是吧?

                那么各个差别的 run level 效劳启动的各个 shell script 放在哪?还记得 /etc/inittab 外面提到的:

                l0:0:wait:/etc/rc.d/rc 0
                l1:1:wait:/etc/rc.d/rc 1
                l2:2:wait:/etc/rc.d/rc 2
                l3:3:wait:/etc/rc.d/rc 3
                l4:4:wait:/etc/rc.d/rc 4
                l5:5:wait:/etc/rc.d/rc 5  <==本例中,以此项目来表明
                l6:6:wait:/etc/rc.d/rc 6
                

                下面提到的便是各个 run level 要实行的各项剧本安排处啦!次要是透过 /etc/rc.d/rc 这个指令来处置相干义务! 由于鸟哥运用预设的 runlevel 5 ,因而我们次要针对上述特别字体那行来表明好了: /etc/rc.d/rc 5 的意义是如许的 (发起您自利用用 vim 去察看一下 /etc/rc.d/rc 这个文件,你会更有观点!):

                • 透过内部第一号参数 ($1) 来获得想要实行的剧本目次。亦即由 /etc/rc.d/rc 5 可以获得 /etc/rc5.d/ 这个目次来预备处置相干的剧本顺序;
                • 找到 /etc/rc5.d/K??* 扫尾的文件,并停止‘ /etc/rc5.d/K??* stop ’的举措;
                • 找到 /etc/rc5.d/S??* 扫尾的文件,并停止‘ /etc/rc5.d/S??* start ’的举措;

                透过下面的阐明我们可以晓得一切的项目都与 /etc/rc5.d/ 有关,那么我们就来瞧瞧这个目次下有些什么玩意儿吧!

                [root@www ~]# ll /etc/rc5.d/
                lrwxrwxrwx 1 root root 16 Sep  4  2008 K02dhcdbd -> ../init.d/dhcdbd
                ....(两头省略)....
                lrwxrwxrwx 1 root root 14 Sep  4  2008 K91capi -> ../init.d/capi
                lrwxrwxrwx 1 root root 23 Sep  4  2008 S00microcode_ctl -> ../init.d/microcode_ctl
                lrwxrwxrwx 1 root root 22 Sep  4  2008 S02lvm2-monitor -> ../init.d/lvm2-monitor
                ....(两头省略)....
                lrwxrwxrwx 1 root root 17 Sep  4  2008 S10network -> ../init.d/network
                ....(两头省略)....
                lrwxrwxrwx 1 root root 11 Sep  4  2008 S99local -> ../rc.local
                lrwxrwxrwx 1 root root 16 Sep  4  2008 S99smartd -> ../init.d/smartd
                ....(底下省略)....
                

                在这个目次下的文件很风趣,次要具有几个特点:

                • 档名全部以 Sxx 或 Kxx ,此中 xx 为数字,且这些数字在文件之间是有相干性的!
                • 全部是保持档,保持到 stand alone 效劳启动的目次 /etc/init.d/ 去

                我们在第十八章谈过效劳的启动次要因此‘/etc/init.d/效劳档名 {start,stop}’来启动与封闭的,那么透过方才 /etc/rc.d/rc 顺序的讲解,我们可以清晰的理解到了 /etc/rc5.d/[SK]xx 实在便是跑到 /etc/init.d/ 去找到绝对应的效劳剧本, 然后辨别停止 start (Sxx) 或 stop (Kxx) 的举措罢了啦!举例来说,以上述的表格内的 K91capi 及 S10network 为例好了, 透过 /etc/rc.d/rc 5 的实行,这两个文件会如许停止:

                • /etc/rc5.d/K91capi stop --> /etc/init.d/capi stop
                • /etc/rc5.d/S10network start --> /etc/init.d/network start

                以是说,你有想要启动该 runlevel 时就实行的效劳,那么应用 Sxx 并指向 /etc/init.d/ 的特定效劳启动剧本后, 该效劳就可以在开机时启动啦!就这么复杂!题目是,你需求自行处置这个 K, S 扫尾的保持档吗? 并不需求的,第十八章谈到的 chkconfig 便是在担任处置这个保持档啦!如许有没有跟第十八章的看法串在一同了呢? ^_^

                那么为什么 K 与 S 前面要无数字呢?由于各差别的效劳实在照旧互有干系的。举例来说,假如要启动 WWW 效劳,总是得要有网络吧?以是 /etc/init.d/network 就会比拟先被启动啦!那么您就会晓得在 S 或许是 K 前面接的数字是啥意思了吧?嘿嘿,那便是实行的次序啦!那么哪个文件被最初实行呢? 看到最初一个被实行的项目是啥?没错,便是 S99local ,亦便是: /etc/rc.d/rc.local 这个文件啦!


                小标题的图示运用者自订开机启动顺序 (/etc/rc.d/rc.local)

                在完成预设 runlevel 指定的各项效劳的启动后,假如我另有其他的举措想要完成时,举例来说, 我还想要寄一封 mail 给某个零碎办理帐号,告诉他,零碎方才重新开机终了,那么能否应该要制造一个 shell script 安排在 /etc/init.d/ 外面,然后再以保持方法保持到 /etc/rc5.d/ 外面呢?呵呵!固然不需求!还记得上一大节提到的 /etc/rc.d/rc.local 吧? 这个文件就可以实行您本人想要实行的零碎指令了。

                也便是说,我有任何想要在开机时就停止的任务时,间接将他写入 /etc/rc.d/rc.local , 那么该任务就会在开机的时分主动被载入喔!而不用等我们登入零碎去启动呢! 能否很方便啊!普通来说,鸟哥就很喜好把本人制造的 shell script 完好档名写入 /etc/rc.d/rc.local ,云云一来,开机就会将我的 shell script 实行过,真是好棒那!


                小标题的图示依据 /etc/inittab 之设定,载入终端机或 X-Window 介面

                在完成了零碎一切效劳的启动后,接上去 Linux 就会启动终端机或许是 X Window 来等候运用者登入啦! 实践参考的项目是 /etc/inittab 内的这一段:

                1:2345:respawn:/sbin/mingetty tty1
                2:2345:respawn:/sbin/mingetty tty2
                3:2345:respawn:/sbin/mingetty tty3
                4:2345:respawn:/sbin/mingetty tty4
                5:2345:respawn:/sbin/mingetty tty5
                6:2345:respawn:/sbin/mingetty tty6
                x:5:respawn:/etc/X11/prefdm -nodaemon
                

                这一段代表,在 run level 2, 3, 4, 5 时,都市实行 /sbin/mingetty 这个咚咚, 并且实行六个,这也是为何我们 Linux 会提供‘六个纯笔墨终端机’的设定地点啊! 由于 mingetty 便是在启动终端机的指令说。

                要留意的是谁人 respawn 的 init 举措项目,他代表‘当前面的指令被停止 (terminal) 时, init 会自动的重新启动该项目。’这也是为何我们登入 tty1 终端机介面后,以 exit 分开后, 零碎照旧会重新表现等候运用者输出的画面的缘由啊!

                假如改天您不想要有六个终端机时,可以取消某些终端机介面吗?固然可以啊! 就将下面表格当中的某些项目表明失即可!比方不想要 tty5 与 tty6 ,就将那两行表明, 则下次重新开机后,您的 Linux 就只剩下‘ F1 ~ F4 ’无效罢了,如许说,可以理解吧!!^_^

                至于假如我们运用的是 run level 5 呢?那么除了这六个终端机之外, init 还会实行 /etc/X11/prefdm -nodaemon 谁人指令喔!该指令我们会在第二十四章、X Window 再来详谈! 他次要的功用便是在启动 X Window 啦!


                小标题的图示开机进程会用到的次要设定档

                我们在 /sbin/init 的运作进程中有谈到很多实行剧本,包罗 /etc/rc.d/rc.sysinit 以及 /etc/rc.d/rc 等等, 实在这些剧本都市运用到相称多的零碎设定档,这些开机进程会用到的设定档则大多安排在 /etc/sysconfig/ 目次下。 同时,由于中心照旧需求载入一些驱动顺序 (中心模组),此时零碎自订的安装与模组对应档 (/etc/modprobe.conf) 就显的挺紧张了喔!


                • 关于模组: /etc/modprobe.conf

                还记得我们在 /etc/rc.d/rc.sysinit 当中谈到的载入运用者自订模组的中央吗?便是在 /etc/sysconfig/modules/ 目次下啊! 固然中心提供的预设模组曾经很充足我们运用了,但是,某些条件下我们照旧得对模组停止一些参数的计划, 此时就得要运用到 /etc/modprobe.conf 啰!举例来说,鸟哥的 CentOS 主机的 modprobe.conf 有点像如许:

                [root@www ~]# cat /etc/modprobe.conf
                alias eth0 8139too               <==让 eth0 运用 8139too 的模组
                alias scsi_hostadapter pata_sis
                alias snd-card-0 snd-trident
                options snd-card-0 index=0       <==额定指定 snd-card-0 的参数功用
                options snd-trident index=0
                

                这个文件大多在指定零碎内的硬体所运用的模组啦!这个文件通常零碎是可以自行发生的,以是你不用手动去修订他! 不外,假如零碎捉到错误的驱动顺序,或许是你想要运用更新的驱动顺序来对应相干的硬体装备时, 你就得要自行手动的处置一下这个文件了。

                以上表的第一举动例,鸟哥运用螃蟹卡 (Realtek 的晶片组) 来作为我的网络卡,那螃蟹卡运用的模组便是 8139too 啦!如许看的懂了吧?当我要启动网络卡时,零碎会跑到这个文件来查阅一下,然后载入 8139too 驱动顺序来驱动网络卡啰!更多的相干阐明,请 man modprobe.conf 喔!


                • /etc/sysconfig/*

                不说您也晓得,整个开机的进程当中,总是读取的一些效劳的相干设定档都是记载在 /etc/sysconfig 目次下的!那么该目次底下有些啥玩意儿?我们找几个紧张的文件来谈谈:

                • authconfig
                  这个文件次要在标准运用者的身份认证的机制,包罗能否运用本机的 /etc/passwd, /etc/shadow 等, 以及 /etc/shadow 暗码记载运用何种加密演算法,另有能否运用内部暗码效劳器提供的帐号验证 (NIS, LDAP) 等。 零碎预设运用 MD5 加密演算法,而且不运用内部的身份验证机制;

                • clock
                  此文件在设定 Linux 主机的时区,可以运用格林威治工夫(GMT),也可以运用台湾的当地工夫 (local)。根本上,在 clock 文件内的设定项目‘ ZONE ’所参考的时区位于 /usr/share/zoneinfo 目次下的绝对途径中。并且要修正时区的话,还得将 /usr/share/zoneinfo/Asia/Taipei 这个文件复制成为 /etc/localtime 才行!

                • i18n
                  i18n 在设定一些语系的运用方面,比方最费事的笔墨介面下的日期表现题目! 假如你因此中文装置的,那么预设语系会当选择 zh_TW.UTF8 ,以是在纯笔墨介面之下, 你的文件日期表现能够就会出现乱码!这个时分就需求变动一下这里啦!变动这个 i18n 的文件,将外面的 LC_TIME 改成 en 即可!

                • keyboard & mouse
                  keyboard 与 mouse 便是在设定键盘与滑鼠的方式;

                • network
                  network 可以设定能否要启动网络,以及设定主机称号另有通讯闸 (GATEWAY) 这两个紧张资讯呢!

                • network-scripts/
                  至于 network-scripts 外面的文件,则是次要用在设定网络卡~ 这部份我们在效劳器搭建篇才会提到!

                总而言之一句话,这个目次下的文件很紧张的啦!开机进程外面经常会读取到的!


                小标题的图示Run level 的切换

                在我们完成下面的一切资讯后,实在整个 Linux 主机就曾经在等候我们运用者的登入啦! 但是,置信您应该照旧会有一点疑问的中央,那便是:‘我该怎样切换 run level 呢?’会不会很难啊?不会啦!很复杂~但是根据实行的工夫而有差别的方法啊!

                现实上,与 run level 有关的启动实在是在 /etc/rc.d/rc.sysinit 实行终了之后。也便是说,实在 run level 的差别仅是 /etc/rc[0-6].d 外面启动的效劳差别罢了。不外,根据开机能否主动进入差别 run level 的设定,我们可以说:

                1. 要每次开机都实行某个预设的 run level ,则需求修正 /etc/inittab 内的设定项目, 亦便是‘ id:5:initdefault: ’外头的数字啊;

                2. 假如仅只是临时变卦零碎的 run level 时,则运用 init [0-6] 来停止 run level 的变卦。 但下次重新开机时,照旧会因此 /etc/inittab 的设定为准。

                假定本来我们因此 run level 5 登入零碎的,但是由于某些要素,想要切换成为 run level 3 时, 该怎样办呢?很复杂啊,实行‘ init 3 ’即可切换。但是 init 3 这个举措究竟做了什么呢? 我们不是说了吗?现实上,差别的 run level 只是载入的效劳差别而已, 亦便是 /etc/rc5.d/ 另有 /etc/rc3.d 内的 Sxxname 与 Kxxname 有差别罢了。 以是说,当实行 init 3 时,零碎会:

                • 先比对 /etc/rc3.d/ 及 /etc/rc5.d 内的 K 与 S 扫尾的文件;
                • 在新的 runlevel 亦便是 /etc/rc3.d/ 内有多的 K 扫尾文件,则予以封闭;
                • 在新的 runlevel 亦便是 /etc/rc3.d/ 内有多的 S 扫尾文件,则予以启动;

                也便是说,两个 run level 都存在的效劳就不会被封闭啦!云云一来,就很容易切换 run level 了, 并且还不需求重新开机呢!真方便。那我怎样晓得现在的 run level 是几多呢? 间接在 bash 当中输出 runlevel 即可啊!

                [root@www ~]# runlevel
                N 5
                # 右边代表前一个 runlevel ,左边代表现在的 runlevel。
                # 由于之前并没有切换过 runlevel ,因而前一个 runlevel 不存在 (N)
                
                # 将现在的 runlevel 切换成为 3 (留意, tty7 的材料会消逝!)
                [root@www ~]# init 3
                NIT: Sending processes the TERM signal
                Applying Intel CPU microcode update:        [  OK  ]
                Starting background readahead:              [  OK  ]
                Starting irqbalance:                        [  OK  ]
                Starting httpd:                             [  OK  ]
                Starting anacron:                           [  OK  ]
                # 这代表,新的 runlevel 亦便是 runlevel3 比前一个 runlevel 多出了上述 5 个效劳
                
                [root@www ~]# runlevel
                5 3
                # 看吧!前一个是 runlevel 5 ,现在的是 runlevel 3 啦!
                

                那么你能不克不及应用 init 来停止关机与重新开机呢?可以的啦!应用‘ init 0 ’就可以关机, 而‘ init 6 ’就可以重新开机!为什么?往前翻一下 runlevel 的界说即可理解吧!


                大标题的图示中心与中心模组

                谈完了整个开机的流程,您应该会晓得,在整个开机的进程当中,能否可以乐成的驱动我们主机的硬体装备, 是中心 (kernel) 的任务!而中心普通都是紧缩档,因而在运用中心之前,就得要将他解紧缩后, 才干载入主影象体当中。

                别的,为了应付一日千里的硬体,现在的中心都是具有‘可读取模组化驱动顺序’的功用, 亦便是所谓的‘ modules (模组化)’的功用啦!所谓的模组化可以将他想成是一个‘外挂顺序’, 该外挂顺序能够由硬体开辟厂商提供,也有能够我们的中心原本就援助~不外,较新的硬体, 通常都需求硬体开辟商提供驱动顺序模组啦!

                那么中心与中心模组放在哪?

                • 中心: /boot/vmlinuz 或 /boot/vmlinuz-version;
                • 中心解紧缩所需 RAM Disk: /boot/initrd (/boot/initrd-version);
                • 中心模组: /lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel;
                • 中心原始码: /usr/src/linux (要装置才会有!不然预设不装置的!)

                假如该中心被顺遂的载入零碎当中了,那么就会有几个资讯记录上去:

                • 中心版本: /proc/version
                • 零碎中心功用: /proc/sys/kernel

                题目来啦,假如我有个新的硬体,偏偏我的作业零碎不援助,该怎样办?很复杂啊!

                • 重新编译中心,并参加最新的硬体驱动顺序原始码;
                • 将该硬体的驱动顺序编译成为模组,在开机时载入该模组

                下面第一点还很好了解,横竖便是重新编译中心便是了。不外,中心编译很不容易啊! 我们会在后续章浪费略引见中心编译的整个顺序。比拟风趣的则是将该硬体的驱动顺序编译成为模组啦! 关于编译的办法,可以参考后续的第二十二章、原始码与 tarball的引见。 我们这个章节仅是阐明一下,假如想要载入一个曾经存在的模组时,该如之奈何?


                小标题的图示中心模组与相依性

                既然要处置中心模组,天然就得要理解理解我们中心提供的模组之间的相干性啦! 根本上,中心模组的安排处是在 /lib/modules/$(uname -r)/kernel 当中,外面次要还分红几个目次:

                arch	:与硬体平台有关的项目,比方 CPU 的品级等等;
                crypto	:中心所援助的加密的技能,比方 md5 或许是 des 等等;
                drivers	:一些硬体的驱动顺序,比方表现卡、网络卡、PCI 相干硬体等等;
                fs	:中心所援助的 filesystems ,比方 vfat, reiserfs, nfs 等等;
                lib	:一些函式库;
                net	:与网络有关的各项协议材料,另有防火墙模组 (net/ipv4/netfilter/*) 等等;
                sound	:与音效有关的各项模组;
                

                假如要我们一个一个的去反省这些模组的次要资讯,然后界说出他们的相依性, 我们能够会疯失吧!以是说,我们的 Linux 固然会提供一些模组相依性的处理方案啰~ 对啦!那便是反省 /lib/modules/$(uname -r)/modules.dep 这个文件啦!他记载了在中心援助的模组的各项相依性。

                那么这个文件怎样树立呢?挺复杂!应用 depmod 这个指令就可以到达树立该文件的需求了!

                [root@www ~]# depmod [-Ane]
                选项与参数:
                -A  :不加任何参数时, depmod 会自动的去剖析现在中心的模组,而且重新写入
                      /lib/modules/$(uname -r)/modules.dep 当中。若参加 -A 参数时,则 depmod
                      会去搜索比 modules.dep 内还要新的模组,假如真找到新模组,才会更新。
                -n  :不写入 modules.dep ,而是将后果输入到荧幕上(standard out);
                -e  :表现出现在已载入的不行实行的模组称号
                
                典范一:若我做好一个网络卡驱动顺序,档名为 a.ko,该怎样更新中心相依性?
                [root@www ~]# cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net
                [root@www ~]# depmod
                

                以下面的典范一为例,我们的 Linux kernel 2.6.x 版本的中心模组副档名肯定是 .ko 开头的, 当你运用 depmod 之后,该顺序会跑到模组规范安排目次 /lib/modules/$(uname -r)/kernel , 并根据相干目次的界说将全部的模组捉出来剖析,终极才将剖析的后果写入 modules.dep 文件中的呐! 这个文件很紧张喔!由于他会影响到本章稍后会引见的 modprobe 指令的使用!


                小标题的图示中心模组的察看

                那你究竟晓不知道现在中心载入了几多的模组呢?粉复杂啦!应用 lsmod 即可!

                [root@www ~]# lsmod
                Module                  Size  Used by
                autofs4                24517  2
                hidp                   23105  2
                ....(两头省略)....
                8139too                28737  0
                8139cp                 26305  0
                mii                     9409  2 8139too,8139cp <==mii 还被 8139cp, 8139too 运用
                ....(两头省略)....
                uhci_hcd               25421  0  <==底下三个是 USB 相干的模组!
                ohci_hcd               23261  0
                ehci_hcd               33357  0
                

                运用 lsmod 之后,零碎会表现出现在曾经存在于中心当中的模组,表现的内容包罗有:

                • 模组称号(Module);
                • 模组的巨细(size);
                • 此模组能否被其他模组所运用 (Used by)。

                也便是说,模组实在真的有相依性喔!举上表为例, mii 这个模组会被 8139too 所运用。 复杂的说,便是‘当你要载入 8139too 时,需求先载入 mii 这个模组才可以顺遂的载入 8139too’的意思。 那么除了表现出现在的模组外,我还可以查阅每个模组的资讯吗?举例来说,我们晓得 8139too 是螃蟹卡的驱动顺序,那么 mii 是什么咚咚?就用 modinfo 来察看吧!

                [root@www ~]# modinfo [-adln] [module_name|filename]
                选项与参数:
                -a  :仅列出作者称号;
                -d  :仅列出该 modules 的阐明 (description);
                -l  :仅列出受权 (license);
                -n  :仅列出该模组的细致途径。
                
                典范一:由上个表格当中,请列出 mii 这个模组的相干资讯:
                [root@www ~]# modinfo mii
                filename:       /lib/modules/2.6.18-92.el5/kernel/drivers/net/mii.ko
                license:        GPL
                description:    MII hardware support library
                author:         Jeff Garzik <jgarzik@pobox.com>
                srcversion:     16DCEDEE4B5629C222C352D
                depends:
                vermagic:       2.6.18-92.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
                # 可以看到这个模组的泉源,以及该模组的浅易阐明!(是硬体援助函式库)
                
                典范二:我有一个模组称号为 a.ko ,叨教该模组的资讯为?
                [root@www ~]# modinfo a.ko
                ....(省略)....
                

                现实上,这个 modinfo 除了可以‘查阅在中心内的模组’之外,还可以反省‘某个模组文件’, 因而,假如你想要晓得某个文件代表的意义为何,应用 modinfo 加上完好档名吧! 看看就知道是啥玩意儿啰! ^_^


                小标题的图示中心模组的载入与移除

                好了,假如我想要自行手动载入模组,又该如之奈何?有许多办法啦,最复杂并且发起的,是运用 modprobe 这个指令来载入模组, 这是由于 modprobe 会自动的去搜索 modules.dep 的内容,先克制了模组的相依性后, 才决议需求载入的模组有哪些,很方便。至于 insmod 则完全由运用者自行载入一个完好档名的模组, 并不会自动的剖析模组相依性啊!

                [root@www ~]# insmod [/full/path/module_name] [parameters]
                
                典范一:请实验载入 cifs.ko 这个‘文件零碎’模组
                [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko
                [root@www ~]# lsmod | grep cifs
                cifs                  212789  0
                

                他立即就将该模组载入啰~但是 insmod 前面接的模组必需要是完好的‘档名’才行!那怎样移除这个模组呢?

                [root@www ~]# rmmod [-fw] module_name
                选项与参数:
                -f  :强迫将该模组移撤除,不管能否正被运用;
                -w  :若该模组正被运用,则 rmmod 会等候该模组被运用终了后,才移除他!
                
                典范一:将方才载入的 cifs 模组移除!
                [root@www ~]# rmmod cifs
                
                典范二:请载入 vfat 这个‘文件零碎’模组
                [root@www ~]# insmod /lib/modules/$(uname -r)/kernel/fs/vfat/vfat.ko
                insmod: error inserting '/lib/modules/2.6.18-92.el5/kernel/fs/vfat/vfat.ko': 
                -1 Unknown symbol in module
                # 无法载入 vfat 这个模组啊!伤头脑!
                

                运用 insmod 与 rmmod 的题目便是,你必需要自行找到模组的完好档名才行,并且好像上述典范二的后果, 万一模组有相依属性的题目时,你将无法间接载入或移除该模组呢!以是比年来我们都发起间接运用 modprobe 来处置模组载入的题目,这个指令的用法是:

                [root@www ~]# modprobe [-lcfr] module_name
                选项与参数:
                -c  :列出现在零碎一切的模组!(更细致的代号对应表)
                -l  :列出现在在 /lib/modules/`uname -r`/kernel 当中的一切模组完好档名;
                -f  :强迫载入该模组;
                -r  :相似 rmmod ,便是移除某个模组啰~
                
                典范一:载入 cifs 模组
                [root@www ~]# modprobe cifs
                # 很方便吧!不需求晓得完好的模组档名,这是由于该完好档名曾经记载到
                # /lib/modules/`uname -r`/modules.dep 当中的缘故啊!假如要移除的话:
                [root@www ~]# modprobe -r cifs
                

                运用 modprobe 真的是要比 insmod 方便许多!由于他是间接去搜索 modules.dep 的记录, 以是啰,固然可以克制模组的相依性题目,并且还不需求晓得该模组的细致途径呢! 好方便! ^_^

                例题:
                实验运用 modprobe 载入 vfat 这个模组,而且察看该模组的相干模组是哪个?
                答:
                我们运用 modprobe 来载入,再以 lsmod 来察看与 grep 撷取要害字看看:
                [root@www ~]# modprobe vfat
                [root@www ~]# lsmod | grep vfat
                vfat                   15809  0
                fat                    51165  1 vfat <==原来便是 fat 这个模组啊!
                
                [root@www ~]# modprobe -r vfat <==测试完移除此模组
                


                小标题的图示中心模组的额定参数设定: /etc/modprobe.conf

                这个文件我们之前曾经谈过了,这里只是再夸大一下罢了,假如您想要修正某些模组的额定参数设定, 就在这个文件内设定吧!我们假定一个案例好了,假定我的网络卡 eth0 是运用 ne , 但是 eth1 异样也运用 ne ,为了防止统一个模组会招致网络卡的紊乱, 因而,我可以先找到 eth0 与 eth1 的 I/O 与 IRQ ,假定:

                • eth0 : I/O (0x300) 且 IRQ=5
                • eth1 : I/O (0x320) 且 IRQ=7

                则:

                [root@www ~]# vi /etc/modprobe.conf
                alias eth0 ne
                alias eth1 ne
                options eth0 io=0x300 irq=5
                options eth1 io=0x320 irq=7
                

                嘿嘿!云云一来,我的 Linux 就不会捉错网络卡的对应啰!由于被我强迫指定某个 I/O 咯嘛! ^_^


                大标题的图示Boot Loader: Grub

                在看完了后面的整个开机流程,以及中心模组的整理之后,你应该会发明到一件事变, 那便是‘ boot loader 是载入中心的紧张东西’啊!没有 boot loader 的话,那么 kernel 基本就没有方法被零碎载入的呢!以是,底下我们会先谈一谈 boot loader 的功用, 然后再讲一讲现阶段 Linux 外头最主流的 grub 这个 boot loader 吧!


                小标题的图示boot loader 的两个 stage

                我们在第一大节开机流程的中央已经讲过,在 BIOS 读完资讯后,接上去便是会到第一个开机安装的 MBR 去读取 boot loader 了。这个 boot loader 可以具有选单功用、间接载入中心文件以及控制权移交的功用等, 零碎必需要有 loader 才有方法载入该作业零碎的中心便是了。但是我们都晓得, MBR 是整个硬碟的第一个 sector 内的一个区块,充其量整个巨细也才 446 bytes 罢了。 我们的 loader 功用这么强,光是顺序码与设定材料不行能只占不到 446 bytes 的容量吧?那怎样装置?

                为理解决这个题目,以是 Linux 将 boot loader 的顺序码实行与设定值载入分红两个阶段 (stage) 来实行:

                • Stage 1:实行 boot loader 主顺序:
                  第一阶段为实行 boot loader 的主顺序,这个主顺序必需要被装置在开机区,亦便是 MBR 或许是 boot sector 。但如前所述,由于 MBR 真实太小了,以是,MBR 或 boot sector 通常仅装置 boot loader 的最小主顺序, 并没有装置 loader 的相干设定档;

                • Stage 2:主顺序载入设定档:
                  第二阶段为透过 boot loader 载入一切设定档与相干的情况参数文件 (包罗文件零碎界说与次要设定档 menu.lst), 普通来说,设定档都在 /boot 底下。

                那么这些设定档是放在那边啊?这些与 grub 有关的文件都安排到 /boot/grub 中,那我们就来看看有哪些文件吧!

                [root@www ~]# ls -l /boot/grub
                -rw-r--r--  device.map              <==grub 的安装对应档(底下谈判到)
                -rw-r--r--  e2fs_stage1_5           <==ext2/ext3 文件零碎之界说档
                -rw-r--r--  fat_stage1_5            <==FAT 文件零碎之界说档
                -rw-r--r--  ffs_stage1_5            <==FFS 文件零碎之界说档
                -rw-------  grub.conf               <==grub 在 Red Hat 的设定档
                -rw-r--r--  iso9660_stage1_5        <==光碟机文件零碎界说档
                -rw-r--r--  jfs_stage1_5            <==jfs 文件零碎界说档
                lrwxrwxrwx  menu.lst -> ./grub.conf <==实在 menu.lst 才是设定档!
                -rw-r--r--  minix_stage1_5          <==minix 文件零碎界说档
                -rw-r--r--  reiserfs_stage1_5       <==reiserfs 文件零碎界说档
                -rw-r--r--  splash.xpm.gz           <==开机时在 grub 底下的配景图示
                -rw-r--r--  stage1                  <==stage 1 的相干阐明
                -rw-r--r--  stage2                  <==stage 2 的相干阐明
                -rw-r--r--  ufs2_stage1_5           <==UFS 的文件零碎界说档
                -rw-r--r--  vstafs_stage1_5         <==vstafs 文件零碎界说档
                -rw-r--r--  xfs_stage1_5            <==xfs 文件零碎界说档
                

                从下面的阐明你可以晓得 /boot/grub/ 目次下最紧张的便是设定档 (menu.lst) 以及种种文件零碎的界说! 我们的 loader 读取了这种文件零碎界说材料后,就可以看法文件零碎并读取在该文件零碎内的中心文件啰。 至于 grub 的设定档档名,实在应该是 menu.lst 的,只是在 Red Hat 外面被界说成为 /boot/grub.conf 罢了。 鸟哥发起您照旧影象 menu.lst 比拟好喔!

                以是从下面的文件来看, grub 看法的文件零碎真的十分多喔!正由于云云,以是 grub 才会代替 Lilo 这个老牌的 boot loader 嘛!好了,接上去就来瞧瞧设定档内有啥设定值吧!


                小标题的图示grub 的设定档 /boot/grub/menu.lst 与选单范例

                grub 是现在运用最普遍的 Linux 开机办理顺序,旧的 Lilo 这个开机办理顺序如今曾经很少见了, 以是本章才会将 Lilo 的引见舍弃的说。grub 的长处挺多的,包罗有:

                • 看法与援助较多的文件零碎,而且可以运用 grub 的主顺序间接在文件零碎中搜索中心档名;
                • 开机的时分,可以‘自行编辑与修正开机设定项目’,相似 bash 的指令形式;
                • 可以静态搜索设定档,而不需求在修正设定档后重新装置 grub 。亦便是我们只需修正完 /boot/grub/menu.lst 外头的设定后,下次开机就失效了!

                下面第三点实在便是 Stage 1, Stage 2 辨别装置在 MBR (主顺序) 与文件零碎当中 (设定档与界说档) 的缘由啦! 好了,接上去,让我们好好理解一下 grub 的设定档: /boot/grub/menu.lst 这玩意儿吧! 要留意喔,谁人 lst 是 LST 的小写,不要搞错啰!


                • 硬碟与联系槽在 grub 中的代号

                装置在 MBR 的 grub 主顺序,最紧张的义务之一便是从磁碟当中载入中心文件, 以让中心可以顺遂的驱动整个零碎的硬体。以是啰, grub 必需要看法硬碟才行啊!那么 grub 究竟是怎样看法硬碟的呢? 嘿嘿! grub 对硬碟的代号设定与传统的 Linux 磁碟代号可完满是差别的!grub 对硬碟的辨认运用的是如下的代号:

                (hd0,0)

                够神了吧?跟 /dev/hda1 风马牛不相及~怎样办啊?实在只需留意几个工具即可,那便是:

                • 硬碟代号以小括号 ( ) 包起来;
                • 硬碟以 hd 表现,前面会接一组数字;
                • 以‘搜索次序’做为硬碟的编号,而不是按照硬碟排线的排序!(这个紧张!)
                • 第一个搜索到的硬碟为 0 号,第二个为 1 号,以此类推;
                • 每颗硬碟的第一个 partition 代号为 0 ,依序类推。

                以是说,第一颗‘搜索到的硬碟’代号为:‘(hd0)’,而该颗硬碟的第一号联系槽为‘(hd0,0)’,如许说理解了吧? 横竖你要记得,在 grub 外面,他开端的数字是 0 而不是 1 便是了!

                Tips:
                在较旧的主机板下面,通常第一颗硬碟会插在 IDE 1 的 master 上,就会是 /dev/hda,以是经常我们能够会误解 /dev/hda 便是 (hd0),实在不是喔!要看你的 BIOS 设定值才行!有的主机板 BIOS 可以调解开机的硬碟搜索次序,那么就要留意了,由于 grub 的硬碟代号能够会随着改动呐!注意注意!
                鸟哥的图示

                以是说,整个硬碟代号为:

                硬碟搜索次序在 Grub 当中的代号
                第一颗(hd0) (hd0,0) (hd0,1) (hd0,4)....
                第二颗(hd1) (hd1,0) (hd1,1) (hd1,4)....
                第三颗(hd2) (hd2,0) (hd2,1) (hd2,4)....

                如许应该比拟美观出来了吧?第一颗硬碟的 MBR 装置处的硬碟代号便是‘(hd0)’, 而第一颗硬碟的第一个联系槽的 boot sector 代号便是‘(hd0,0)’第一颗硬碟的第一个逻辑联系槽的 boot sector 代号为‘(hd0,4)’明晰吧!

                例题:
                假定你的零碎仅有一颗 SATA 硬碟,请阐明该硬碟的第一个逻辑联系槽在 Linux 与 grub 当中的档名与代号:
                答:
                由于是 SATA 磁碟,加上运用逻辑联系槽,因而 Linux 当中的档名为 /dev/sda5 才对 (1~4 保存给 primary 与 extended 运用)。 至于 grub 当中的磁碟代号则由于仅有一颗磁碟,因而代号会是‘ (hd0,4) ’才对。


                • /boot/grub/menu.lst 设定档:

                理解了 grub 当中最费事的硬碟代号后,接上去,我们就可以瞧一瞧设定档的内容了。先看一下鸟哥的 CentOS 内的 /boot/grub/menu.lst 好了:

                [root@www ~]# vim /boot/grub/menu.lst
                default=0     <==预设开机选项,运用第 1 个开机选单 (title)
                timeout=5     <==若 5 秒内未动键盘,运用预设选单开机
                splashimage=(hd0,0)/grub/splash.xpm.gz <==配景图示地点的文件
                hiddenmenu    <==读秒时期能否表现出完好的选单画面(预设隐蔽)
                title CentOS (2.6.18-92.el5)    <==第一个选单的内容
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet
                        initrd /initrd-2.6.18-92.el5.img
                

                在 title 曩昔的四行,都是属于 grub 的全体设定,包罗预设的等候工夫与预设的开机项目, 另有表现的画面特性等等。至于 title 前面才是指定开机的中心文件或许是 boot loader 控制权。 在全体设定方面的项目次要罕见的有:

                • default=0
                  这个必需要与 title 作为比较,在设定档外面有几个 title ,开机的时分就会有几个选单可以选择。 由于 grub 启始号码为 0 号,因而 default=0 代表运用‘第一个 title 项目’来开机的意思。 default 的意思是,假如在读秒工夫完毕前都没有动到键盘, grub 预设运用此 title 项目 (在此为 0 号) 来开机。

                • timeout=5
                  开机时会停止读秒,假如在 5 秒钟内没有按下任何按键,就会运用下面提到的 default 前面接的谁人 title 项目来开机的意思。假如你以为 5 秒太短,那可以将这个数值调大 (比方 30 秒) 即可。别的,假如 timeout=0 代表间接运用 default 值停止开机而不读秒,timeout=-1 则代表间接进当选单不读秒了!

                • splashimage=(hd0,0)/grub/splash.xpm.gz
                  有没有发明你的 CentOS 在开机的时分配景不是彩色而是有颜色变革的呢?那便是这个文件提供的配景图示啦(注3)!不外这个文件的实践途径写法怎样会是如许啊?很复杂啊~上述的意思是:在 (hd0,0) 这个联系槽内的最顶层目次中,底下的 grub/splash.xpm.gz 谁人文件的意思。 由于鸟哥将 /boot 这个目次独立成为 /dev/hda1 ,因而这边就会写成‘在 /dev/hda1 外面的 grub/splash.xpm.gz ’的意思啦!想一想,假如你的 /boot 目次并没有独立成为一个联系槽, 这里会写成怎样?

                • hiddenmenu
                  这个说的是,开机时能否要表现选单?现在 CentOS 预设是不要表现选单, 假如您想要表现选单,那就将这个设定值表明失!

                全体设定的中央大约是如许,而底下谁人 title 则是表现开机的设定项目。好像前一大节提到的,开机时可以选择 (1)间接指定中心文件开机或 (2)将 boot loader 控制权转移到下个 loader (此进程称为 chain-loader)。每个 title 前面接的是‘该开机项目称号的表现’,亦便是在选单呈现时,选单下面的称号罢了。 那么这两种方法的设定有啥差别呢?

                1. 间接指定中心开机

                  既然要指定中心开机,以是固然要找到中心文件啦!别的,有能够还需求用到 initrd 的 RAM Disk 设定档。但是如前说的, 尚未开机完成,以是我们必需要以 grub 的硬碟辨认方法找出完好的 kernel 与 initrd 档名才行。 因而,我们能够需求有底下的方法来设定才行!
                  1. 先指定中心文件安排的 partition,再读取文件 (目次树),
                     最初才参加文件的实践档名与途径 (kernel 与 initrd);
                     鸟哥的 /boot 为 /dev/hda1 ,因而中心文件的设定章成为:
                  root    (hd0,0)          <==代表中心文件放在谁人 partition 当中
                  kernel  /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet
                  initrd  /initrd-2.6.18-92.el5.img
                  
                  下面的 root, kernel, initrd 前面接的参数的意义阐明如下:

                  root :代表的是‘中心文件安排的谁人 partition 而不是根目次’喔!不要搞错了! 以鸟哥的案例来说,我的根目次为 /dev/hda2 而 /boot 独立为 /dev/hda1 ,由于与 /boot 有关, 以是磁碟代号就会成为 (hd0,0) 啰。

                  kernel :至于 kernel 前面接的则是中心的档名,而在档名前面接的则是中心的参数。 由于开机进程中需求挂载根目次,因而 kernel 前面接的谁人 root=LABEL=/1 指的是‘Linux 的根目次在哪个 partition ’的意思。 还记得第八章谈过的 LABEL 挂载功用吧? 是的,这里运用 LABEL 来挂载根目次。至于 rhgb 为颜色表现而 quiet 则是恬静形式 (荧幕不会输入中心探测的资讯)。

                  initrd :便是后面提到的 initrd 制造出 RAM Disk 的文件档名啦!
                  2. 间接指定 partition 与档名,不需求额定指定中心文件地点安装代号
                  kernel  (hd0,0)/vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet
                  initrd  (hd0,0)/initrd-2.6.18-92.el5.img
                  
                  诚实说,鸟哥比拟喜好这种款式的档名写法,由于如许我们就可以晓得中心文件是在哪个安装内的某个档名, 而不会去想到我们的根目次 (/, root) 啦!让我们来想想 /boot 有独立联系与无独立联系的状况吧!

                  例题:
                  我的零碎联系是: /dev/hda1 (/), /dev/hda2 (swap) 罢了,且我的中心文件为 /boot/vmlinuz,叨教 grub 的 menu.lst 内该怎样撰写中心文件地位?
                  答:
                  我们运用叠代的方法来理解一下好了。由于中心档名为 /boot/vmlinuz,转成安装档名与代号会成为如下的进程:
                  原始文件:  /boot/vmlinuz ↓
                  Linux 安装:(/dev/hda1)/boot/vmlinuz ↓
                  grub  安装:(hd0,0)/boot/vmlinuz
                  以是终极的 kernel 写法会酿成:
                  kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 ...

                  例题:
                  同上,只是我的联系状况酿成: /dev/sda1 (/boot), /dev/sda5 (/) 时?
                  答:
                  由于 /boot 被独立出来了,以是状况会纷歧样喔!如下所示:
                  原始文件:  /boot/vmlinuz ↓
                  Linux 安装:(/dev/sda1)/vmlinuz ↓
                  grub  安装:(hd0,0)/vmlinuz
                  以是终极的 kernel 写法会酿成:
                  kernel (hd0,0)/vmlinuz root=/dev/sda5 ...

                2. 应用 chain loader 的方法转交控制权

                  所谓的 chain loader (开机办理顺序的链结) 仅是在将控制权交给下一个 boot loader 罢了, 以是 grub 并不需求看法与找出 kernel 的档名 ,‘ 他只是将 boot 的控制权交给下一个 boot sector 或 MBR 内的 boot loader 罢了 ’ 以是通常他也不需求去检验下一个 boot loader 的文件零碎!

                  普通来说, chain loader 的设定只需两个就够了,一个是估计要前去的 boot sector 地点的联系槽代号, 另一个则是设定 chainloader 在谁人联系槽的 boot sector (第一个磁区) 上!假定我的 Windows 联系槽在 /dev/hda1 ,且我又只要一颗硬碟,那么要 grub 将控制权交给 windows 的 loader 只需如许就够了:
                  [root@www ~]# vi /boot/grub/menu.lst
                  ....前略....
                  title Windows partition
                  	root (hd0,0)    <==设定运用此联系槽
                  	chainloader +1  <== +1 可以想成第一个磁区,亦便是 boot sector
                  
                  下面的典范中,我们可以很复杂的如许想:谁人 (hd0,0) 便是 Windows 的 C 槽地点磁碟, 而 chainloader +1 便是让零碎载入该联系槽当中的第一个磁区 (便是 boot sector) 内的开机办理顺序。 不外,由于 Windows 的开机碟需求设定为活化 (active) 形态,且我们的 grub 预设会去查验该联系槽的文件零碎。 因而我们可以重新将下面的典范改写成如许:
                  [root@www ~]# vi /boot/grub/menu.lst
                  ....前略....
                  title Windows partition
                  	rootnoverify (hd0,0)   <==不查验此联系槽
                  	chainloader +1
                  	makeactive             <==设定此联系槽为开机碟(active)
                  
                  grub 的功用还不止此,他还可以隐蔽某些联系槽。举例来说,我的 /dev/hda5 是装置 Linux 的联系槽, 我不想让 Windows 可以看法这个联系槽时,你可以如许做:
                  [root@www ~]# vi /boot/grub/menu.lst
                  ....前略....
                  title Windows partition
                  	hide (hd0,4)           <==隐蔽 (hd0,4) 这个联系槽
                  	rootnoverify (hd0,0)
                  	chainloader +1
                  	makeactive
                  

                小标题的图示initrd 的紧张性与树立新 initrd 文件

                我们在本章稍早之前‘ boot loader 与 kernel 载入’的中央曾经提到过 initrd 这玩意儿,他的目标在于提供开机进程中所需求的最紧张中心模组,以让零碎开机进程可以顺遂完成。 会需求 initrd 的缘由,是由于中心模组安排于 /lib/modules/$(uname -r)/kernel/ 当中, 这些模组必需要根目次 (/) 被挂载时才干够被读取。但是假如中心自身不具有磁碟的驱动顺序时, 固然无法挂载根目次,也就没有方法获得驱动顺序,因而形成两难的境地。

                initrd 可以将 /lib/modules/.... 内的‘开机进程当中肯定需求的模组’包成一个文件 (档名便是 initrd), 然后在开机时透过主机的 INT 13 硬体功用将该文件读出来解紧缩,而且 initrd 在影象体内会模仿成为根目次, 由于此假造文件零碎 (Initial RAM Disk) 次要包括磁碟与文件零碎的模组,因而我们的中心最初就可以看法实践的磁碟, 那就可以停止实践根目次的挂载啦!以是说:‘initrd 内所包括的模组大多是与开机进程有关,而次要以文件零碎及硬碟模组 (如 usb, SCSI 等) 为主’的啦!

                普通来说,需求 initrd 的时辰为:

                • 根目次地点磁碟为 SATA、USB 或 SCSI 等衔接介面;
                • 根目次地点文件零碎为 LVM, RAID 等特别款式;
                • 根目次地点文件零碎为非传统 Linux 看法的文件零碎时;
                • 其他必需要在中心载入时提供的模组。
                Tips:
                之前鸟哥疏忽 initrd 这个文件的紧张性,是由于鸟哥很穷... ^_^。由于鸟哥的 Linux 主机都是较晚期的硬体, 运用的是 IDE 介面的硬碟,并且并没有运用 LVM 等特别款式的文件零碎,而 Linux 中心自身就看法 IDE 介面的磁碟, 因而不需求 initrd 也可以顺遂开机完成的。自从 SATA 硬碟盛行起来后,没有 initrd 就没方法开机了! 由于 SATA 硬碟运用的是 SCSI 模组来驱动的,而 Linux 预设将 SCSI 功用编译成为模组....
                鸟哥的图示

                普通来说,各 distribution 提供的中心都市附上 initrd 文件,但假如你有特别需求以是想重制 initrd 文件的话, 可以运用 mkinitrd 来处置的。这个文件的处置方法很复杂, man mkinitrd 就晓得了! ^_^。 我们照旧复杂的引见一下去!

                [root@www ~]# mkinitrd [-v] [--with=模组称号] initrd档名 中心版本
                选项与参数:
                -v  :表现 mkinitrd 的运作进程
                --with=模组称号:模组称号指的是模组的名字罢了,不需求填写档名。举例来说,
                       现在中心版本的 ext3 文件零碎模组为底下的档名:
                       /lib/modules/$(uname -r)/kernel/fs/ext3/ext3.ko
                       那你应该要写成: --with=ext3 就好了 (省略 .ko)
                initrd档名:你所要树立的 initrd 档名,只管即便取故意义又好记的名字。
                中心版本  :某一个中心的版本,假如是现在的中心则是‘ $(uname -r) ’
                
                典范一:以 mkinitrd 的预设功用树立一个 initrd 假造磁碟文件
                [root@www ~]# mkinitrd -v initrd_$(uname -r) $(uname -r)
                Creating initramfs
                Looking for deps of module ehci-hcd
                Looking for deps of module ohci-hcd
                ....(两头省略)....
                Adding module ehci-hcd  <==终极参加 initrd 的便是底下的模组
                Adding module ohci-hcd
                Adding module uhci-hcd
                Adding module jbd
                Adding module ext3
                Adding module scsi_mod
                Adding module sd_mod
                Adding module libata
                Adding module pata_sis
                
                [root@www ~]# ll initrd_*
                -rw------- 1 root root 2406443 Apr 30 02:55 initrd_2.6.18-92.el5
                # 由于现在的中心版本可运用 uname -r 获得,因而鸟哥运用较复杂的指令来处置啰~
                # 此时 initrd 会被树立起来,你可以将他挪动到 /boot 等候运用。
                
                典范二:添加 8139too 这个模组的 initrd 文件
                [root@www ~]# mkinitrd -v --with=8139too initrd_vbirdtest $(uname -r)
                ....(后面省略)....
                Adding module mii
                Adding module 8139too  <==看到没!如许就参加了!
                

                initrd 树立完成之后,同时中心也处置终了后,我们就可以运用 grub 来树立选单了!底下持续瞧一瞧吧!


                小标题的图示测试与装置 grub

                假如你的 Linux 主机原本便是运用 grub 作为 loader 的话,那么你就不需求重新装置 grub 了, 由于 grub 原本就会自动去读取设定档啊!您说是吧!但假如你的 Linux 原来运用的并非 grub , 那么就需求来装置啦!怎样装置呢?起首,你必需要运用 grub-install 将一些须要的文件复制到 /boot/grub 外面去,你应该如许做的:

                Tips:
                装置些什么呢?由于 boot loader 有两个 stage ,而设定档得要安排到得当的中央。 这个 grub-install 便是在装置设定档 (包罗文件零碎界说档与 menu.lst 等等) 罢了! 假如要将 grub 的 stage1 主顺序装置起来,就得要运用 grub shell 的功用喔!本章稍后会引见。
                鸟哥的图示
                [root@www ~]# grub-install [--root-directory=DIR] INSTALL_DEVICE
                选项与参数:
                --root-directory=DIR 谁人 DIR 为实践的目次,运用 grub-install 预设会将
                  grub 一切的文件都复制到 /boot/grub/* ,假如想要复制到其他目次与安装去,
                  就得要用这个参数。
                INSTALL_DEVICE 装置的安装代号啦!
                
                典范一:将 grub 装置在现在零碎的 MBR 底下,我的零碎为 /dev/hda:
                [root@www ~]# grub-install /dev/hda
                # 由于本来 /dev/hda 便是运用 grub ,以是好像不会呈现什么特殊的讯息。
                # 假如去查阅一下 /boot/grub 的内容,会发明一切的文件都更新了,由于我们重装了!
                
                典范二:我的 /home 为独立的 /dev/hda3 ,怎样装置 grub 到 /dev/hda3 (boot sector)
                [root@www ~]# grub-install --root-directory=/home /dev/hda3
                Probing devices to guess BIOS drives. This may take a long time.
                Installation finished. No error reported.
                This is the contents of the device map /home/boot/grub/device.map.
                Check if this is correct or not. If any of the lines is incorrect,
                fix it and re-run the script `grub-install'.
                
                (fd0)   /dev/fd0
                (hd0)   /dev/hda   <==会赐与安装代号的对应表!
                
                [root@www ~]# ll /home/boot/grub/
                -rw-r--r-- 1 root root     30 Apr 30 11:12 device.map
                -rw-r--r-- 1 root root   7584 Apr 30 11:12 e2fs_stage1_5
                ....(底下省略)....
                # 看!文件都装置出去了!但是留意到,我们并没有设定档喔!那要本人树立!
                

                以是说, grub-install 是装置 grub 相干的文件 (比方文件零碎界说档) 到你的安装下面去等候在开机时被读取,但还需求设定好设定档 (menu.lst) 后,再以 grub shell 来装置 grub 主顺序到 MBR 或许是 boot sector 下面去喔!好了,那我们来考虑一下想要装置的材料。

                例题:
                我估计开机时要间接表现选单,且选单倒数为 30 秒。别的,在本来的 menu.lst 当中新增三个开机选单,辨别如下阐明:
                1. 假定 /dev/hda1 内含有 boot loader ,此 loader 怎样获得控制权?
                2. 怎样重新读取 MBR 内的 loader ?
                3. 应用你本来的零碎中心文件,树立一个可强迫进入单人维护形式的选单
                答:
                第一点很复杂,就应用上一大节的阐明来处置即可。至于第二点,MBR 的读取读的是整颗硬碟的第一个磁区, 因而 root (hd0) 才是对的。第三点则与中心的后续参数有关。整个文件可以被改写成如许:
                [root@www ~]# vim /boot/grub/menu.lst
                default=0
                timeout=30
                splashimage=(hd0,0)/grub/splash.xpm.gz
                #hiddenmenu
                title CentOS (2.6.18-92.el5)
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet
                        initrd /initrd-2.6.18-92.el5.img
                title /dev/hda1 boot sector  <==本例中的第一个新增选单
                        root (hd0,0)
                        chainloader +1
                title MBR loader             <==新增的第二个选单
                        root (hd0)           <==MBR 为整颗磁碟的第一个磁区,以是用整颗磁碟的代号
                        chainloader +1
                title single user mode       <==新增的第三个选单(实在由本来的title复制来的)
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet single
                        initrd /initrd-2.6.18-92.el5.img
                
                下次开机时,你就会发明有四个选单可以选择,而预设会以第一个选单来开机喔!

                我们曾经将设定档处置终了,但是你要晓得的是,我们并不晓得 /dev/hda1 究竟有没有包括 grub 的主顺序, 因而我们想要将 grub 主顺序再次的装置到 /dev/hda1 的 boot sector ,也想要重新装置 grub 到 MBR 下面去。 此时我们就得要运用 grub shell 啰!整个装置与 grub shell 的举措实在很复杂, 假如您有兴味研讨的话,可以运用 info grub 去查阅~鸟哥这里仅引见几个有效的指令罢了。

                • 用‘ root (hdx,x) ’选择含有 grub 目次的谁人 partition 代号;
                • 用‘ find /boot/grub/stage1 ’看看可否找到装置资讯文件;
                • 用‘ find /boot/vmlinuz ’看看可否找到 kernel file (纷歧定要乐成!);
                • 用‘ setup (hdx,x) ’或‘ setup (hdx) ’将 grub 装置在 boot sector 或 MBR;
                • 用‘ quit ’来分开 grub shell !

                由于我们最需求装置的便是谁人 stage1 啦!那才是 grub 的主顺序嘛!并且设定档通常与主顺序摆在统一个目次下。 因而我们需求运用 root (hd0,0) 去找到 /boot/grub/stage1 喔!接上去,请用 grub 来进入 grub shell 吧!进入 grub 后,会呈现一个‘ grub> ’的提示字元啊!

                [root@www ~]# grub
                
                # 1. 先设定一下含有 grub 目次的谁人 partition 啊!
                grub> root (hd0,0)
                 Filesystem type is ext2fs, partition type 0x83
                # 鸟哥主机的联系中,/boot/grub 在 /boot 的联系槽,亦便是 /dev/hda1 内喔!
                # 别的, grub 也可以辨别出该联系槽的文件零碎 (ext2)。
                
                # 2. 搜索一下,能否存在 stage1 这个资讯文件?
                grub> find /boot/grub/stage1
                 (hd0,2)
                # 见鬼!怎样会只要一个!我们明显有 /boot/grub 与 /home/boot/grub 啊!
                # 由于 /boot 是独立的,因而要找到该档名就得要用如下的方法:
                
                grub> find /grub/stage1
                 (hd0,0)
                # 如许就可以找到啰!要特殊留意 grub 找到不是目次树,而是安装内的文件。
                
                # 3. 搜索一下能否可以找到中心? /boot/vmlinuz-2.6.18-92.el5 ?
                grub> find /boot/vmlinuz-2.6.18-92.el5
                Error 15: File not found
                grub> find /vmlinuz-2.6.18-92.el5
                 (hd0,0)
                # 再次夸大,由于 /boot/ 是独立的,因而就会酿成上头的容貌啰!
                
                # 4. 将主顺序装置上去吧!装置到 MBR 看看!
                grub> setup (hd0)
                 Checking if "/boot/grub/stage1" exists... no <==由于 /boot 是独立的
                 Checking if "/grub/stage1" exists... yes     <==以是这个档名才是对的!
                 Checking if "/grub/stage2" exists... yes
                 Checking if "/grub/e2fs_stage1_5" exists... yes
                 Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
                succeeded
                 Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 
                /grub/grub.conf"... succeeded  <==将 stage1 顺序装置妥当啰!
                Done.
                # 很好!的确有装起来~如许 grub 就在 MBR 当中了!
                
                # 5. 那么反复装置到我的 /dev/hda1 呢?亦便是 boot sector 当中?
                grub> setup (hd0,0)
                 Checking if "/boot/grub/stage1" exists... no
                 Checking if "/grub/stage1" exists... yes
                 Checking if "/grub/stage2" exists... yes
                 Checking if "/grub/e2fs_stage1_5" exists... yes
                 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
                 Running "embed /grub/e2fs_stage1_5 (hd0,0)"... failed (this is not fatal)
                 Running "install /grub/stage1 (hd0,0) /grub/stage2 p /grub/grub.conf "... 
                succeeded
                Done.
                # 固然无法将 stage1_5 装置到 boot sector 去,不外,还不会有题目,
                # 重点是最初面谁人 stage1 要装置后,表现 succeeded 字样就可以了!
                
                grub> quit
                

                云云一来,就曾经将 grub 装置到 MBR 及 /dev/hda1 的 boot sector 外面去了! 并且读取的是 (hd0,0) 外面的 /grub/menu.lst 谁人文件喔!真是很紧张啊!紧张到不可!

                最初总结一下:

                1. 假如是从其他 boot loader 转成 grub 时,得先运用 grub-install 装置 grub 设定档;
                2. 开端编辑 menu.lst 这个紧张的设定档;
                3. 透过 grub 来将主顺序装置到零碎中,如 MBR 的 (hd0) 或 boot sector 的 (hd0,0) 等等。

                小标题的图示开机前的额定功用修正

                现实上,上一个大节设定好之后,你的 grub 就曾经在你的 Linux 零碎下面了,并且同时存在于 MBR 与 boot sector 当中呢!以是,我们曾经可以重新开机来查阅看看啦! 别的,假如你正在停止开机,那么请留意,我们可以在预设选单 (鸟哥的典范当中是 30 秒) 按下恣意键, 还可以停止 grub 的‘线上编修’功用喔!真是棒啊!先来看看开机画面吧!

                grub 开机画面表示图
                图 3.5.1、grub 开机画面表示图

                由于鸟哥将隐蔽选单的功用取消了,因而你会间接看到这四个选单,同时会有读秒的咚咚在倒数。 选单局部的画面实在便是 title 前面的笔墨啦!你如今晓得怎样修正 title 前面的笔墨了吧! ^_^。 假如你运用上下键去选择第二 (/dev/hda1 boot sector) 或第三 (MBR loader) 时,会发明异样的画面反复呈现! 这是由于那两个是 loader 移交罢了嘛!而我们都运用相反的 grub 与相反的 menu.lst 设定档! 因而这个画面就会反复呈现了!如许理解乎?

                别的,假如你再细心看的话,会发明到上图中底部另有一些细部的选项,好像有个 'e' edit 的样子! 没错~ grub 援助线上编修指令喔!这是个很有效的功用!假设方才你将 menu.lst 的内容写错了,招致呈现无法开机的题目时, 我们可以查阅该 title 选单的内容并加以修正喔!举例来说,我想要晓得第一个选单的实践内容时,将反白光棒挪动到第一个选单, 再按下 'e' 会进入如下画面:

                grub 单一选单内容
                图 3.5.2、grub 单一选单内容

                哈哈!这不便是我们在 menu.lst 外面设定的工具吗?没错!此时你还可以持续进一步修正喔! 留意看到上图最底下的阐明,你还可以运用:

                • e:进入 grub shell 的编辑画面;
                • o:在游标地点行底下再新增一行;
                • d:将游标地点行删除。

                我们说过, grub 是可以间接运用中心文件来开机的,以是,假如您很清晰的晓得你的根目次 (/) 在谁人 partition ,并且晓得你的中心文件档名 (通常都市有个 /boot/vmlinuz 保持到准确的档名), 那么间接在图三的画面当中,以上述的 o, d, e 三个按键来编修,成为相似底下如许:

                grub edit 的线上编修功用
                图 3.5.3、grub edit 的线上编修功用

                按下 [Enter] 按键后,然后输出 b 来 boot ,就可以开机啦!以是说,万一你的 /boot/grub/menu.lst 设定错误,或许是由于装置的缘故,或许是由于中心文件的缘故,招致无法顺遂开机时,记得啊,可以在 grub 的选单局部, 运用 grub shell 的方法去盘问 (find) 或许是间接指定中心文件,就可以开机啦! ^_^

                别的,许多时分我们的 grub 能够会发作错误,招致‘连 grub 都无法启动’,那么基本就无法运用 grub 的线上编修功用嘛!怎样办?不要紧啊!我们可以应用具有 grub 开机的 CD 来开机, 然后再以 CD 的 grub 的线上编修,嘿嘿!异样可以运用硬碟下面的中心文件来开机啦!很好玩吧! ^_^


                小标题的图示关于中心功用当中的 vga 设定

                现实上,你的 tty1~tty6 除了 80x24 的剖析度外,还可以有其他剖析度的援助喔!但条件之下是你的中心必需援助 FRAMEBUFFER_CONSOLE 这个中心功用选项才行。怎样确定有没有援助呢?你可以查阅 /boot/config-2.6.18-92.el5 这个文件,然后如许搜索:

                [root@www ~]# grep 'FRAMEBUFFER_CONSOLE' /boot/config-2.6.18-92.el5
                CONFIG_FRAMEBUFFER_CONSOLE=y
                # 这个项目假如呈现 y 那便是有援助啦!假如被表明或是 n ,那便是没援助啦!
                

                那么怎样调解 tty1 ~ tty6 终端机的剖析度呢?先参考底下的表格再说 (此为十进位数值):

                彩度\剖析度640x480800x6001024x768 1280x1024bit
                2567697717737758 bit
                3276878478779079315 bit
                6553678578879179416 bit
                16.8M78678979279532 bit

                假定你想要将你的终端机荧幕剖析度调解到 1024x768 ,且颜色深度为 15bit 色的时分,就得要指定 vga=790 谁人数字! 举例来说,鸟哥的 tty1 就想要如许的剖析度时,你可以如许做:

                [root@www ~]# vim /boot/grub/menu.lst
                ....(后面省略)....
                title CentOS (2.6.18-92.el5)
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790
                        initrd /initrd-2.6.18-92.el5.img
                ....(前面省略)....
                

                重新开机并选择此选单进入 Linux,你跑到 tty1 去看看,嘿嘿!就曾经是 1024x768 的剖析度啰! 只是字会变的很小,但是画面的范畴会加大便是了。不外,某些版本援助的是 16 进位制,以是还需求修正一下款式呢! 普通运用上表当中的值应该就可以了。不外,由于差别的作业零碎与硬体能够会有纷歧样的状况,因而, 下面的值不见得肯定可以在您的呆板下面测试乐成,发起您可以辨别设定看看哩~以找出可以运用的值! ^_^


                小标题的图示BIOS 无法读取大硬碟的题目

                现今的硬碟容量越来越大,假如你运用旧的主机板来布置大容量硬碟时,能够由于零碎 BIOS 或许是其他题目, 招致 BIOS 无法判别该硬碟的容量,此时你的零碎读取能够会有题目。为什么呢?

                我们在本章一开端的开机流程讲过,当进入 Linux 中心功用后,他会自动的再去探测一下整个零碎, 因而 BIOS 捉不到的硬体在 Linux 中心反而能够会可以捉到而正常运用。举例来说,过来许多冤家经常会发明, ‘我的零碎运用 DVD 开机装置时,可以顺遂的装置好 Linux ,但是第一次开机时, 荧幕只呈现黑漆漆的一片,且呈现 grub> 的字样,而无法进入 Linux 零碎中’,这又是怎样一回事?

                • 在装置的进程中,由于是运用 DVD 或 CD 开机,因而载入 Linux 中心不可题目,而中心会去探测零碎硬体,因而可以捉到 BIOS 捉不到的硬碟,此时你的确可以装置 Linux 在大容量的硬碟上,且不会呈现任何题目。

                • 但是在进入硬碟开机时,由于 kernel 与 initrd 文件都是透过 BIOS 的 INT 13 通道读取的, 因而你的 kernel 与 initrd 假如安排在 BIOS 无法判别的磁区中,固然就无法被零碎载入,而仅会呈现 grub shell (grub>) 等候你的处置罢了。

                更多 grub 错误的代码盘问可以究竟下的保持查阅:

                如今你晓得题目地点啦!那便是 BIOS 无法读取大容量磁碟内的 kernel 与 initrd 文件。 那怎样处理呢?很复杂啦!就让 kernel 与 initrd 文件安排在大硬碟的最前头,由于 BIOS 至多可以读到大磁碟的 1024 磁柱内的材料,因而就可以读取中心与假造文件零碎的文件啰。那怎样让 kernel 与 initrd 安排到整颗硬碟的最后面呢?复杂的要命吧!就树立 /boot 独立联系槽,并将 /boot 安排到最后面即可!更多其他的处理方案可参考文后的延伸阅读(注4)

                万一你曾经装置了 Linux 且发作了上述的题目,那该怎办?你可以如许作的:

                • 最复杂的做法,便是间接重装,而且制造出 /boot 挂载的 partition ,同时确认该 partition 是在 1024 cylinder 之前才行。

                • 假如真实不想重装,没有干系,应用我们方才上头提到的 grub 功用,额定树立一个可开机软碟, 或许是间接以光碟机开机,然后以 grub 的编写才能进入 Linux 。

                • 别的的方法实在是骗过 BIOS ,间接将硬碟的 cylinder, head, sector 等等资讯间接写到 BIOS 当中去,云云一来你的 BIOS 能够就可以读失掉与援助的到你的大硬碟了。

                不外,鸟哥照旧发起您可以重新装置,而且制造出 /boot 这个 partition 啦! ^_^!这也是为啥这次更版中, 鸟哥特殊夸大要联系出 /boot 这个联系槽的缘由啊!


                小标题的图示为一般选单加上暗码

                想像一个情况,假如你办理的是一间电脑课堂,这间电脑课堂由于可对外开放,但是你又担忧某些 partition 被先生不警惕的弄乱,因而你能够会想要将某些开机选单作个维护。这个时分,为每个选单作个加密的暗码便是个可行的方案啦! 那怎样在开机的进程外面提供暗码维护呢?起首,你必需要树立暗码,并且还需求是加密当时的喔! 不然人家跑到 /boot/grub/menu.lst 不就可以探查到你的开秘密码了?那怎样树立加密的暗码呢? 我们可以透过 grub 提供的 md5 编码来处置的,如下所示:

                [root@www ~]# grub-md5-crypt
                Password: <==输出暗码
                Retype password: <==再输出一次
                $1$kvlI0/$byrbNgkt/.REKPQdfg287. <==这便是发生的 md5 暗码!
                

                下面发生的最初一行,由 $ 开端到 . 完毕的那行,便是你的暗码颠末 md5 编码当时的咚咚! 将这个暗码复制上去吧!假定我们要将第一个选项参加这个暗码,而第四个选项参加别的的暗码, 那你应该要如许做:

                [root@www ~]# vim /boot/grub/menu.lst
                ....(后面省略)....
                title CentOS (2.6.18-92.el5)
                        password --md5 $1$kvlI0/$byrbNgkt/.REKPQdfg287.
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790
                        initrd /initrd-2.6.18-92.el5.img
                ....(两头省略)....
                title single user mode
                        password --md5 $1$GFnI0/$UuiZc/7snugLtVN4J/WyM/
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet single
                        initrd /initrd-2.6.18-92.el5.img
                

                上表的案例中,我们两个选单进入的暗码并不相反,可以停止同窗的分类啦!不外如许也形成一个题目, 那便是肯定要输出暗码才干够进入开机流程,假如你在远端运用 reboot 重新开机,而且主机后面并没有任何人的话.... 你的主机并不会自动进入开机顺序喔! ^_^

                你必需要留意的是:password 这个项目肯定要在 title 底下的第一行。 不外,此项功用照旧能够被破解的,由于运用者可以透过编辑形式 (e) 进当选单,并删除暗码栏位并按下 b 就可以停止开机流程了!真蹩脚!那怎办?只好透过全体的 password (放在一切的 title 之前) , 然后在 title 底下的第一行设定 lock ,那运用者想要编辑时,也得要输出暗码才行啊!设定有点像如许:

                [root@www ~]# vim /boot/grub/menu.lst
                default=0
                timeout=30
                password --md5 $1$kvlI0/$byrbNgkt/.REKPQdfg287.  <==放在全体设定处
                splashimage=(hd0,0)/grub/splash.xpm.gz
                #hiddenmenu
                title CentOS (2.6.18-92.el5)
                        lock  <==多了锁去世的功用
                        root (hd0,0)
                        kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/1 rhgb quiet vga=790
                        initrd /initrd-2.6.18-92.el5.img
                

                那么重新开机后,画面会像如许:

                grub 加密的表示图
                图 3.8.1、 grub 加密的表示图

                你可以看到最下方仅呈现 p 的功用,由于 2, 3, 4 选单并没有运用 lock ,因而这三个选单运用者照旧可以实行开机顺序, 但是第一个选单由于有 lock 项目,因而除非你输出准确的暗码,不然第一个选单是无法被载入实行的。 别的,这个项目也可以防止你的 menu.lst 在开机的进程中被乱改,是具有失密 menu.lst 的功用啦! 与方才的选单暗码功用差别。


                大标题的图示开机进程的题目处理

                许多时分,我们能够由于做了某些设定,或许是由于不正常关机 (比方未经告诉的停电等等) 而招致零碎的 filesystem 紊乱,此时,Linux 能够无法顺遂开机乐成,那怎样办呢?岂非要重装?固然不需求啦! 进入 run level 1 (单人维护形式) 行止理处置,应该就 OK 的啦!底下我们就来谈一谈怎样处置几个罕见的题目!


                小标题的图示遗忘 root 暗码的处理之道

                各人都晓得鸟哥的影象力欠安,容易忘东忘西的,那假如连 root 的暗码都遗忘了,怎样办? 实在在 Linux 情况中 root 暗码遗忘时照旧可以救返来的!只需可以进入而且挂载 / , 然后重新设定一下 root 的暗码,就救返来啦!这是由于开机流程中,若强迫中心进入 runlevel 1 时, 预设是不需求暗码即可获得一个 root 的 shell 来救济的。整个举措有点像如许:

                1. 重新开机!肯定要重新开机!怎样重开都不要紧;

                2. 在开机进入 grub 选单后, (1)在你要进入的选单下面点 'e' 进入细致设定; (2)将光棒挪动到 kernel 上方并点 'e' 进入编辑画面; (3)然后呈现如下画面来处置:
                  grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet single
                  
                  重点便是谁人特别字体的咚咚啦!按下 [enter] 再按下 b 就可以开机进入单人维护形式了。

                3. 进入单人维护形式后,零碎会以 root 的权限间接给你一个 shell ,此时你就可以实行‘ passwd ’这个指令来重修 root 的暗码啦!然后间接‘ init 5 ’就可以切换成为 X 视窗介面啰!便是这么复杂。

                小标题的图示init 设定档错误

                前一个 root 暗码援救的办法实在可以用在许多中央,独一一个无法援救的状况,那便是 /etc/inittab 这个文件设定错误招致的无法开机!依据开机流程,我们晓得 runlevel 0~6 都市读取 /etc/inittab 设定档, 因而你运用 single mode (runlevel 1) 固然也是要读取 /etc/inittab 来停止开机的。那既然无法进入单人维护形式, 就表现这题无解啰?非也非也,既然预设的 init 无法实行,那我们就通知中心不要实行 init ,改呼唤 bash 啊! 可以略过 init 吗?可以的,异样在开机进入 grub 后,异样在 grub edit 的状况下如许做:

                grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash
                

                由于我们指定了中心呼唤的第一支顺序 (init) 酿成 /bin/bash,因而 /sbin/init 就不会被实行。 又依据开机流程的阐明,我们晓得此时固然可以应用 root 获得 bash 来任务,但此时 (1)除了根目次外,其他的目次都没有被挂载; (2)根目次被挂载成为唯读形态。因而我们还需求停止一些举措才行!如下所示:

                间接进入 bash 的情况
                图 4.2.1、 略过 init 的顺序,间接进入 bash shell

                鸟哥仅下达两个指令,‘ mount -o remount,rw / ’用处是将根目次重新挂载成为可读写,至于‘ mount -a ’则是参考 /etc/fstab 的内容重新挂载文件零碎! 此时你又可以开机停止救济的任务了!只是救济终了后,你得要运用‘ reboot ’重新开机一次才行!


                小标题的图示BIOS 磁碟对应的题目 (device.map)

                由于现在硬碟很廉价啊,以是许多冤家就想说:‘那我能不克不及将 Windows 装置在 /dev/hda 而 Linux 装置在 /dev/hdb , 然后调解 BIOS 的开机安装次序,云云则两套零碎各有各的 loader 装置在一般硬碟的 MBR 当中了!’。 这个想法十分好,云云一来两者就不会相互搅扰,由于每颗磁碟的 MBR 一般有差别作业零碎的 loader 嘛! 题目是,grub 对磁碟的安装代号运用的是探测到的次序啊! 也便是说,你调解了 BIOS 磁碟开机次序后,你的 menu.lst 内的安装代号就能够会对应到错误的磁碟上了!啊!真想哭!

                不要紧的,我们可以透过 /boot/grub/device.map 这个文件来写去世每个安装对 grub 磁碟代号的对应喔! 举例来说,鸟哥的这个文件内容如下:

                [root@www ~]# cat /boot/grub/device.map
                (fd0)   /dev/fd0
                (hd0)   /dev/hda
                

                假如你不清晰怎样处置的话,也可以应用 grub-install 的功用喔!比方:

                [root@www ~]# grub-install --recheck /dev/hda1
                

                如许 device.map 就会自动的被更新了!如许理解乎?


                小标题的图示因文件零碎错误而无法开机

                假如由于设定错误招致无法开机时,要怎样办啊?这就更复杂了!最容易堕落的设定而招致无法顺遂开机的步调,通常便是 /etc/fstab 这个文件了,尤其是运用者在实作 Quota 时,最容易写错参数, 又没有颠末 mount -a 来测试挂载,就立即间接重新开机,真要命!无法开机乐成怎样办? 这种状况的题目大多如上面的画面所示:

                文件零碎错误的表示图
                图 4.4.1、 文件零碎错误的表示图

                看到最初两行,他说可以输出 root 的暗码持续加以救济喔!那请输出 root 的暗码来获得 bash 并以 mount -o remount,rw / 将根目次挂载成可读写后,持续处置吧!实在会形成上述画面能够的缘由除了 /etc/fstab 编辑错误之外,假如你已经不正常关机后,也能够招致文件零碎纷歧致 (Inconsistent) 的状况, 也有能够会呈现相反的题目啊!假如是磁区紊乱的状况,请看到上图中的第二行处, fsck 见告实在是 /dev/md0 堕落, 此时你就应该要应用 fsck 去检测 /dev/md0 才是!比及零碎发明错误,而且呈现‘clear [Y/N]’时,输出‘ y ’吧!

                这个 fsck 的进程能够会很长,并且假如你的 partition 下面的 filesystem 有过多的材料损毁时, 即便 fsck 完成后,能够由于伤到零碎槽,招致某些要害零碎文件材料的损毁,那么照旧是无法进入 Linux 的。此时,就好便是将零碎当中的紧张材料复制出来,然后重新装置,而且查验一下, 能否实体硬碟有毁伤的景象才好!不外普通来说,不太能够会如许啦~ 通常都是 fsck 处置终了后,就可以顺遂再次进入 Linux 了。


                小标题的图示应用 chroot 切换到另一颗硬碟任务

                细心反省一下,你的 Linux 外面应该会有一个名为 chroot 的指令才对!这是啥? 这是‘ change root directory ’的意思啦!意思便是说,可以临时将根目次挪动到某个目次下, 然后行止理某个题目,最初再分开该 root 而回到本来的零碎当中。

                举例来说,补习班中央最容易有两三个 Linux 零碎在统一个主机下面,假定我的第一个 Linux 无法进入了,那么我可以运用第二个 Linux 开机,然后在第二个 Linux 零碎下将第一个 Linux 挂载起来, 最初用 chroot 变更到第一个 Linux ,就可以进入到第一个 Linux 的情况当中行止理任务了。

                你异样也可以将你的 Linux 硬碟拔到另一个 Linux 主机下面去,然后用这个 chroot 来切换, 以处置你的硬碟题目啊!那怎样做啊?粉复杂啦!

                1. 用尽任何办法,进入一个完好的 Linux 零碎 ( run level 3 或 5 );

                2. 假定有题目的 Linux 磁碟在 /dev/hdb1 下面,且他整个零碎的陈列是:
                  	挂载点   安装档名
                  	/     → /dev/hdb1
                  	/var  → /dev/hdb2
                  	/home → /dev/hdb3
                  	/usr  → /dev/hdb5
                  若云云的话,那么在我现在的这个 Linux 底下,我可以树立一个目次,然后可以如许做:
                  	挂载点           安装档名
                  	/chroot/      → /dev/hdb1
                  	/chroot/var/  → /dev/hdb2
                  	/chroot/home/ → /dev/hdb3
                  	/chroot/usr/  → /dev/hdb5
                3. 全部挂载终了后,再输出‘ chroot /chroot ’嘿嘿!你就会发明,怎样根目次 (/) 酿成谁人 /dev/hdb1 的情况啦!如许阐明,明晰吗? ^_^

                大标题的图示重点回忆
                • Linux 不行随意关机,不然容易形成文件零碎紊乱或许是其他无法开机的题目;
                • 开机流程次要是:BIOS、MBR、Loader、kernel+initrd、/sbin/init 等流程
                • Loader 具有提供选单、载入中心文件、转交控制权给其他 loader 等功用。
                • boot loader 可以装置在 MBR 或许是每个联系槽的 boot sector 地区中
                • initrd 可以提供中心在开机进程中所需求的最紧张的模组,通常与磁碟及文件零碎有关的模组;
                • init 的设定档为 /etc/initab ,此文件内容可以设定预设 runlevle、零碎初始化剧本、差别实行品级的效劳启动等;
                • 额定的安装与模组对应,可写入 /etc/modprobe.conf 中;
                • 中心模组的办理可运用 lsmod, modinfo, rmmod, insmod, modprobe 等指令;
                • modprobe 次要参考 /lib/modules/$(uanem -r)/modules.dep 的设定来载入与卸载中心模组;
                • grub 的设定档与相干文件零碎界说档大多安排于 /boot/grub 目次中,设定档名为 menu.lst
                • grub 对磁碟的代号设定与 Linux 差别,次要透过探测的次序来赐与设定。如 (hd0) 及 (hd0,0) 等。
                • menu.lst 内每个选单与 titile 有关,而间接指定中心开机时,至多需求 kernel 及 initrd 两个项目
                • menu.lst 内设定 loader 控制权移交时,最紧张者为 chainloader +1 这个项目。
                • 若想要重修 initrd ,可运用 mkinitrd 处置
                • 重新装置 grub 到 MBR 或 boot sector 时,可以应用 grub shell 来处置。
                • 若想要进入救济形式,可于开机选单进程中,在 kernel 的项目前面参加‘ single ’或‘ init=/bin/bash ’等方法来进入救济形式。
                • 我们可以对 grub 的一般选单赐与差别的暗码。

                大标题的图示本章习题
                ( 要看答案请将滑鼠挪动到‘答:’底下的空缺处,按下左键圈选空缺处即可观察 )
                • 情境模仿题一:应用救济光碟来处置零碎的错误招致无法开机的题目。

                  • 目的:理解救济光碟的功用;
                  • 条件:理解 grub 的原理,而且晓得怎样运用 chroot 功用;
                  • 需求:打字可以再放慢一点啊! ^_^

                  这个局部鸟哥就不捉图了,请各人自行处置啰~假定你的零碎出题目而无法顺遂开机,此时拿出原版光碟,然后重新以光碟来启动你的零碎。 然后你应该要如许作的:

                  1. 应用光碟开机时,到了看到 boot: 的阶段,按下 [F5] 之后会看到可以输出的选项,此时请输出:
                    boot: linux rescue
                    
                    就可以进入救济形式的探测了!

                  2. 然后请选择语系与键盘对应,这个与装置进程是如出一辙啦!以是选择‘ English ’与‘ us ’即可!

                  3. 接上去会问你能否需求启动网络,由于我们的零碎是出题目要处置,以是不需求启动网络啦!选择‘ No’即可;

                  4. 然后就进入救济光碟形式的文件零碎搜索了!这个救济光碟会去找出现在你的主机外面与 CentOS 5.x 相干的作业零碎, 并将该作业零碎汇整成为一个 chroot 的情况等候你的处理!但是他会有三个形式可以选择,辨别是‘continue’持续成为可读写挂载; ‘Read-Only’将探测到的作业零碎酿成唯读挂载;‘Skip’略过这次的救济举措。在这里我们选择‘ Continue ’吧!

                  5. 然后零碎会将探测到的资讯告诉你!普通来说,能够会在荧幕上表现相似如许的讯息:‘ chroot /mnt/sysimage’此时请按下 OK 吧!

                  6. 按下 OK 后,零碎会丢给你一个 shell 运用,先用 df 看一下挂载状况能否准确? 若不准确请手动挂载其他未被挂载的 partition 。比及统统搞定后,应用 chroot /mnt/sysimage 来转成你本来的作业零碎情况吧!比及你将统统出题目的中央都搞定,请 reboot 零碎,且取出光碟,用硬碟开机吧!

                简答题局部:
                • 怎样观察与修正 runlevel 呢?
                  观察很复杂,只需输出‘ runlevel ’就可以得知。而假如要修正现在的 runlevel , 可以间接输出 init [level] 比方要去到 runlevel 3 可以:‘ init 3 ’即可。 假如想要每次开机都设定牢固的 runlevel ,那么可以修正 /etc/inittab 这个文件! 将外面这一行改成:‘id:3:initdefault:’即可。
                • 我有个冤家跟我说,他想要让一个顺序在 Linux 零碎下一开机就启动,但是在关机前会主动的先完毕该顺序,我该怎样发起他?
                  由于 /etc/rc.d/rc[0-6].d 外面有的 Sxxname 与 Kxxname 可以设定开机启动与关机完毕的事变!以是我就可以随便的写一个 script 放在 /etc/rc.d/init.d 外面,并保持到我的 run-level 外头,就可以让他无拘无束的启动与完毕了!
                • 万一不幸,我的一些模组没有方法让 Linux 的中心捉到,但是偏偏这个中心明显就有援助该模组, 我要让该模组在开机的时分就被载入,那么应该写入谁人文件?
                  应该写入 /etc/modprobe.conf (kernel 2.6.x) 或许是 /etc/modules.conf (kernel 2.4.x) 这个文件,他是模组载入相干的中央呢!固然,也可以写入 /etc/sysconfig/modules/* 外面。
                • 怎样在 grub 开机进程当中,指定以‘ run level 1 ’来开机?
                  在开机进入 boot loader 之后,应用 grub shell 的功用,亦即输出‘ e ’进入编辑形式, 然后在 kernel 前面添加:
                  kernel (hd0,0)/boot/vmlinuz ro root=/dev/hda1 .... single
                  谁人 single 也可以改成 1 ,就可以进入。异样的,若运用 lilo 时,按下 tab 按键后, 输出
                  label_name -s
                  就可以进入 run level 1 啰!
                • 由于一些无意之过,招致零碎开机时,只需实行 init 就会发生错误而无法持续开机, 我们晓得可以在开机的时分,不要以 init 载入零碎,可以转换第一支实行顺序, 假定我第一支实行顺序想要改为 /bin/bash ,好让我自行维护零碎(差别于 run level 1 喔!), 该怎样停止此一任务?
                  在开机的进程当中,进入 lilo 或 grub 的画面后,在 kernel 的参数情况下,参加 init=/bin/bash 来代替 /sbin/init ,则可略过 init 与 /etc/inittab 的设定项目,不外,您必需相称熟习 grub 与 lilo 的设定才行喔! ^_^
                • 在 CentOS 当中,我们怎样主动可载入的模组?
                  可以经过设定 /etc/modprobe.conf 或许是将自行做好的设定档写入到 /etc/sysconfig/modules/ 目次中, 而且将档名取为 filename.modules ,留意喔,文件后果务必是 .modules 才行。 相干资讯可以参考 /etc/rc.d/rc.sysinit 喔!
                • 假如你不警惕先装置 Linux 再装置 Windows 招致 boot loader 无法找到 Linux 的开机选单,该怎样援救?
                  办法有许多,比方:
                  (1)藉助第三方软件,装置相似 spfdisk 的软件在 MBR 外面,由于他同时看法 Linux 与 Windows ,以是就可以用他来进入 Linux 啦!
                  (2)或许运用相似 KNOPPIX 的 Live CD 以光碟开机进入 Linux 之后,再以 chroot 软件切换根目次 (/),然后重新装置 grub 等 boot loader ,异样也可以重新让两个作业零碎存在啦!
                  总之,只需你晓得 MBR / Super block / boot loader 之间的相干性,怎样切换都能够啊! ^_^

                大标题的图示参考材料与延伸阅读

                2003/02/10:第一次完成
                2005/09/19:将旧的文章挪动到 此处
                2005/09/26:将 中心编译 一文订为进阶篇,纷歧定要学啦!但是中心模组不行不题,以是,新增一大节!
                2005/09/28:终于给他完成去!好累~
                2005/10/09:加上参考文献材料,以及修正一些些 kernel 开机时, grub 的 vga 设定值的讲解。
                2005/11/09:加上了关于较大硬碟所发生的困扰!
                2006/08/21:MBR 应该只要 512 bytes ,后果误植为 512 Kbytes ,负疚!
                2007/06/27:新增 initrd 的阐明,请参考这里
                2009/04/09:将旧的基于 FC4 的文章挪动到此处
                2009/04/10:取消了 LILO 的 boot loader 阐明!终究这玩意儿曾经退盛行!以是不再夸大!有需求请盘问此处
                2009/04/30:修订终了,增强 init=/bin/bash 的阐明,以及 grub 的暗码办理!
                2009/09/14:参加情境模仿,并依据讨论区 linuxfans 兄的发起,修正了一些中央!概况请参考讨论区发起!



                 
                     
                中国存储网 ChinaStor.com排版整理
                原文作者鸟哥,主页,更多Linux学习材料在线看:Linux零碎办理员手册 - Linux下令大全 - Linux挪用大全- Linux专栏 - 国产Linux