Bootload 从磁盘上加载 vmlinuz-2.6.18-194.el5 和 initrd-2.6.18-194.el5.img 到内存中并展开,进而完成系统的初始化工作。

[root@node2 ~]# vim /boot/grub/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/sda2
#          initrd /initrd-version.img
#boot=/dev/sda1
# 设置默认启动的操作系统,0 表示:第一个 title 定义的操作系统。
default=0
# 可以这么说,GRUB 是一个交互式的程序,这里定义的“超时时间”,超过 timeout 定义的
# 时间,用户不与 GRUB 进行交互,GRUB就自动启动default的操作系统。
timeout=5
# 设置 GRUB 的背景图片,图片位置在第一块磁盘的第一分区, 站在 Linux 磁盘系统的角度也
# 就是 /boot (dev/sda1 第一分区),
# 也就是说图片的位置在 /boot/grub/splash.xpm.gz
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
# 使用 hiddenmenu 来隐藏 GRUB 菜单。
hiddenmenu
# GRUB
# GRUB 的密码有两种:
#     1、设置 GRUB  的密码,password 设置密码的位置在title定义系统前面。在启动系
#        统时候,如果想要操作控制(如进入单用户模式) GRUB 则需要输入该密码。
#     2、如果 title 使用 password 设置了密码。启动该系统时,要要求用户输入正确有
#       口令,才可以启动该系统的。
password --md5 $1$28AGIPNd$u85jSwiyrsReVQGkZv6JD/
title CentOS (2.6.18-194.el5)root (hd0,0)kernel /vmlinuz-2.6.18-194.el5 ro root=LABEL=/ quietinitrd /initrd-2.6.18-194.el5.img

说明:
    上述就是 grub(boot load)的配置文件,在 grub 的指挥下把磁盘上的 kernel 和 initrd 加载到内存中并运行。

查看 /boot/initrd-2.6.18-194.el5.img 把它拆开就成下述样子

root@node2 ~]# ll /tmp/test/
total 5912
drwx------ 2 root root    4096 Jun 19 07:44 bin
drwx------ 3 root root    4096 Jun 19 07:44 dev
drwx------ 2 root root    4096 Jun 19 07:44 etc
-rwx------ 1 root root    2536 Jun 19 07:44 init
drwx------ 3 root root    4096 Jun 19 07:44 lib
drwx------ 2 root root    4096 Jun 19 07:44 proc
lrwxrwxrwx 1 root root       3 Jun 19 07:44 sbin -> bin
drwx------ 2 root root    4096 Jun 19 07:44 sys
drwx------ 2 root root    4096 Jun 19 07:44 sysroot

lib 目录保存了,initrd 加载的模块

[root@node2 ~]# ll /tmp/test/lib/
total 1200
-rw------- 1 root root  17908 Jun 19 07:44 dm-log.ko
-rw------- 1 root root  11188 Jun 19 07:44 dm-mem-cache.ko
-rw------- 1 root root   8808 Jun 19 07:44 dm-message.ko
-rw------- 1 root root  75644 Jun 19 07:44 dm-mod.ko
-rw------- 1 root root  74148 Jun 19 07:44 dm-raid45.ko
-rw------- 1 root root  18512 Jun 19 07:44 dm-region_hash.ko
-rw------- 1 root root 147376 Jun 19 07:44 ext3.ko
-rw------- 1 root root 177220 Jun 19 07:44 scsi_mod.ko
-rw------- 1 root root  31560 Jun 19 07:44 scsi_transport_spi.ko
...

bin 目录保存了, initrd 需要使用到的命令工具

[root@node2 ~]# ll  /tmp/test/bin/
total 4752
-rwx------ 1 root root 1075172 Jun 19 07:44 dmraid
-rwx------ 1 root root  476292 Jun 19 07:44 insmod
-rwx------ 1 root root  862468 Jun 19 07:44 kpartx
lrwxrwxrwx 1 root root      10 Jun 19 07:44 modprobe -> /sbin/nash
-rwx------ 1 root root 2427036 Jun 19 07:44 nash

查看该小的 linux 的运行过程

#!/bin/nash
mount -t proc /proc /proc
setquiet
echo Mounting proc filesystem
echo Mounting sysfs filesystem
mount -t sysfs /sys /sys
echo Creating /dev
mount -o mode=0755 -t tmpfs /dev /dev
mkdir /dev/pts
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
mkdir /dev/shm
mkdir /dev/mapper
echo Creating initial device nodes
mknod /dev/null c 1 3
。。。
mknod /dev/systty c 4 0
mknod /dev/tty c 5 0
mknod /dev/console c 5 1
。。。
mknod /dev/tty0 c 4 0
。。。
mknod /dev/tty12 c 4 12
。。。
mknod /dev/ttyS3 c 4 67
echo Setting up hotplug.
hotplug
echo Creating block device nodes.
mkblkdevs
echo "Loading ehci-hcd.ko module"
insmod /lib/ehci-hcd.ko
echo "Loading ohci-hcd.ko module"
insmod /lib/ohci-hcd.ko
echo "Loading uhci-hcd.ko module"
insmod /lib/uhci-hcd.ko
mount -t usbfs /proc/bus/usb /proc/bus/usb
echo "Loading jbd.ko module"
insmod /lib/jbd.ko
echo "Loading ext3.ko module"
# 装载 ext3 文件系统
insmod /lib/ext3.ko
echo "Loading scsi_mod.ko module"
# 由于 Linux 是宏(单)内核设计的,它把磁盘驱动做成了模块。bootload 从 MBR 把内核加
# 载到内存展开并初始化,它首先要启动init 进程对系统的各项工作
# 进行初始化操作。启动init进程,就需要把二进制运行程序/sbin/init,从磁盘中加载到内
# 存。就要从磁盘上读取数据。但是 bootload 加载的内核中没有磁盘的驱动程序,
# 所以就没法从磁盘中读取数据。所以 Linux 就使用了initrd-2.6.18-194.el5.img 把
# scsi 磁盘驱动装载进来。
# ext2文件系统是直接做进内核的,可以使用该方法来查看是否把 ext2 文件系统做进了内核
# [root@node2 ~]# cat /boot/config-2.6.18-194.el5 | grep -i ext2
# CONFIG_EXT2_FS=y   ----> 值不为 m ,所以不是做成模块的。
# CONFIG_EXT2_FS_XATTR=y
#
# 上面也使用了 insmod /lib/ex3.ko 把 ex3 文件系统装载进来了。GRUB 包含了磁盘的
# 分区表,所以这个时候内核就可以访问磁盘上的数据了。
insmod /lib/scsi_mod.ko
echo "Loading sd_mod.ko module"
insmod /lib/sd_mod.ko
echo "Loading scsi_transport_spi.ko module"
insmod /lib/scsi_transport_spi.ko
。。。
echo "Loading dm-mem-cache.ko module"
insmod /lib/dm-mem-cache.ko
echo "Loading dm-mod.ko module"
insmod /lib/dm-mod.ko
echo "Loading dm-log.ko module"
insmod /lib/dm-log.ko
echo "Loading dm-region_hash.ko module"
insmod /lib/dm-region_hash.ko
echo "Loading dm-message.ko module"
insmod /lib/dm-message.ko
echo "Loading dm-raid45.ko module"
insmod /lib/dm-raid45.ko
echo Waiting for driver initialization.
stabilized --hash --interval 1000 /proc/scsi/scsi
mkblkdevs
echo Scanning and configuring dmraid supported devices
resume LABEL=SWAP-sda3
# 创建 root 根设备,并以只读方式挂载之。
echo Creating root device.
mkrootdev -t ext3 -o defaults,ro sda2
echo Mounting root filesystem.
mount /sysroot
echo Setting up other filesystems.
setuproot
# 切换至“根目录”并启动 init 进程。
cho Switching to new root and running init.
switchroot

说明:
      由于系统启动的时候,只以只读的方式挂载了 ”/“ 根目录,根目录存储有系统启动所需的各项工具,配置文件和链接库。
       对于Red Hat Enterprise Linux来说,其根文件系统必须至少包括/etc、/bin、/sbin、/bin和/dev等目录,否则无法启动。
       所以,要注意我们装系统划分分区的时候,是不可以把 /etc、/bin、/sbin、/lib 、/dev 划分为独立的分区的。

转载于:https://blog.51cto.com/9528du/1428127

从系统的启动过程分析,为什么我们划分分区的时候 /sbin 、/bin、/lib、/dev不能做为独立的分区?...相关推荐

  1. Linux系统开机启动过程分析

    开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程.分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机 ...

  2. linux内核中启动页面,Linux内核启动过程分析

    下面给出内核映像完整的启动过程: arch/x86/boot/header.S: --->header第一部分(以前的bootsector.S):  载入bootloader到0x7c00处,设 ...

  3. android动态分区AB升级,Android A/B System OTA分析(四)系统的启动和升级

    Android从7.0开始引入新的OTA升级方式,A/B System Updates,这里将其叫做A/B系统,涉及的内容较多,分多篇对A/B系统的各个方面进行分析.本文为第四篇,系统的启动和升级. ...

  4. ghost系统无法启动

    http://www.utosee.com/post/ghost180.html 今天在做样机的时候,遭遇了一个很少遇到的问题,ghost系统之后无法启动,于是今天就写写ghost系统无法启动的若干可 ...

  5. Android A/B System OTA分析(四)系统的启动和升级

    Android从7.0开始引入新的OTA升级方式,A/B System Updates,这里将其叫做A/B系统,涉及的内容较多,分多篇对A/B系统的各个方面进行分析.本文为第四篇,系统的启动和升级. ...

  6. TD-SCDMA系统中随机接入过程分析

    URL:http://tonyduan823.spaces.live.com/blog/cns!1AF1C2173485F09C!4584.trak TD-SCDMA系统中随机接入过程分析(广东通信技 ...

  7. 关于嵌入式系统的启动(装载)

     关于嵌入式系统的启动 (SHARE FOR ALL) 嵌入式 Linux 启动分为两个部分,系统引导与 Linux 启动.系统引导将完成 Linux 装入内存前,初始化 CPU 和相关 IO 设备, ...

  8. 嵌入式系统的启动过程

    嵌入式系统的启动过程 嵌入式Linux启动分为两个部分,系统引导与Linux启动.系统引导将完成Linux装入内存前,初始化CPU和相关IO设备,并将Linux调入内存的工作.系统引导主要由BootL ...

  9. 详解linux系统的启动过程及系统初始化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://chrinux.blog.51cto.com/6466723/1192004 一. ...

最新文章

  1. 04封装 里氏转换 多态
  2. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
  3. mysql 索引生命周期_MYSQL 索引(一)--- 简介
  4. 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
  5. 微信小程序格创校园跑腿小程序v1.1.64+前端
  6. 谷歌大脑联手Hinton提出SimCLR新框架,疯狂提升自监督学习性能
  7. How to check firmware and drivers of a VMware ESXi host
  8. java 发送邮件怎么抄送,Java实现邮件发送(二)
  9. SLA服务可用性4个9是什么意思?如何保证服务的高可用性 HA(High Availability)?...
  10. 360浏览器如何设置默认极速模式
  11. OpenGL GLM环境配置
  12. 网易云音乐 linux x32,网易云音乐 Win10 UWP 正式变为 Win32 转制版
  13. Ngnix 配置文件快速入门
  14. 为FishBot模型注入物理属性并在Gazebo中显示
  15. mongodb数据库自动备份
  16. h5活动是什么意思_浅谈什么是H5页面,怎么制作h5页面
  17. 【Oracle】plsql连接64位的Oracle
  18. css使用定义动画anima,CSS Transform和动画
  19. 环德无人便利店面向全国代理加盟连锁便利店
  20. Jenkins使用6--jenkins git timeout

热门文章

  1. 从事数据科学前必须知道的五件事儿
  2. ie8下jquery改变PNG的opacity出现黑边,ie6下png透明解决办法
  3. Word组件 Spire.Doc for .NET V6.0.3发布 | 修复多个重大bug
  4. 基于docker部署的微服务架构(四): 配置中心
  5. 【转】IOS中Json解析的四种方法
  6. NBU备份之一 Windows操作系统BMR的配置
  7. PLSQL_海量数据处理系列3_索引
  8. 如何正确使用SqlConnection
  9. 移植uboot第一步:下载,编译,烧到板子上试验
  10. Linux查看CPU相关信息