Linux 系统启动 的基本过程和步骤(2)
stage2比较大,从磁盘的启动引导分区读取
至于在stage1和stage2之间存在一个stage1.5,是因为starge1.5具有识别文件系统的能力。
在Linux系统中对GRUB的配置有两种方法:
主要引导管理器:
会将启动引导管理器的stage1安装在MBR上,这时启动引导管理器必须被配置为可以传递控制权到其他操作系统;
次要引导管理器:
会将启动引导管理器的stage1安装在一些分区的引导扇区上,而其他的启动引导管理器会被安装在MBR上,由他们来向Linux启动引导管理器传递控制权。
GRUB在启动过程中可以提供命令行交互界面,可以从ext系列,reiserfs,fat等多种文件系统引导系统,并且可以提供密码加密功能,其内容在
/boot分区下,系统启动过程中由配置文件/boot/grub/grub.conf来定义启动方式,对该配置文件的更改会立即生效。
在配置文件/boot/grub/grub.conf文件中定义的内容包括:
grub所在的分区,引导系统所使用的kernel文件位置,硬件初始化使用的initrd文件位置,以及启动参数。
例如:
grub>root (hd0,0)
--root指令为grub指定了一个根分区
grub>kernel /xen.gz-2.6.18-37.el5 --kernel指令将操作系统内核载入内存
grub>module /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 --module指令加载指定的模块
grub>module /initrd-2.6.18-37.el5xen.img --指定initrd文件
grub>boot
--boot 指令调用相应的启动函数启动OS内核
可见其指定的内容大多数在/boot分区,如果切换到/boot分区之后会看到这些内容:
/boot/vmlinuz-* linux kernel的一个copy;
/boot/initrd*.img 初始化的ram disk文件
/boot/grub/device.map linux设备名和grub设备名的映射文件
/boot/grub/grub.conf 主配置文件
通常GRUB出错几率不是很大,但一旦出现问题恐怕采用最多的方式是重装grub到MBR中。
在这种时候需要注意的问题有:
首先,设备映射关系:
GRUB里面对设备名称的定义和系统中对设备名称的定义方法不一样:
(fd0) /dev/fd0
(hd0) /dev/sda /dev/hda
(hd1) /dev/sdb /dev/hdb
如够进入系统或者救援模式,可执行命令/sbin/grub-install /dev/sda(或者hda)进行GRUB重装:
# /sbin/grub-install device
处于某种原因MBR中信息出错可以使用上面的命令将其重装到磁盘主引导记录中;但是如果在不能进入系统的情况下就需要通过grub的命令行界面进行手动设置,这个时候就要注意上面所提到的映射关系。
同时,在grub命令行中对grub进行手动设置的时候需要注意所使用的命令:
# root (hd0,0) --指定启动分区
# setup(hd0) --表示将grub安装在主引导记录上
# quit --退出grub shell
下面是一个完整的grub.conf文件内容:
[root@dhcp-0-195 ~]# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup001/LogVol00
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$apEcJWbA$DTJ8a6mKn/3yrTTSXBtdH0
title Red Hat Enterprise Linux Client (2.6.18-8.1.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.1.1.el5 ro root=/dev/VolGroup001/LogVol00 crashkernel=128M@16M
initrd /initrd-2.6.18-8.1.1.el5.img
系统启动运行级别的概念以及服务的定制方法;
当initrd可以正常检测和装载之后,最后的工作就基本上由操作系统来进行了。当系统的init进程起来之后系统启动的控制权移交给init进程。
/sbin/init进程是所有进程的父进程,当init起来之后,它首先会读取配置文件/etc/inittab,进行以下工作:
1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,后面需要进行运
行级别的确定及相应服务的启动,(从这个角度可以看出如果要定义系统的init动作,需要修改/etc/rc.d/rc.sysinit脚本)
2)通过对/etc/inittab文件的读取确定启动后进入的运行级别;
3)
在相应的运行级别中执行/etc/rc.d/rcx.d目录下的脚本名称,该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在
/etc/rc.d/rcn.d(n=0~6)目录下,但这些文件均是到/etc/init.d下的相应文件的链接。
系统会按照在该目录下的文件名称和优先级执行对应运行级别目录下的脚本:
在某个运行级别的对应目录下,K开头的服务被关闭,S开头的服务被开启,K在S开始之前执行,在执行过程中按照数字来定义优先级,数字越低优先级越高。
4)按照/etc/rc.d/rcX.d目录中的定义,系统会于后台启动相应的服务,如果要对某个运行级别中的服务进行更具体的定制,通过chkconfig命令来操作,或者通过setup/ntsys/system-config-services来进行定制。
5)在/etc/inittab文件中存在有关key sequence,UPS的脚本定义,启动虚拟终端/sbin/mingetty的设置,这时呈现给用户的就是最终的登录界面。
也就是说后台启动的服务完毕之后,如果系统默认进入字符界面,则运行mgetty进入1-6号终端控制台,如果系统默认进入图形界面,则开启gdm服务进入7号虚拟图形控制台。
至此,系统启动过程完毕。
对于/etc/rc.d/rc.sysinit文件的说明:
/etc/rc.d/rc.sysint -- System Initialization Tasks 执行系统初始化任务的脚本。
它的主要工作有:
配置selinux,
系统时钟,
内核参数(/etc/sysctl.conf),
hostname,
启用swap分区,
根文件系统的检查和二次挂载(读写),
激活RAID和LVM设备,
启用磁盘quota
检查并挂载其它文件系统
这是其基本要实现的工作内容:
#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
# Check SELinux status
# Because of a chicken/egg problem, init_crypto must be run twice. /var may be
# encrypted but /var/lib/random-seed is needed to initialize swap.
# Only read this once.
# Initialize hardware
# Set default affinity
# Load other user-defined modules
# Load modules (for backward compatibility with VARs)
# Start the graphical boot, if necessary; /usr may not be mounted yet, so we
# may have to do this again after mounting
# Configure kernel parameters
# Set the hostname.
# Initialize ACPI bits
# RAID setup
# Device mapper & related initialization
# Update quotas if necessary
# Remount the root filesystem read-write.
# Clean up SELinux labels
# Clear mtab
# Remove stale backups
# Enter mounted filesystems into /etc/mtab
# Mount all other filesystems (except for NFS and /proc, which is already
# mounted). Contrary to standard usage,
# filesystems are NOT unmounted in single user mode.
# Check to see if a full relabel is needed
# Start the graphical boot, if necessary and not done yet.
# Initialize pseudo-random number generator
# Use the hardware RNG to seed the entropy pool, if available
# Configure machine if necessary.
# Clean out /.
# Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
# Clean up /var. I'd use find, but /usr may not be mounted.
# Reset pam_console permissions
# Clean up utmp/wtmp
# Clean up various /tmp bits
# Make ICE directory
# Start up swapping.
顶(0)
踩(0)
上一篇:Linux服务器网络配置
- 最新评论