【Linux管理】Linux系统启动和引导


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

相关内容