FXMAR 发表于 2018-5-10 06:30:06

redhat 5开机启动流程详解

  (1)POST(Power On Self Test) 加电自检
   电脑主机打开电源的时候随后会听到滴的一声响系统启动开始了开机自检POST。
  自检开始这个过程中主要是检测计算机硬件设备比如CPU内存主板显卡等设备是否有故障存在。如果有硬件故障的话将按两种情况理对于严重故障(致命性故障)则停机此时由于各种初始化操作还没完成不能给出任何提示或信号对于非严重故障则给出提示或声音报警信号等待用户处理如果没有故障POST完成自己的接力任务将尾部工作交接给BIOS处理。
  (2)BIOS(bootloader)
   按BIOS设定的系统启动流程检测通过则根据引导次序(Boot Sequence)开始在第一台设备上支持启动程序我们的启动设备主要包括硬盘、usb、sd等.寻找第一启动设备的0磁道0扇区的MBR(Main Boot Record).主引导记录它的大小是512字节里面存放了预启动信息、分区表信息及分区标志等。分为两部分第一部分为(PRE-BOOT)引导区,占了446个字节第二部分为分区表(PARTITIONPABLE),共66个字节记录硬盘的分区信息(其中前64字节是分区表信息后2个字节是分区结束的标志)。
  (3)bootloader 详解
  
引导linux bootloader:
  LILO:(LInux LOader) 早先应该内核启动,无法识别1024柱面以后的内核,不支持大8G硬盘。现在多用于嵌入式内核
  GRUB:(GRand Unified Bootloader):分为两段
  1; stage1 放在MBR中,为了引导stage2
  stage1.5 :过渡 ,识别不同的文件系统

  2;stage2放在内核所在的分区 /boot/grub/
# ls /boot/grub/
device.map   fat_stage1_5grub.conf         jfs_stage1_5minix_stage1_5   splash.xpm.gzstage2         vstafs_stage1_5
e2fs_stage1_5ffs_stage1_5iso9660_stage1_5menu.lst      reiserfs_stage1_5stage1         ufs2_stage1_5xfs_stage1_5
  --------------------------------------
  splash.xpm.gz:grub开机加载的图片这就是我们看见的redhat5 图标
  grub.conf:为grub 的配置文件
  
*****详解grub.conf (很重要)
# cat /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/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/sda
default=0                                     ----设定默认启动title的编号 ,从0开始
timeout=5                                    ----等待用户超时时长,单位为秒
splashimage=(hd0,0)/grub/splash.xpm.gz   ------grub 的背景图片
hiddenmenu                                                 ------隐藏菜单
title Red Hat Enterprise Linux Server (2.6.18-194.el5)---内核标题,操作系统的名称,可以随便编辑
      root (hd0,0)---内核文件所在的设备,对grub来说所有硬盘都为hd(#,N)   光盘为cdrom
      kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M----------内核路径及传递给内核的参数
      initrd /initrd-2.6.18-194.el5.img----------ramdisk 的路径,initrd 的版本号,要内核版本号一致

  注解 :如果boot 没有单独分区,krenel就在/boot/vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crashkernel=128M@16M
  -----------------------------------------------
  图形grub 的应用;
  *****单用户模式修改root密码:
  开机-->选择要更改的 title 名 —> 按e 进入编辑模式-->选择kernel 那行,按e--->空格键 添加s 或S或1或single -->b这样就进入单用户模式,可以修改密码等
  ------------------------------------
  通过单用户模式,只要能接触到你的主机,都可以修改密码。这样就不安全了我们需要

  给grub 加密码
  vi /boot/grub/grub.conf
  在tile 上面一行password 密码串

  如 password --md5 $1$GxkYF/$7kvX8bouiFqJITFZDkhCS.
  可以通过命令:grub-md5-crypt 生成加密的密码串
# grub-md5-crypt
Password:
Retype password:
$1$GxkYF/$7kvX8bouiFqJITFZDkhCS.
  (注意):如果在title 里加密码串,启动内核的时候,都需要密码了
  ===============================================
  *****grub安装与修复
  安装grub stage1

  问题1方法(一)
  1,dd if=/dev/zero of=/dev/sdacount=1 bs=400
  这样我们就把grub 抹去了,不要破坏分区表;不要重启,重启就不能启动了

  2,用grub命令
  grub>root hd(0,0)
  grub>setup hd(1)
  grub >quit
  

  方法(二)
  grub-install--root-dirctory=/path/to/boot's_parent_dir   /path/to/dev
  注解:/path/to/boot's_parent_dir 为/boot 的父目录

  

  模拟grub.conf 文件丢失的修复过程:
  1,mv /boot/grub/grub.conf   /root
  2,关机重启
  3,grub>find hd(0,0) /有内核的磁盘,
  4,如果内核在hd(0,0)上;grub>roothd(0.0);如果不在就root hd(#,n)有内核的磁盘分区
  5,gurb>kernel /vmlinuz-versions指定内核
  6,grub> initrd /initrd-versions指定ramdisk
  7,grub>boot
  8,手动创建一个grub.conf 配置文件
  (4)内核启动
  内核初始化过程:
  1,设备探测
  2,驱动初始化(可能会从initrd中装置驱动程序)在redhat6中initrd 叫initramfs
  3,以只读的方式挂载/文件系统
  4,启动第一个进程init(PID 1)

  (5)内核被加载后,第一运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。(在redhat 6.0以后使用upstart ;并行启动程序。使用d-bus来完成通信的)
  cat /etc/inittab
  #
id:5:initdefault:---------默认为5级别

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
  x:5:respawn:/etc/X11/prefdm -nodaemon
  -------------------------------------------------------------
  id:runlevels:action:process
  id:标识符
  runlevels:在哪个级别下运行此行
            0:关机
            1:单用户模式
            2:multi user mode 不启用NFS
            3:multi user modetext 模式(文本模式)
            4:保留,未启用
            5:multi user mode图形模式
            6;重启

  action:动作:什么情况下执行此行
           :initdefault :设定默认运行级别
           :sysinit      :系统初始化
           :wait         :只要切换到这个级别就运行一次
           :ctrlaltdel   :重启
           :respawn:一旦程序终止,就会重新启动

  process:要运行程序
  
-----------------------------------------------------------
  (6)init进程执行rc.sysinit
  简单的说一下rc.sysinit脚本执行的任务:
  1,激活udve和selinux
  2,根据/etc/sysctl.conf文件。来设定内核参数
  3,设定系统时钟
  4,装载键盘映射
  5,启用交换分区
  6,设定主机名
  7,根文件系统检测,并以读写方式重新挂载
  8,激活RAID和LVM设备
  9,启用磁盘配额
  10,根据/etc/fstab ,检查并挂载文件系统
  11,清理过期的锁文件和PID文件
  (7)init进程执行rc.d/rc*.d   启动相应运行级别下服务
  #关闭或启动的优先级的优先次序,数字越小越优先被选中
  先关闭以K开头的服务,后启动以s开头的服务
  服务类的脚本 sysV :/etc/rc.d/init.d
     1, 能接受参数start|stop|restart|status

     2,# chkconfig: 345 25 75
# description: Mounts and unmounts all Network File System (NFS), \
#            SMB/CIFS (Lan Manager/Windows), and NCP (NetWare) mount points.
  #chkconfig runlevels   ss kk
   chkconfig    -    ss   kk运行级别为- 表示没有s*链接,都是k*链接

  当chekconfig 命令来为此脚本在rc.d目录下创建链接时,runlevels 表示默认创建s*的链接
  除此之外,都创建为k*.;s后面的启动优先级为ss所表示的数字,k后面关闭优先级次序为k后面所表示的数字:
  #description:用于说明此脚本的简单功能,\ 可以续行

  -----------------
  命令chkconfig
  chkconfig   --list   列出当前系统上的所以服务
  # chkconfig --list
NetworkManager0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid         0:off   1:off   2:on    3:on    4:on    5:on    6:off
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
apmd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off

  ------------
  chkconfig--list server_name查看一个服务
  chkconfig--addserver_name 添加链接
  chkconfig   --del server_name删除链接
  -----------------
  chkconfig--levelrunlevelsserver_name {on|off}
  如:chkconfig--level245acpidoff在245运行级别下关闭acpid服务

  

  (8)执行/etc/rc.d/rc.local(系统启动的最后一个脚本)

  rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里
  
(9)执行/bin/login程序,进入登录状态
  输入账号,密码

  




  

  
页: [1]
查看完整版本: redhat 5开机启动流程详解