​ Linux系统启动过程介绍 ​

学习操作系统有必要了解一下系统的启动过程,这样在面对各种系统故障的时候能快速定位解决问题,下面以Centos来分析linux系统的启动过程。

1、BIOS自检:当开机的时候,系统进行bios自检工作,当识别出第一块硬盘(IDE SCSI)及其空间之后,系统控制将从BIOS传递到引导装载程序

2、引导装载程序(grub lilo):装载第一块硬盘的前512个字节的物理数据扇区即主引导区MBR到内存中,位于此扇区开始位置的引导装载程序将接管系统控制。

(也可以这么理解,在第一步完成之后,加载MBR到内存中,引导装载程序接管系统管制)

3、加载RAM盘:提供了一个最小的linux环境,可在装入实际根文件系统之前执行程序。

4、RAM盘运行init:此程序执行装入真正的根文件系统所需的所有操作。

     ***装载内核模块:要访问最终的根文件系统,内核需要装载适当的文件系统驱动程序

     ***管理RAID和LVM:若系统配置在RAID或LVM下保存根文件系统,那么init将设置LVM或RAID以支持稍后对根文件系统的访问

    ****加载最终的根文件系统:找到根文件系统后,对其进行错误检查并装入。

5、运行根文件系统上的init:如果上面四步都成功的话,将清除RAM盘并读取系统引导配置文件 /etc/inittab执行真正的根文件系统上的init 程序

 

 有关术语说明:

      一、/etc/rc.d/rc.sysinit:指系统初始化脚本

              初始化的相关内容为:

              1、挂载/proc文件系统

              2、设置系统时钟

              3、一般系统环境变量设置

              4、初始化妆USB和HID

              5、设置PnP

              6、加载键盘映射、加载系统字体、加载系统模块

              7、初始化RAID、初始化卷映射

              8、检查文件系统、挂载文件系统

              9、激活磁盘限额、激活SWAP分区

              10、初始化串口设备

              11、生成系统启动信息log文件

二、/etc/rc.d/rcX.d/[KS]*:根据运行级别配置服务

   K表示终止以K开头的服务

  S表示启动以S开头的服务

 

三、/etc/rc.d/rc.local:执行本地特殊配置

其他:不同运行级别的特殊服务

 mingetty:除了运行级别1

 xdm/gdm/kdm:运行级别5

 

init 进程由linux内核引导运行的,是系统运行中第一个进程,其进程号永远都是1。init 进程运行后将安装其配置文件,引导运行系统所需的其他进程, init 进程将作为这些进程的父进程。

下面是/etc/inittab中的配置信息:如图示

Linux系统启动过程介绍_运行级别

 

定义各种运行级别

0 - halt (Do NOT set initdefault to this)

1 - Single user mode 2 - Multiuser, without NFS (The same as 3, if you do not have networking)

3 - Full multiuser mode

4 - unused

5 - X11

6 - reboot (Do NOT set initdefault to this)

定义默认的运行级别

id:3:initdefault:

系统初始化

si::sysinit:/etc/rc.d/rc.sysinit

不同级别的脚本调用

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

在2、3、4、5运行级别中启动6个虚拟控制台

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

在5运行级别中启动xdm管理器

x:5:respawn:/etc/X11/prefdm -nodaemon

6、显示源文件

7、登录

 

 

一、CentOS 启动过程简介

下面将 CentOS 的启动过程简单叙述如下:

1、BIOS自检:当识别出第一块硬盘及其空间之后,系统控制将从 BIOS 传递到引导装载程序。

2、引导装载程序:装载第一块硬盘的前 512 个字节的物理数据扇区(主引导记录,MBR)到内存中,位于此扇区开始位置的引导装载程序(如:GRUB)将接管系统控制。

引导装载程序执行的命令决定了引导进程剩余的部分。引导装载程序随后将控制传递到实际的操作系统(Linux 内核)。

3、加载RAM盘:提供了一个最小的 Linux 环境,可在装入实际根文件系统之前执行程序。

4、在RAM盘中运行init:这个程序执行装入真正的根文件系统所需的所有操作。

装载内核模块:根据硬件配置的不同,可能需要一些特殊的驱动程序来访问计算机的硬件部件(最重要的部件是硬盘)。要访问最终的根文件系统,内核需要装载适当的文件系统驱动程序。

管理 RAID 和 LVM:若系统配置在 RAID 或 LVM 下保存根文件系统,则 init 将设置 LVM 或 RAID 以支持稍后对根文件系统的访问。

加载最终的根文件系统:找到根文件系统后,对其进行错误检查并装入。

5、运行根文件系统上的 init:若上述操作成功,将清除RAM盘并读取系统引导配置文件 /etc/inittab 执行真正的根文件系统上的 init 程序。

/etc/rc.d/rc.sysinit——系统初始化脚本

挂载/proc文件系统

设置系统时钟

系统一般的环境变量设置(如主机名等)

初始化USB和HID设备

设置PnP

加载键盘映射

加载系统字体

加载系统模块(如声音模块等)

初始化 RAID

初始化卷映射

检查文件系统

挂载文件系统

激活磁盘限额

激活swap分区

初始化串口设备

生成系统启动信息的log文件

等等

/etc/rc.d/rcX.d/[KS]* ——根据运行级别(X)配置服务:

终止以“K”开头的服务

启动以“S”开头的服务

/etc/rc.d/rc.local——执行本地特殊配置

其他——不同运行级别的特殊服务:

mingetty (除了运行级别1)

xdm/gdm/kdm (运行级别5)



二、文件 /etc/inittab 说明

以#开头的行为注释行,其他的每一行包括如下四个字段(每个字段用“:”间隔):

id:runlevels: action:process

其中:

id : 是各有效行的标识符。对定义getty的各行来说,该标识符指定getty运行的终端(即设备文件/dev/tty之后的数字字符);

对其他行来说,除了有长度限制外没有特殊要求,但该字段在整个文件中必须唯一。

runlevels : 指定运行级别,各运行级别由单个的数字表示,可以指定多个运行级别,但不能包含任何间隔符。

action : 指定运行状态,可以有如下的取值

  respawn : 当下一个字段指定的命令结束后,重新运行该命令

  wait : 执行下一个字段指定的命令,并等待其结束再运行其他命令

  once : 执行下一个字段指定的命令,不等待其结束

  boot : 在系统启动时执行下一个字段指定的命令,并忽略运行级别

  bootwait : 在引导完成后执行下一个字段指定的命令,并等待其结束

  off : 指示init撤消下一个字段指定的命令所对应的进程

  initdefault : 指定首次启动时所进入的运行级别状态

  sysinit : 在与系统控制台通讯时执行下一个字段指定的命令

  powerwait : 当出现电源错误时执行下一个字段指定的命令,并等待其结束

  powerfail : 当出现电源错误时执行下一个字段指定的命令,不等待其结束

  powerokwait : 当电源恢复时执行下一个字段指定的命令

  ctrlaltdel : 当按下Ctrl+Alt+Del组合键时执行下一个字段指定的命令

process : 该字段指定要运行的命令



三、常见的系统进程介绍

1、硬件管理守护进程

apmd(Advanced Power Management)是高级电源管理。传统的电源管理标准,对于笔记本电脑比较有用,可以了解系统的电池电量信息。并将相关信息通过 syslogd 写入日志。也可以用来在电源不足时关机。

acpid(Advanced Configuration and Power Interface)是为替代传统的 APM 电源管理标准而推出的新型电源管理标准。通常笔记本电脑需要启动电源进行管理。

alsasound Alsa 声卡驱动守护程序。 Alsa和 OSS/Free 及 OSS/Linux 兼容,但是有自己的接口,甚至比OSS优秀。

cups cups(Common UNIX Printing System)是通用UNIX打印守护进程,为Linux提供第三代打印功能。

cups 打印系统切换守护进程。

cups-lpd cups 行打印守护进程。

lpd lpd 是老式打印守护程序,负责将 lpr 等程序提交给打印作业。

gpm gpm(General Purpose Mouse Daemon )守护进程为文本模式下的 Linux 程序如 mc(Midnight Commander)提供了鼠标的支持。它也支持控制台下鼠标的拷贝,粘贴操作以及弹出式菜单。

irqbalance 对多个系统处理器环境下的系统中断请求进行负载平衡的守护程序。如果你只安装了一个CPU,就不需要加载这个守护程序。

kudzu 硬件自动检测程序,会自动检测硬件是否发生变动,并相应进行硬件的添加、删除工作。

当系统启动时,kudzu会对当前的硬件进行检测,并且和存储在 /etc/sysconfig/hwconf中的硬件信息进行对照,如果某个硬件从系统中被添加或者删除时,

那么 kudzu 就会察觉到,并且通知用户是否进行相关配置,然后修改 /etc/sysconfig/hwconf,使硬件资料与系统保持同步。

如果 /etc/sysconfig/hwconf 这个文件不存在,那么kudzu将会从 /etc/modprobe.conf、/etc/sysconfig/network-scripts/ 和 /etc/X11/XF86Config 中探测已经存在的硬件。

如果你不打算增加新硬件,那么就可以关闭这个启动服务,以加快系统启动时间。

lm_seroems 检测主板工作情况守护进程。

mdmonitor RAID 相关设备的守护程序。

microcode_ctl 可编码以及发送新的微代码到内核以更新 Intel IA32 系列处理器守护进程。

pcmcia 主要用于支持笔记本电脑接口守护进程。

rawdevices 在使用集群文件系统时用于加载 raw 设备的守护进程。

smartd Self Monitor Analysis and Reporting Technology System,监控你的硬盘是否出现故障。

2、系统管理守护进程

atd at和batch命令守护进程,用户用at命令调度的任务。batch用于在系统负荷比较低时 运行批处理任务。

anacron 一个自动化运行任务守护进程。CentOS 随带四个自动化任务的工具:cron、 anacron、at、和 batch。 当你的Linux服务器并不是全天运行,这个 anacron 就可以帮你执行在”crontab”设定的时间内没有执行的工作。

crond cron 周期地运行用户 调度任务。

cpuspeed 监测系统空闲百分比,降低或加快CPU时钟速度和电压从而在系统空闲时将能源消耗降为最小,而在系统繁忙时最大化加快系统执行速度。

iiim 中文输入法服务器守护进程。

psacct 该守护进程包括几个工具用来监控进程活动的工具,包括ac,lastcomm, accton 和sa。

random 保存和恢复系统的高质量随机数生成器,这些随机数是系统一些随机行为提供的。

syslog 一个让系统引导时启动 syslog 和 klogd 系统日志守候进程的脚本。

xfs X Window 字型服务器守护进程,为本地和远程 X 服务器提供字型集。

yum-updatesd RPM 操作系统自动升级和软件包管理守护进程。

amd 自动安装NFS守护进程。

atalk AppleTalk网络守护进程。注意不要在后台运行该程序,该程序的数据结构必须在运行其他进程前先花一定时间初始化。

autofs 自动安装管理进程automount,与NFS相关,依赖于NIS服务器。

netdump 远程网络备份服务器守护进程。

diskdump 服务器磁盘备份守护进程。

portmap 该守护进程用来支持RPC连接,RPC 被用于 NFS 以及 NIS 等服务。

netfs Network Filesystem Mounter,该进程安装和卸载NFS、SAMBA和NCP网络文件系统。

nfs 网络文件系统守护进程。

nfslock NFS是一个流行的通过TCP/IP网络共享文件的协议,此守护进程提供了NFS文件锁定功能。

rsync remote sync 远程数据备份守护进程。

3、数据库管理守护进程

arptables_jf 为 arptables 网络的用户控制过滤的守护进程。

arpwatch 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库。

bootparamd 引导参数服务器,为LAN上的无盘工作站提供引导所需的相关信息。

ldap ldap(Lightweight Directory Access Protocol)目录访问协议服务器守护进程。

mysqld 一个快速高效可靠的轻型 SQL 数据库引擎守护进程。

postgresql PostgreSQL 关系数据库引擎。

ypbind 为NIS(网络信息系统)客户机激活 ypbind 服务进程。

yppasswdd NIS口令服务器守护进程。

ypserv NIS 主服务器守护进程。

4、网络设备守护进程

bluetooch 蓝牙服务器守护进程。

netplugd(network cable hotplug management daemon)守护程序,用于监控一个或多个网络接口的状态,当某些事件触发时运行一个外部脚本程序。

messagebus D-BUS 是一个库,为两个或两个以上的应用程序提供一对一的通讯。 dbus-daemon-1 是一个应用程序,它使用这个库来实现 messagebus守护程序。多个应用程序通过连接 messagebus 守护程序可以实现与其他程序交换信息。

pppoe ADSL连接守护进程。

irda 红外端口守护进程。

isdn isdn启动和中止服务守护进程。

snmpd 本地简单网络管理守护进程。

network 激活/关闭启动时的各个网络接口守护进程。

iptables iptables 防火墙守护进程。

5、网络服务守护进程

chargen 使用 tcp 协议的 chargen server,chargen(Character Generator Protocol)是一种网络服务,主要功能是提供类似远程打字的功能。

chargen-udp 使用UDP协议的chargen server。

dhcpd 动态主机控制协议(Dynamic Host Control Protocol)的服务守护进程。

daytime 使用TCP 协议的 Daytime守护进程,该协议为客户机实现从远程服务器获取日期 和时间的功能。预设端口:13。

daytime-udp 使用 UDP 协议的 Daytime守护进程。

time 该守护进程从远程主机获取时间和日期,采用TCP协议。

time-udp 该守护进程从远程主机获取时间和日期,采用UDP协议。

dc_server 使用SSL安全套接字的代理服务器守护进程。

dc_client 使用SSL安全套接字的客户端守护进程。

echo 服务器回显客户数据服务守护进程。

echo-udp 使用UDP协议的服务器回显客户数据服务守护进程。

named DNS(BIND)服务器守护进程。

gated 网关路由守护进程。它支持各种路由协议,包括RIP版本1和2、DCN HELLO协议、 OSPF版本2以及EGP版本2到4。

httpd Web服务器Apache守护进程,可用来提供HTML文件以 及CGI动态内容服务。

innd Usenet新闻服务器守护进程。

ntpd Network time Protocol daemon(网络时间校正协议)。ntpd是用来使系统和一个精确的时间源保持时间同步的协议守护进程。

proftpd proftpd 是Unix下的一个配置灵活的 ftp 服务器的守护程序。

readahead、readahead_early readahead和readahead_early是在Fedora core 2中最新推出的两个后台运行的守护程序。其作用是在启动系统期间,将启动系统所要用到的文件首先读取到内存中,然后在内存中进行执行,以加快系统的启动速 度。

routed 该守护程序支持RIP协议的自动IP路由表维护。RIP主要 使用在小型网络上,大一点的网络就需要复杂一点的协议。

rsh 远程主机上启动一个shell,并执行用户命令。

rwhod 允许远程用户获得运行rwho守护程序的机器上所有已登录用户的列表。

rstatd 一个为LAN上的其它机器收集和提供系统信息的守候进程。

ruserd 远程用户定位服务。 这是一个基于RPC的服务,它提供关于当前记录到 LAN 上一个机器日志中的用户信息

rwalld 远程用户消息发送服务。这是一项基于RPC的服务,允许用户给每个注册到 LAN 机器上的其他终端写消息。

rwhod rwhod 服务进程,它支持 LAN 的 rwho 和 ruptime 服务。

saslauthd 使用 SASL 的认证守护进程。

sendmail sendmail MTA 守护进程。

postfix postfix MTA 守护进程。

smb Samba 文件共享/打印服务守护进程。

squid 代理服务器squid守护进程。

sshd OpenSSH 服务器守护进程。Secure Shell Protocol可以实现安全地远程管理主机。

tux 在Linux内核中运行apache服务器的守护进程。

vsftpd vsftpd 服务器的守护进程。

vncserver VNC (Virtual Network Computing,虚拟网络计算),它提供了一种在本地系统上显示远程计算机整个”桌面”的轻量型协议。

inetd 因特网操作守护程序。监控网络对各种它管理的服务的需求,并在必要的时候启动相应的服务程序。在 Redhat 和 Mandrake 中被xinetd 代替。Debian, Slackware, SuSE仍然使用。

xinetd 支持多种网络服务的超级服务器守护进程。

eklogin 使用 kerberos 5 加密的一种rlogin 会话鉴证守护进程。

gssftp 使用 kerberos 5 认证的 ftp 守护进程

krb5-telnet 使用 kerberos 5认证的 telnet 守护进程。

klogin 使用 kerberos 5 认证远程登录守护进程。

kshell 使用 kerberos 5 认证的远程 Shell 守护进程。

 

六、LVM 命令集

LVM 有一整套的命令集,下表列出了常用的命令。

任务 PV VG LV

创建 pvcreate vgcreate lvcreate

删除 pvremove vgremove lvremove

扫描列表 pvscan vgscan lvscan

显示属性 pvdisplay vgdisplay lvdisplay

显示信息 pvs vgs lvs

改变属性 pvchange vgchange lvchange

扩展 vgextend lvextend

缩减 vgreduce lvreduce

重命名 vgrename lvrename

改变容量 pvresize lvresize

检查一致性 pvck vgck



七、sar 的命令常用选项

选项 说明

-A 等价于 -bBcdqrRuvwWy -I SUM -I XALL -n ALL -P ALL

-b 显示I/O和传送速率的统计信息

-B 输出内存页面的统计信息

-c 输出进程统计信息,每秒创建的进程数

-d 输出每一个块设备的活动信息

-i interval 指定间隔时长,单位为秒

-p 显示友好设备名字,以方便查看,也可以和-d 和-n 参数结合使用,比如 -dp 或-np

-q 输出进程队列长度和平均负载状态统计信息

-r 输出内存和交换空间的统计信息

-R 输出内存页面的统计信息

-t 读取 /var/log/sa/saDD 的数据时显示其中记录的原始时间,如果没有这个参数使用用户的本地时间

-u 输出CPU使用情况的统计信息

-v 输出inode、文件和其他内核表的统计信息

-V 输出版本号信息

-w 输出系统交换活动信息

-W 输出系统交换的统计信息

-y 输出TTY设备的活动信息

-n {DEV|EDEV|NFS|NFSD|SOCK|ALL} 分析输出网络设备状态统计信息。

DEV 报告网络设备的统计信息

EDEV 报告网络设备的错误统计信息

NFS 报告 NFS 客户端的活动统计信息

NFSD 报告 NFS 服务器的活动统计信息

SOCK 报告网络套接字(sockets)的使用统计信息

ALL 报告所有类型的网络活动统计信息

-x {pid|SELF|ALL} 输出指定进程的统计信息。

pid 用 pid 指定特定的进程

SELF 表示 sar 自身

ALL 表示所有进程

-X {pid|SELF|ALL} 输出指定进程的子进程的统计信息

-I {irq|SUM|ALL|XALL} 输出指定中断的统计信息。

irq 指定中断号

SUM 指定输出每秒接收到的中断总数

ALL 指定输出前16个中断

XALL 指定输出全部的中断信息

-P {cpu|ALL} 输出指定 CPU 的统计信息

-o filename 将输出信息保存到文件 filename

-f filename 从文件 filename 读取数据信息。filename 是使用-o 选项时生成的文件。

-s hh:mm:ss 指定输出统计数据的起始时间

-e hh:mm:ss 指定输出统计数据的截至时间,默认为18:00:00



八、杂项

1、查看和切换运行级

用户可以使用如下的命令查看当前系统的运行级:

$ runlevel

用户可以使用如下的命令切换运行级:

# init [0123456Ss]

在 init命令后有一个参数,此参数是要切换到的运行级的代号,如:

  init 0命令表示切换至运行级别 0,即关机。

  init 1命令表示切换至运行级别 1,即进入单用户运行模式。

  init 6命令表示切换至运行级别 6,即重新启动。


2、单用户模式

单用户模式下的根文件系统进入“read-only file system”只读状态,此时,可以使用如下命令以读写方式重新挂装根文件系统:

sh-3.1 # mount -o remount rw -t ext3 /

当用户进入修复模式后,会获得root 用户权限,硬盘中的整个根文件系统已经被挂载到目录“/mnt/sysimage”中


3、查看支持转换的编码

$ iconv -l

编码转换

$ iconv -f ISO-8859-1 -t UTF-8 -o outputfile inputfile

将DOS格式的文本文件转换成 UNIX 格式的文本文件

$ dos2unix dosfile

$ unix2dos linuxfile


4、输入输出重定向

STDIN 0 标准输入 键盘 命令在执行时所要的输入数据通过它来取得

STDOUT 1 标准输出 显示器 命令执行后的输出结果从该端口送出

STDERR 2 标准错误 显示器 命令执行时的错误信息通过该端口送出

<<!……! 实现输入重定向的特例,即here文件

2>或2>>实现错误重定向

&> 同时实现输出重定向和错误重定向


5、利用 find tar 命令增量备份

第一种方式:

先通过 find 命令 -mtime 选项,查找出一定时间前被修改的文件列表 etc.txt

# find /etc -mtime -1 -print | grep -v '/$' > etc.txt


再通过 tar 命令的 -T 选项,将 c.txt 列表中的文件打包,来实现增量备份的功能

# tar zcvf etc.tar.gz -T etc.txt


第二种方式:

先由 find 找出比 /etc/passwd 还要新的文件

# find /etc -newer /etc/passwd

此时显示比  /etc/passwd 的 mtime 还要新的文件

# ll /etc/passwd

-rw-r--r-- 1 root root 6 Jun 27 20:31 /etc/passwd

使用 tar 来进行打包,日期为上面看到的 2011-06-27 20:31:00

# tar zcvf etc.newer.tar.gz --newer-mtime=‘2011-06-27 20:31:00’ /etc/*