zoukankan      html  css  js  c++  java
  • 系统初始化过程

    系统初始化过程是指从INIT进程成功启动,一直到系统启动并弹出登录提示之间的过程。当INIT进程成功启动后,它会根据配置文件/etc/inittab中的设置初始化系统,这个过程主要完成的工作有:重新挂载文件系统、运行系统需要的进程和服务等。

    一、INIT进程的配置文件

    INIT进程的配置文件是/etc/inittab,这个配置文件会引导INIT进程初始化系统,开启必要的进程、服务等。

    查看inittab内容如下:

    [root@localhost ~]# cat /etc/inittab
    #
    # inittab       This file describes how the INIT process should set up
    #               the system in a certain run-level.
    #
    # Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
    #               Modified for RHS Linux by Marc Ewing and Donnie Barnes
    #
    
    # Default runlevel. The runlevels used by RHS are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    # 
    #设置系统默认的运行级别
    id:5:initdefault:
    
    #初始化系统脚本
    # 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
    
    #定义Ctrl+Alt+Delete键的作用
    # 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

    上面的有效行都有一个共同的格式,即使用冒号“:”将4个不同的字段分隔开。查看man手册可以看到每一行的格式如下:

    id:runlevels:action:process

    id:配置行在配置文件中的标识符,最长可以由4个字符组成。对于大多数文本行来说,这个字段没有太大的意义,但要求每行的id值在该文件中是唯一的。

    runlevels:配置行起作用的运行级别列表。如果作用于多个运行级别,可以将其写在一起。

    action:配置应该执行的动作。通常有initdefault、sysinit、wait、ctrlaltdel、powerfail、powerokwait和respawn这几个动作。

    process:表示配置行要执行的脚本、命令及参数等内容。

    二、设置系统默认的运行级别

    在INIT进程配置文件的第1行,设置了系统的默认运行级别:

    id:3:initdefault:

    在这个配置行中,动作initdefault用于设置系统启动时的默认运行级别,即系统启动后将自动进入到运行级别。

    在上面的这个示例中,系统运行级别是3.这表示系统启动后,将默认进入完全多用户模式。如果需要改变系统的默认运行级别,可以使用vi等编辑器修改该行中的runlevels字段值。需要注意到是此处设置的runlevels字段,只能使用一个运行级别。

    注意:修改系统默认的运行级别时,注意不要将字段设置为0和6,否则系统将无法正常开机。如果黑客将此字段修改为0和6,通常我们将其视为拒绝服务式攻击(Denial of Service,简称DoS)。

    三、初始化系统脚本

    第2个有效行中用于指定系统的初始化脚本:

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

    上面这行中的runlevels字段为空,表示INIT将会忽略这一字段,并在每个运行级别都执行系统初始化脚本文件/etc/rc.d/rc.sysinit。

    系统初始化脚本文件rc.sysinit是一个可执行文件,它是很重要的系统初始化文件。

    四、启动系统服务

    INIT进程使用rc.sysinit脚本对系统进行初始化之后,就会启动系统服务。

    1、配置文件中的设置

    在第3个到第9个有效行中,定义了系统在不同运行级别中需要执行的脚本:

    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

    上面这几行依次表示在0-6这几个运行级别下分别要执行的脚本、命令及参数。此处的动作全是wait,这表示INIT进程执行process字段定义的文件/etc/rc.d/rc时,需要等待rc执行完毕才能执行下一步操作。

    2、启动服务脚本rc

    查看配置文本中指定的文件/etc/rc.d/rc的文件类型:

    [root@localhost ~]# file /etc/rc.d/rc
    /etc/rc.d/rc: Bourne-Again shell script text executable

    可以看出这其实是一个可执行的脚本文件:

    [root@localhost ~]# cat /etc/rc.d/rc
    #! /bin/bash
    #
    # rc            This file is responsible for starting/stopping
    #               services when the runlevel changes.
    #
    # Original Author:       
    #               Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
    #
    
    set -m
    
    # check a file to be a correct runlevel script
    check_runlevel ()
    {
            # Check if the file exists at all.
            [ -x "$1" ] || return 1
            is_ignored_file "$1" && return 1
            return 0
    }
    
    # Now find out what the current and what the previous runlevel are.
    argv1="$1"
    set `/sbin/runlevel`
    runlevel=$2
    previous=$1
    export runlevel previous
    
    . /etc/init.d/functions
    
    # See if we want to be in user confirmation mode
    if [ "$previous" = "N" ]; then
            if [ -f /var/run/confirm ]; then
                    echo $"Entering interactive startup"
            else
                    echo $"Entering non-interactive startup"
            fi
    fi
    
    ...

    从脚本的内容不难看出,这个文件的主要作用是接收运行级别参数,并启动对应的服务。需要启动的服务都保存在目录/etc/rc.d/rcN.d中(通常将这些目录称为运行级别目录),此处的N表示运行级别。

    3、运行级别目录

    查看运行级别目录:

    [root@localhost ~]# ls /etc/rc.d/
    init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
    rc      rc1.d  rc3.d  rc5.d  rc.local

    在上面的命令输出中,有7个目录rc0.d、rc1.d...rc6.d,这些目录就是运行级别目录。在这些目录中保存了相应的运行级别要启动的服务。

    此处以运行级别3为例:

    [root@localhost ~]# ls /etc/rc.d/rc3.d/
    K02avahi-dnsconfd            K89rdisc            S25pcscd
    K02dhcdbd                    K99readahead_later  S26apmd
    K02NetworkManager            S02lvm2-monitor     S26hidd
    ...

    从上面的命令输出中可以看出,这个目录中的所有文件都是一个固定的格式。

    • 文件名称开头的大写字母S和K分别代表start和kill,表示需要运行、关闭的服务。
    • 后面的两位数字表示优先级。以S开头的服务,系统会按优先级从小到大都顺序启动,以K开头的服务则相反。
    • 最后是服务名称。

    注意:运行级别目录中的文件全部都是链接文件,这些链接文件的源文件也是一个脚本文件,这些脚本文件通常称为启动脚本。

    五、重启快捷键

    第10个有效行中,定义了重启快捷键:

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

    由于runlevels字段为空,因此此处定义的内容将会在所有运行级别中生效。此行中的ctlaltdel表示按下Ctrl+Alt+Del组合键,其后的process字段中的命令表示系统将会在3分钟后重新启动系统。

    六、UPS选项

    UPS(Uninterruptible Power System,不间断电源)是一种能够维持服务器稳定运行的设备。当电源出现故障时,UPS能不间断、持续地提供一段时间的电力,以便让管理员有时间排除故障、切换后备电源或启动发电机等。

    UPS最大的作用是当市电中断时,服务器可以使用UPS内置的电池继续运行。有些UPS还可以过滤市电杂波,保护硬件设备正常运行,最大限度地防止数据丢失。

    在INIT进程配置文件的第11个、第12个有效行,就是用于设置电力故障及电力恢复时系统采取的措施:

    # 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"

    第11个有效行中的powerfail表示当接收到UPS发来的失去电力的信号时,系统无论处于哪个运行级别,都会向在线用户发出关闭系统的信号,并在两分钟后关闭系统。当然也可以根据实际情况修改此行中的设置。

    第12个有效行中的powerokwait表示当系统接收到UPS发来的电力恢复信号时,如果系统正处于运行级别1-5,将会取消关机执行,并向所有用户发送电力恢复的通知。

    七、运行终端

    INIT进程启动需要的服务、设置电源选项之后,就会运行虚拟终端。

    (1)第13到第18个有效行定义了一些虚拟终端:

    # 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

    上面的几个配置项表示运行级别2-5中,添加6个虚拟终端tty1-tty6.这几个配置项中的respawn表示终端如果结束,就需要立即重新启动它。当然如果系统不需要那么多终端,或需要更多的终端,管理员也可以修改此项设置。

    (2)配置文件的最后一个有效行是运行图形终端:

    # Run xdm in runlevel 5
    x:5:respawn:/etc/X11/prefdm -nodaemon

    上面这个配置项表示如果系统处于运行级别5,就运行相应的图形终端。当图形终端退出时,配置项中断respawn会让INIT进程重新启动它。

    完成上述步骤后,INIT进程就会运行/bin/login,弹出登录提示。至此系统就已经启动完成了,用户可以输入用户名和密码登录并使用系统。

  • 相关阅读:
    会计日历-自动生成脚本
    Oracle Key Flexfields Qualifiers
    Form Personalization应用总结
    UltraEdit (Ctrl + F) 查找、(Ctrl + R)替换功能失效
    FORM Save : ORA-01403 FRM-40735 ORA-06502
    EBS R12 Vision Profile default value
    EBS增加客制应用CUX:Custom Application
    TortoiseSVN设置比较工具为BeyondCompare
    开源的文件比较工具:WinMerge,KDiff3,diffuse
    C++ Operator Overloading
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3477783.html
Copyright © 2011-2022 走看看