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

时间:2022-04-18 15:34:56

************************************************************************
  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏
************************************************************************

1 linux系统启动和引导

         linux的启动过程为:计算机执行BIOS代码,确认加载并启动内核,内核检测系统的硬件,产生系统的init进程,这个进程总是PID 1;系统必须检查并安装文件系统,而且系统的守护进程必须启动,这些步骤由init进程按照顺序运行一系列rcrun 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使用),grubgrand unified boot loader)成为redhat, susefedora的默认引导加载程序。

         grub设备命名(hd0,0)等同于linux /dev/hda1

         用户将grub安装到引导驱动器/dev/hda1上。

         grub-install ‘(hd0,0)’   #用引号避免shell解析括号

         默认情况下,grub/boot/grub/grub.conf读取它默认的引导配置。

         如果grup10s内(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进行相应的修改。

         引导windowsgrub.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.drc1.drc2.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