************************************************************************ ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************
1 linux系统启动和引导
linux的启动过程为:计算机执行BIOS代码,确认加载并启动内核,内核检测系统的硬件,产生系统的init进程,这个进程总是PID 1;系统必须检查并安装文件系统,而且系统的守护进程必须启动,这些步骤由init进程按照顺序运行一系列rc(run commond)文件脚本
综上,linux典型的引导过程由6个不同的阶段组成。
l 加载并初始化内核
l 检测好配置设备
l 创建内核线程
l 操作员干预
l 执行系统启动脚本
l 多用户模式运行
初始化内核:路径名通常为/boot/vmlinux,在第一个阶段,系统rom加载一个小的引导程序到内存中,然后这个程序在安排载入内核。内核执行检测多少RAM可用,内核占用一部分静态空间(用户进程不可用),然后内核打印信息,物理内存总量和用户进程可用内存量。
配置硬件:BIOS告诉内核有哪些硬件设备,内核需要找到硬件设备并且初始化每个设备。没有检测到设备的驱动会被禁用;
内核线程:内核在用户空间创建init进程。
操作员干预:在单用户环境下,文件系统的根目录以只读方式安装的。/tmp是根目录的一部分,需要使用tmp文件的命令如(vi)不能执行。可以这样mount –o rw,remount / 来将根目录以读写的方式重新安装。
执行启动脚本:由init根据一定的算法来选择运行rc脚本
多用户运行: init直接生产getty进程,来监控终端和控制台接受用户登录。init拥有单用户和多用户的运行级,决定启动哪些资源。
BOIS加载:BIOS选择引导设备(IDE硬盘,CD-ROM等),选定设备读取MBR(硬盘头512字节信息:master boot record主引导记录)。MBR程序告诉CPU从第几个硬盘分区加载引导加载程序(boot loader)。之后boot loader加载内核。
1.1 boot loader引导加载程序
lilo是传统的linux引导加载程序(debian使用),grub(grand unified boot loader)成为redhat, suse和fedora的默认引导加载程序。
grub设备命名(hd0,0)等同于linux /dev/hda1
用户将grub安装到引导驱动器/dev/hda1上。
grub-install ‘(hd0,0)’ #用引号避免shell解析括号
默认情况下,grub从/boot/grub/grub.conf读取它默认的引导配置。
如果grup在10s内(timeout=10)没有接受到来着键盘的输入,那么就自动引导(default=0),
默认配置
default=0
timeout-10
titile redhat linux
root(hd0,0)
kernel /boot/vmlinux ro root=/dev/hda1
root:制定根设备(一个分区)
boot: 以特定的内核影像文件启动系统
1.1.1 lilo: 传统linux引导加载程序
lilo命令通过/etc/lilo.conf的内容安装配置信息。重新运行lilo
boot=/dev/hda 将boot loader on MBR
root=/dev/hda1
delay=20 2秒
image=/vmlinz 内核
lable=linux
read-only
image=/vmlinuz-backup 备份内核
lable=backup
read-only
1.1.2 grub的多重引导配置
先装好操作系统然后对/boot/grub/grub.conf进行相应的修改。
引导windows的grub.conf配置
title windows xp
rootnoverify (hd0,0)
chainloader +1
chainloader这个选项从一个指定的位置加载引导加载程序(从第一个IDE分区引导)
rootnoverify选项确保grub不会尝试指定的分区。如引导三个分区:
hiddenmenu
title windows xp
rootnoverify (hd0,0)
chainloader +1
title red hat
root (hd0,1)
kernel /boot/vmlinuz
title fedora
root (hd0,2)
kenrel /boot/vmlinuz
1.2 启动脚本
传统的init定义7个运行级run level, 0级是完全关闭系统的级别;1级代表单用户模式;2-5表示多用户级别;6级是重新引导(reboot)级别
/etc/initab规定了系统进入到每一个级别时要运行(或者保持运行)的命令initab调用/etc/init.d/rc里面命令,来改变运行级。initab主脚本查找rc0.d、rc1.d、rc2.d …等目录来运行级别的脚本。
当从低向高级别的脚本的时候,按照S开头递增顺序执行,带start参数
ln –s /etc/init.d/cups /etc/rc2.d/s80cups
当从高向低级别过渡的时候,按照K开头数字递减,带stop脚本
ln –s /etc/init.d/cups /etc/rc0.d/k880cups
1.2.1 启动服务配置
在服务启动过程中,redhat引导过程的大多数配置通过操作/etc/sysconfig中的配置文件来完成。
/etc/sysconfig的子目录
l clock:指定时钟类型
l https:决定apache的处理模式
l hwconfg:硬件的信息
l i18n: 操作系统的本地配置:日期格式,语言等。
l init:配置启动脚本的消息显示方式
l network: 全局网络参数:主机名,网关,转发机制
1.3 重新引导和关机
15分钟之后关机
shutdown –h +15 “going down for emergency disk repar”
上午9点半关机
shutdown –h 09:30 “going down for expected downtime is 1 hour”
改变init的运行级别
telinit 1