zoukankan      html  css  js  c++  java
  • 系统启动过程以及故障排除

    系统的启动过程

    1、加电----CMOS----post(上电自测试程序)----- grub(早期的时候使用的是lilo

    Grub的第一阶段主要起到一个引导MBR中的446B。第二阶段在硬盘上,主要是一个配置。

    对于任何一种操作系统,任何一台机器,刚开始的时候,肯定是要进行加电的,加完电之后在主板上有一个叫CMOS的芯片,CMOS里面有一个程序,这个程序叫post上电自测试程序。它能够对硬件来完成一些自检,比如,在机器里面内存有多大,CPU是哪一种型号的,声卡、显卡,所以这个叫上电自测试。

    [root@localhost ~]# vim /etc/inittab

    1 #
    2 # inittab This file describes how the INIT process should set up
    3 # the system in a certain run-level.
    4 #
    5 # Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
    6 # Modified for RHS Linux by Marc Ewing and Donnie Barnes
    7 #
    8
    9 # Default runlevel. The runlevels used by RHS are:
    10 # 0 - halt (Do NOT set initdefault to this)
    11 # 1 - Single user mode
    12 # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    13 # 3 - Full multiuser mode
    14 # 4 - unused
    15 # 5 - X11
    16 # 6 - reboot (Do NOT set initdefault to this)
    17 #
    18 id:3:initdefault:  进入3级别执行这个动作,init要进行工作的时候,默认情况下进入3级别
    19
    20 # System initialization.
    21 si::sysinit:/etc/rc.d/rc.sysinit  进入任何级别执行sysinit这个动作,这个动作表示系统要进行初始化。要执行/etc/rc.d/rc.sysinit
    22
    23 l0:0:wait:/etc/rc.d/rc 0
    24 l1:1:wait:/etc/rc.d/rc 1
    25 l2:2:wait:/etc/rc.d/rc 2
    26 l3:3:wait:/etc/rc.d/rc 3  默认是3级别,因此会执行这一行,把3作为参数传递给rc这个脚本。最后的结果会进入rc3.d这个目录。
    27 l4:4:wait:/etc/rc.d/rc 4
    28 l5:5:wait:/etc/rc.d/rc 5
    29 l6:6:wait:/etc/rc.d/rc 6
    30
    31 # Trap CTRL-ALT-DELETE
    32 ca::ctrlaltdel:/sbin/shutdown -t3 -r now  无论在哪一种级别下用户都可以使用ctrl-alt-del来启动机器,这样很危险,所以在用的时候最好把它禁用掉。
    33
    34 # When our UPS tells us power has failed, assume we have a few minutes
    35 # of power left. Schedule a shutdown for 2 minutes from now.
    36 # This does, of course, assume you have powerd installed and your
    37 # UPS connected and working correctly.
    38 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"  交流电失败后,一般重要的服务器都是用一些后备电源的(UPS)。当服务器检测到交流电没了,后备电源已经通上了,然后开始向主机上登录的所有用户去发送指令:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down
    39
    40 # If power was restored before the shutdown kicked in, cancel it.
    41 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"  当电源恢复了,取消关机指令。

    42
    43
    44 # Run gettys in standard runlevels
    45 1:2345:respawn:/sbin/mingetty tty1
    46 2:2345:respawn:/sbin/mingetty tty2
    47 3:2345:respawn:/sbin/mingetty tty3
    48 4:2345:respawn:/sbin/mingetty tty4
    49 5:2345:respawn:/sbin/mingetty tty5
    50 6:2345:respawn:/sbin/mingetty tty6

    /sbin/mingetty  产生字符终端,在2345级别都是6个终端。Respawn表示再生的意思,只要终端一注销,还会产生一个终端。

    51
    52 # Run xdm in runlevel 5
    53 x:5:respawn:/etc/X11/prefdm -nodaemon
    53,1 Bot

    开机脚本: /etc/rc.d/rc.local  希望自动执行的一些指令可以编辑在这个文件里。

    启动时故障排除:

      启动的时候,故障往往表现在grub的第一阶段和第二阶段。

      第一阶段:就是在MBR的446B可能会出现问题,一旦出现问题后面的grub菜单根本看不到。

      第二阶段:如果没有grub菜单的话,就无法选择操作系统,所以第二阶段往往是它的配置文件和说明文件。而第一阶段纯粹就是程序,所以这两个阶段是最容易出现问题的。

      

    现在模拟第一阶段出现问题的情况:

      将引导程序覆盖掉,重启一下(重启之前断开与光盘的连接)

      重启:

      硬盘进不了引导,进而用PXE进行网络引导。出现这种情况需要重建MBR,重建MBR

    要先使用光盘引导进去:

    出现了如上界面,这时不要回车,回车就成了安装了。这时候输入linux rescue 进入急救模式,利用引导光盘来进入急救模式。

      如果说能够找到系统的话,将会把系统挂载到/mnt/sysimage目录下。上面提示系统已经被挂载到/mnt/sysimage/目录下,进去之后需要chroot /mnt/sysimage,把/mnt/sysimage这个目录作为根目录

      使用grub指令重建MBR里面的446B。

    指明引导系统:这里面支持Tab键

      root(hd0,0)

      之后再执行

      setup(hd0):MBR是针对一块盘的,所以写hd0,表示第一块盘。

      setup是grub里面的一个子程序,它可以用于帮助重建第一阶段和第二阶段。

       执行好之后,输入quit退出,执行两次exit之后将会自动进行启动。

    grub引导第二阶段主要生成了很多文件,这些文件在/boot/grub/目录下:

    [root@Device-8C324C ~]# ll /boot/grub/
    total 234
    -rw-r--r-- 1 root root 63 Dec 21 05:06 device.map
    -rw-r--r-- 1 root root 7584 Dec 21 05:06 e2fs_stage1_5
    -rw-r--r-- 1 root root 7456 Dec 21 05:06 fat_stage1_5
    -rw-r--r-- 1 root root 6720 Dec 21 05:06 ffs_stage1_5
    -rw------- 1 root root 598 Dec 21 05:06 grub.conf
    -rw-r--r-- 1 root root 6720 Dec 21 05:06 iso9660_stage1_5
    -rw-r--r-- 1 root root 8192 Dec 21 05:06 jfs_stage1_5
    lrwxrwxrwx 1 root root 11 Dec 21 05:06 menu.lst -> ./grub.conf
    -rw-r--r-- 1 root root 6880 Dec 21 05:06 minix_stage1_5
    -rw-r--r-- 1 root root 9248 Dec 21 05:06 reiserfs_stage1_5
    -rw-r--r-- 1 root root 32428 Jan 5 2007 splash.xpm.gz
    -rw-r--r-- 1 root root 512 Dec 21 05:06 stage1  第一阶段的描述信息 共512B
    -rw-r--r-- 1 root root 104988 Dec 21 05:06 stage2  stage2的描述信息,stage2主要包含了列出来的这些文件。
    -rw-r--r-- 1 root root 7072 Dec 21 05:06 ufs2_stage1_5
    -rw-r--r-- 1 root root 6272 Dec 21 05:06 vstafs_stage1_5
    -rw-r--r-- 1 root root 8904 Dec 21 05:06 xfs_stage1_5

    所以第二阶段可以理解为在/boot/grub/目录下生成了很多文件。第一阶段主要是程序,第二阶段主要是一些配置和说明文件。配置文件中最重要的是/etc/grub.conf

    模拟/boot/grub/grub.conf文件丢失的情况:

      重启时,发现已经启动了grub,当看到这种信息的时候,说明第二阶段失效了,问题就是缺少了说明文件或者是配置文件,所以才造成无法启动。(出现这种情况的时候要使用命令启动第二阶段,使用help可以查看命令)

      

      这就是靠指令将它启动起来,如果不是静默模式,屏幕上会出现一堆信息。

      成功启动后,要手工建立这个第二阶段的配置文件,直接靠指令来启动的话会产生第二阶段的其他文件,但是这个配置文件是不会产生的。

      

      重启:

        

      使用指令来产生grub第二阶段的其他文件:

      

      #grub-install -root-directory=/ /dev/sda

      建grub第一阶段的步骤: 

      grub

      root (hd0,0)

      setup (hd0)

    模拟(把/boot/grub/目录删了,意味着第二阶段里面的所有说明文件配置文件都没有了。实验前记得备份)

     

      加载grub1.5,上面表示加载到grub1.5阶段的时候起不来,找不到第二阶段的文件。像这种情况,只能使用急救模式。用光盘引导的时候发现光盘引导不了,说明这个阶段是硬盘在引导。硬盘在引导,说明第一阶段没有问题。可以在虚拟机的CMOS里面设置硬盘引导。设置成光盘引导,接着进入急救模式

      /boot/grub/目录下的文件生成成功,但是没有grub.conf这个文件。由于是光盘引导的,所以先把光盘去了再退出。这时就是以硬盘的方式来引导。

      起来之后再为它创建一个grub.conf就可以了。接着再重启试一下。

      grub是一个引导程序,分为两阶段。第一阶段就在主引导记录的446个字节里面,第二阶段就在grub目录下。一个完整的程序少了一段肯定是不行的。

      所以说:一阶段实际上是靠grub里面的一个子命令叫setup来建立。二阶段要使用grub-install来建立。

      除了遇到这种一类故障、二类故障之外,有时候还有一种比较常见的故障:

        发现管理员口令丢了,只要物理上能接触到机器,这些密码都能够解决,所以安全来看的话,首要的应该是物理安全。解决方法是进入一级别更改口令或者直接删除口令。

      还有一种故障是:只要在引导过程当中牵扯到的一些文件,在编译的过程中可能会出现一些故障。

    比如/etc/fstab(文件系统表,这里面表明了每一个要挂载的分区,若误操作了,这个文件又是引导的时候要用的文件)

      

      

      能走到这一步,说明grub一阶段和二阶段都是没有问题的。

      

      提示输入root密码进入维护,或者按Control-D继续来启动,

      进入维护模式 修改/etc/fstab  但是提示只读,所以这时候要将根重新挂载一次:

  • 相关阅读:
    sqlserver 配置管理器中无法启动sqlserver服务
    9.4笔记
    ASP.NET 正则表达式验证
    ASP.NET之OnClientClick 事件
    ASP.NET之js 根据textbox变化刷新相关数据
    SQL
    leetcode:Roman to Integer(罗马数字转化为罗马数字)
    leetcode:Integer to Roman(整数转化为罗马数字)
    leetcode:Palindrome Number
    leetcode:String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/reagina/p/6347789.html
Copyright © 2011-2022 走看看