|
|
Linux
| Linux 私房菜: |
基础篇 » 五.Linux系统管理员 » 21.启动流程、模块管理 与 loader |
重点回顾
- Linux 不可随意关机,否则容易造成文件系统错乱或者是其他无法启动的问题;
- 启动流程主要是:BIOS、MBR、Loader、kernel+initrd、/sbin/init 等流程
- Loader 具有提供菜单、加载核心文件、转交控制权给其他 loader 等功能。
- boot loader 可以安装在 MBR 或者是每个分割槽的 boot sector 区域中
- initrd 可以提供核心在启动过程中所需要的最重要的模块,通常与磁碟及文件系统有关的模块;
- init 的配置档为 /etc/inittab ,此文件内容可以配置默认 runlevel、系统初始化脚本、不同运行等级的服务启动等;
- 额外的装置与模块对应,可写入 /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 的个别菜单给予不同的口令。
本章习题
( 要看答案请将鼠标移动到『答:』底下的空白处,按下左键圈选空白处即可察看 )
(1)情境模拟题一
利用救援光盘来处理系统的错误导致无法启动的问题。
- 目标:了解救援光盘的功能;
- 前提:了解 grub 的原理,并且知道如何使用 chroot 功能;
- 需求:打字可以再加快一点啊!
这个部分鸟哥就不捉图了,请大家自行处理罗~假设你的系统出问题而无法顺利启动,此时拿出原版光盘,然后重新以光盘来启动你的系统。 然后你应该要这样作的:
- 利用光盘启动时,到了看到 boot: 的阶段,按下 [F5] 之后会看到可以输入的选项,此时请输入:
[mw_shl_code=applescript,false]boot: linux rescue[/mw_shl_code]
就能够进入救援模式的侦测了!
- 然后请选择语系与键盘对应,这个与安装过程是一模一样啦!所以选择『 English 』与『 us 』即可!
- 接下来会问你是否需要启动网络,因为我们的系统是出问题要处理,所以不需要启动网络啦!选择『 No』即可;
- 然后就进入救援光盘模式的文件系统搜寻了!这个救援光盘会去找出目前你的主机里面与 CentOS 5.x 相关的操作系统, 并将该操作系统汇整成为一个 chroot 的环境等待你的处置!但是他会有三个模式可以选择,分别是『continue』继续成为可读写挂载; 『Read-Only』将侦测到的操作系统变成唯读挂载;『Skip』略过这次的救援动作。在这里我们选择『 Continue 』吧!
- 然后系统会将侦测到的资讯通知你!一般来说,可能会在萤幕上显示类似这样的信息:『 chroot /mnt/sysimage』此时请按下 OK 吧!
- 按下 OK 后,系统会丢给你一个 shell 使用,先用 df 看一下挂载情况是否正确? 若不正确请手动挂载其他未被挂载的 partition 。等到一切搞定后,利用 chroot /mnt/sysimage 来转成你原本的操作系统环境吧!等到你将一切出问题的地方都搞定,请 reboot 系统,且取出光盘,用硬盘启动吧!
(2)简答题部分
- 如何察看与修改 runlevel 呢?[jzsjiale_fold=简答]察看很简单,只要输入『 runlevel 』就可以得知。而如果要修改目前的 runlevel , 可以直接输入 init [level] 例如要去到 runlevel 3 可以:『 init 3 』即可。 如果想要每次启动都配置固定的 runlevel ,那么可以修改 /etc/inittab 这个文件! 将里面这一行改成:『id:3:initdefault:』即可。[/jzsjiale_fold]
- 我有个朋友跟我说,他想要让一个程序在 Linux 系统下一启动就启动,但是在关机前会自动的先结束该程序,我该怎么建议他?[jzsjiale_fold=简答]由於 /etc/rc.d/rc[0-6].d 里面有的 Sxxname 与 Kxxname 可以配置启动启动与关机结束的事项!所以我就可以轻易的写一个 script 放在 /etc/rc.d/init.d 里面,并连结到我的 run-level 里头,就可以让他自由自在的启动与结束了![/jzsjiale_fold]
- 万一不幸,我的一些模块没有办法让 Linux 的核心捉到,但是偏偏这个核心明明就有支持该模块, 我要让该模块在启动的时候就被加载,那么应该写入那个文件?[jzsjiale_fold=简答]应该写入 /etc/modprobe.conf (kernel 2.6.x) 或者是 /etc/modules.conf (kernel 2.4.x) 这个文件,他是模块加载相关的地方呢!当然,也可以写入 /etc/sysconfig/modules/* 里面。[/jzsjiale_fold]
- 如何在 grub 启动过程当中,指定以『 run level 1 』来启动?[jzsjiale_fold=简答]在启动进入 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 罗![/jzsjiale_fold]
- 由於一些无心之过,导致系统启动时,只要运行 init 就会产生错误而无法继续启动, 我们知道可以在启动的时候,不要以 init 加载系统,可以转换第一支运行程序, 假设我第一支运行程序想要改为 /bin/bash ,好让我自行维护系统(不同於 run level 1 喔!), 该如何进行此一工作?[jzsjiale_fold=简答]在启动的过程当中,进入 lilo 或 grub 的画面后,在 kernel 的参数环境下,加入 init=/bin/bash 来取代 /sbin/init ,则可略过 init 与 /etc/inittab 的配置项目,不过,您必须相当熟悉 grub 与 lilo 的配置才行喔! ^_^[/jzsjiale_fold]
- 在 CentOS 当中,我们如何自动可加载的模块?[jzsjiale_fold=简答]可以经由配置 /etc/modprobe.conf 或者是将自行做好的配置档写入到 /etc/sysconfig/modules/ 目录中, 并且将档名取为 filename.modules ,注意喔,文件结果务必是 .modules 才行。 相关资讯可以参考 /etc/rc.d/rc.sysinit 喔![/jzsjiale_fold]
- 如果你不小心先安装 Linux 再安装 Windows 导致 boot loader 无法找到 Linux 的启动菜单,该如何挽救?[jzsjiale_fold=简答]方法有很多,例如:
(1)藉助第三方软件,安装类似 spfdisk 的软件在 MBR 里面,因为他同时认识 Linux 与 Windows ,所以就可以用他来进入 Linux 啦!
(2)或者使用类似 KNOPPIX 的 Live CD 以光盘启动进入 Linux 之后,再以 chroot 软件切换根目录 (/),然后重新安装 grub 等 boot loader ,同样也可以重新让两个操作系统存在啦!
总之,只要你知道 MBR / Super block / boot loader 之间的相关性,怎么切换都可能啊! [/jzsjiale_fold]
参考数据与延伸阅读
http://wiki.linuxquestions.org/wiki/GRUB_boot_menu
http://forums.gentoo.org/viewtop ... ub+error+collection
- info grub
- GNU 官方网站关於 grub 的说明文件:
http://www.gnu.org/software/grub/manual/html_node/
http://phorum.study-area.org/viewtopic.php?t=14776
|
|