每日一搬(3):开机关机流程与Loader

刚刚开始学习linux,最近和鸟哥学了不少东西,下面是我转的,和大家一起学习。

 

1.开机关机流程与Loader
a> 载入BIOS的硬件信息,并取得第一个开机装置的代号
b> 读取第一个开机装置的MBR的boot Loader(也就是LILO,grub,spfdisk等)的开机信息
c> 载入kernel核心信息,kernel开始解压缩并尝试驱动所有硬件
d> kernel执行init程序并取得run-level信息
e> init执行/etc/rc.d/rc.sysinit
f> 启动kernel的外挂模块(/etc/modprobe.conf)
g> init执行run-level的各个批次档(Scripts)
h> init执行/etc/rc.d/rc.local
i>  执行/bin/login程序,并等待使用者登入
j>  登入之后开始以shell控制主机。

 

 

2.linux开机的一个简单流程:
Kernel (/boot/vmlinuz)
BIOS -> MBR(硬盘启动) -> Boot Loader -> initrd ->  ->              ...              ->              init ->

system init(/etc/rc.d/rc.sysinit)       ->       启动系统服务与相关启动设定文件(/etc/rc.d/rc.n 或 /etc/sysconfig)

-> 用户自订开机启动程序(/etc/rc.d/rc.local)
-> 根据/etc/inittab的设定,载入终端或X-Window


boot loader要具有两个功能:
a> menu
b> pointer

 

 

3.第一个程序:init
linux系统当中第一个被执行的程序为/sbin/init,也就是我们在用ps aux 查看进程信息时所看到的PID=1的那个进程,我的系统为:root                    1             0.0             0.4             2888             560 ?                   S               Jan10              0:02 init [5]

 

 

4.init的功能:
a> 利用设定文件/etc/inittab来取得开机的等级:run level
b> 再由run level的设定来进行不同的开机服务项目的启动

5.什么是run level?
linux就是根据run level来规定系统使用不同的服务来启动的,让linux的使用环境不同。

 

 

6.run level的等级
根据有无网络以及有无X Windos可将run level分为六个等级:
0——halt (系统直接关机)
1——single user mode (单用户模式,用在系统出问题时的维护)
2——Multi User,Without NFS
3——Full multi-user(完整的,含有网络功能的纯文字模式)
4——Unused (系统保留的)
5——X11 (与run level 3类似,不同的是使用了X Window)
6——reboot

 

 

7.开机时,如何取得系统的run level
从/etc/inittab中取得。

8./etc/inittab的语法:
这个档案的语法是这样的:
[设定项目]:[run level]:[init 的动作行为]:[指令项目]
a. 设定项目:
             最多四个字符,代表 init 的主要工作项目,只是一个简单的代表说明。
b. run level:
             该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与
             5 都会执行。
c. init 的动作项目:
             主要可以进行的动作项目意义有:
             initdefault :代表预设的 run level 设定值;
             sysinit :代表系统初始化的动作项目;
             ctrlaltdel :代表 [ctrl]+[alt]+[del] 三个按键是否可以重新开机的设定;
             wait            :代表后面接的指令项目必须要执行完毕才能继续后面的动作;
             respawn :代表后面接的, init 仍会主动的『重新』启动。
             更多的设定项目请参考 man inittab 的说明。
d. 指令项目:
             亦即应该可以进行的指令,通常是一些 script 啰。

一个例子:
----------------------------------------------------------------------------------------------------
[root@linux ~]# vi /etc/inittab
# 设定系统开机预设的 run level 设定项目:
id:3:initdefault:

# 开始进行 run level 的服务启动前,使用来侦测与初始化系统环境的设定文件:
si::sysinit:/etc/rc.d/rc.sysinit

# 7 个不同 run level 的,需要启动的服务的 scripts 放置路径:
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

# 是否允许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# 本机端终端机启动的个数:
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 Window (run level 5) 环境下的启动 script 设定项目:
x:5:once:/etc/X11/prefdm -nodaemon

 


----------------------------------------------------------------------------------------------------
9.系统初始化(system initialization)程序为?
linux 系统初始化程序为: /etc/rc.d/rc.sysinit

 

----------------------------------------------------------------------------------------------------

10. /etc/rc.d/rc.sysinit主要做哪些工作?
a>         取得网络环境与主机类型:/etc/sysconfig/network
a>         测试与挂载内存设备/proc与USB设备/sys
a>         决定是否启动SELinux
a>         外围设备的检测与PNP参数的测试
               核心在开机时检测结果保存在/proc/sys/kernel modprobe中,主要检测ide/scsi/网络/音效等
a> 用户自订模块的载入
              用户可以在/etc/sysconfig/modules/*.modules中加入自订模块
a>        载入核心的相关设定:/etc/sysctl.conf
a>        设定系统时间 clock
a>        设定终端字符
a>        设定RAID与LVM等硬盘功能
a>        以fck检查磁盘文件系统
a>        进行磁盘quota的转换
a>        重新以可读取模式挂载系统磁盘
a>        启动quota
a>        启动随机数装置
a>        清除开机过程中暂存文件
a>        将开机相关信息载入/var/log/dmesg当中。

11.启动系统服务与相关启动设定文件:

 

----------------------------------------------------------------------------------------------------
linux启动时与系统服务有关的设定文件为:
/etc/rc.d/rc.n 以及 /etc/sysconfig

12.其他开机相关事项:
a>     关于模块:/etc/modprobe.conf
b>     /etc/sysconfig/*
       这里要注意几个authconfig,clock,desktop,i18n,keyboard&mouse,network,network-scripts

 

----------------------------------------------------------------------------------------------------

13.run level
a>    查看当前run level
     # runlevel
b>    切换run level
◆要每次开机都执行某个run level,则需修改/etc/inittab中:
id:3:initdefault:
中的数字。
◆如果临时变更系统run level,则以根用户运行init [0-6]来运行。
c>    假设由init 5改到init 3,则更改run level时系统做了什么?
◆对比/etc/rc.d/rc3.d及/etc/rc.d/rc5.d内K与S开头的档案:
◆关闭/etc/rc.d/rc5.d中不存在于/etc/rc.d/rc3.d中的服务
◆启动/etc/rc.d/rc3.d中不存在于/etc/rc.d/rc5.d中的服务。

13.核心与核心模块
(1)目前的核心都是模块化(modules)的。
(2)核心的模块位置
a> 核心:/boot/vmlinuz 或 /boot/vmlinuz-version
b> 核心解压缩所需RAM Disk:/boot/initrd( /boot/initrd-version)
c> 核心模块:/lib/modules/version/kernel 或 /lib/modules/`uname -r`/kernel
d> 核心原代码: /usr/src/linux (需要另外安装)

(3) 如果核心被顺利载入系统中,那么会有几个信息记录下来:
a> 核心版本: /proc/version
b> 核心功能: /proc/sys/lernel

(4) 如果有新硬件,系统不支持,则可以有这样两种访求:
a> 加入最新的硬件驱动程序原始码,重新编译内核;
b> 将该硬件的驱动程序编译为模块,并在开机时载入该模块。

 

----------------------------------------------------------------------------------------------------

14.核心模块放置处:
    /lib/modules/`uname -r`/kernel中,里面又分这样几个目录:
-----------------------------------------------------------------------------------
arch     :与硬件平台有关的项目,例如 CPU 的等级等等;
crypto     :核心所支持的加密的技术,例如 md5 或者是 des 等等;
drivers     :一些硬件的驱动程序,例如显示卡、网络卡、PCI 相关硬件等等;
fs     :核心所支持的 filesystems ,例如 vfat, reiserfs, nfs 等等;
lib     :一些函式库;
net     :与网络有关的各项协议数据,还有防火墙模块 (net/ipv4/netfilter/*) 等等;
sound     :与音效有关的各项模块;

 


-----------------------------------------------------------------------------------

15.核心模块的相关性
保存在/lib/modules/`uname -r`/modules.dep中

 

 

16.modules.dep可以用depmod来建立

-----------------------------------------------------------------------------------
depmod [-Ane]
参数:
-A :不加任何参数时, depmod 会主动的去分析目前核心的模块,并且重新写入
       /lib/modules/`uname -r`/modules.dep 当中。若加入 -A 参数时,则 depmod
       会去搜寻比 modules.dep 还要新的模块,如果真找到新模块,才会更新。
-n :不写入 modules.dep ,而是将结果输出到屏幕上(standard out);
-e :显示出目前已加载的不可执行的模块名称
范例:

范例一:若我已经做好一个网络卡驱动程序,假设文件名为 a.ko,该如何更新核心相依性?
[root@linux ~]# cp /full/path/a.ko /lib/modules/`uname -r`/kernel/drivers/net
[root@linux ~]# depmod
-----------------------------------------------------------------------------------

 


17.核心模块的察看
a> 显示系统已加载的模块 lsmod
     列出模块名称、模块大小以及是否其他模块所使用
b> 查阅模块信息 modinfo

 

 

18.核心模块的加载与移除
a> 老的做法:
      insmod 加载模块
       rmmod 移除模块
b> 常用方法:
      modprobe [-cflr] module_name
-c 列出目前系统中所有模块
-f    强制加载
-l    列出 /lib/modules/`uname -r`/kernel 当中的所有的模块完整名称
-r    移除modules

 

 

19.核心模块的额外参数设定:
/etc/modprobe.cof

 

 

20.Boot Loader
a> MBR是整个硬盘的第一个sector,其大小不会超过512bytes;
       Super Block,可以想像成每个分区partition的第一个扇区first sector。
b> Boot Loader可以指定核心文件来开机,也可以指定某个super block当中boot loader接管开机的核心载入。
c> linux 可以选择将boot loader安装在MBR或者是super block当中,但windows系统则几乎默认会同时安装在MBR与Super block当中。
d> 在安装多重系统时,最好先安装windows后安装linux,因为先安装linux,然后再安装windows,则windows会强制将MBR的boot loader覆盖掉,这样,就无法用windows的boot loader来启动linux了。

 

 

21.Boot Loader--Grub:
(1)Grub的优点:
grub是较新的boot loader,它的优点很多,包括:
a> 认识与支持较多的filesystem,并且可以使用grub的主程序直接在filesystem当中搜寻核心;
b> 开机的时候,可以‘自行编辑与修改开机设定项目’,类似bash的指令模式;
c> 可以动态搜寻设定文件,而不需要在修改设定文件后重新安装grub。亦即我们只需修改/boo/grub/menu.lst的设定,下次开机就生效了。
(2)Grub的设定文件: /boot/grub/menu.lst
(3)Grub中硬盘的表示:
    grub中的硬盘表示,有点类似
       (hd0,0)
第一个搜索到的硬盘,代号为(hd0),该硬盘的第一个分区为(hd0,0)

 

 

22.Boot Loader --LILO:
(1) LILO的设定文件为:/etc/lilo.conf
(2) 与Grub的设定文件/boot/grub/menu.lst同样分为两部分:
a> 整体环境设定
b> 每个开机设定

你可能感兴趣的:(C++,linux,windows,C#,网络协议)