Linux引导顺序和关闭顺序

时间:2019-04-29 03:17:31  来源:igfitidea点击:

初始化过程,GRUB和LILO引导加载程序,运行级别说明,初始化命令,关闭命令

Linux的启动过程

Linux引导过程是系统启动以加载其操作系统所需的启动过程/命令的名称。

BIOS-基本输入输出系统

引导x86计算机时,您的系统将寻找一个名为BIOS(基本输入输出系统)的程序。BIOS代码是一段只读代码。BIOS负责启动引导过程的第一步。执行BIOS代码时,它将查找存在的所有外围设备,然后将寻找用于引导系统的驱动器。通常,您可以按F12F2进入您的BIOS并更改启动顺序。一旦找到有效的引导加载程序并将其加载到内存中,便会传递完全控制权。简单来说,BIOS会加载并执行MBR(主引导记录)。

MBR-主启动记录

主引导记录通常在可引导磁盘的第一个扇区上找到(大小小于512字节)。在较旧的系统上,该名称可能是/dev/sda/dev/hda。主引导记录可以分为三部分。的主引导程序,其占据了第一446字节的信息。接下来是分区表,它将获取接下来的64个字节的信息。后2个字节由MBR验证检查获取。MBR包含有关引导加载程序的信息。在较旧的系统上,它是Lilo,在较新的系统上,它是GRUB(Grand Unified Bootloader)。基本上,MBR会加载并执行引导加载程序。

GRUB-统一引导加载程序

GRUB是Linux系统上最常用的引导程序之一。当前有两个版本在使用。GRUB 1.0(仍在较旧的受支持系统上使用)和GRUB 2.0(通常随大多数新系统一起提供)使用。如果系统上有多个内核映像,则使用GRUB可以加载所选的内核映像,否则将加载默认选项。在引导过程中,此时可以进行各种其他修改。这些将在后面详细介绍。GRUB配置文件通常位于以下位置:

GRUB 1.0-OpenSUSE / Debian-/boot/grub/menu.lst
GRUB 2.0-Debian-/boot/grub/grub.conf/boot/grub/grub.cfg
其他系统(例如Fedora)通常是/etc/grub.conf符号链接,该链接指向/boot/grub/grub.conf

CentOS 6.3下的GRUB配置文件示例:

[root@centos ~]# 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/mapper/vg_centos-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-279.el6.i686)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-279.el6.i686 ro root=/dev/mapper/vg_centos-lv_root nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=uk LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-279.el6.i686.img

内核kernel

内核负责挂载根文件系统。启动/sbin/inittab程序。这是在系统上运行的第一个进程,并且进程ID始终为1(PID为1)。initrd是一个初始化的RAM磁盘,内核将该空间用作临时根文件系统。此处存储了各种驱动程序,这些驱动程序允许您访问系统和分区。

init

这是/etc/inittab, 它决定在引导时加载哪个运行级别。有多种运行级别可用,并且每个级别都有特定的功能。以下是可用的运行级别(取决于您的系统):

运行级别描述
0停止系统。系统管理员使用运行级别0快速关闭系统。
1,s,S单用户模式,通常称为维护模式。在这种模式下,系统服务(如网络接口,Web服务器和文件共享)不会启动。此模式通常用于交互式文件系统维护。三个选项1,s和S都相同。
2多用户模式。在基于Debian的系统上,这是默认的运行级别。在基于Red Hat的系统上,这是多用户模式,没有NFS文件共享或X Window系统(图形用户界面)。
3在基于Red Hat的系统上,这是默认的多用户模式,它将运行除X Window System以外的所有内容。运行级别3、4和5通常不用于基于Debian的系统。
4未使用
5在基于Red Hat的系统上,这是带有登录屏幕的完全多用户模式。类似于运行级别3,但已启动X11图形用户界面。
6重新启动系统

目录/etc/rc0.d到/etc/rc6.d

/etc/init.d中的脚本不会由init进程直接执行。相反,每个目录/etc/rc0.d到/etc/rc6.d都包含一个指向/etc/init.d目录中脚本的符号链接。

因此,当系统启动并选择运行级别时,相关目录中的脚本将严格执行。例如,当初始化进程进入运行级别N时,它将检查关联的rcN.d目录中的所有链接。

这些链接具有特殊的命名约定:SNNnameKNNname。这里的S代表开始K代表杀死
每个特定的运行级别都定义了一种状态,在该状态下服务正在运行,而所有其他服务不在运行。S前缀用于标记应运行(启动)的所有服务的文件。K前缀用于所有其他不应运行的服务。NN是数字顺序,用于描述脚本应以的顺序运行。最低编号首先执行,最高编号最后执行。

如何确定当前的运行级别

如果需要检查当前的运行级别,可以通过执行命令runlevel或执行命令who -r来快速检查此级别。

john@john-desktop:~$ runlevel
N 2
john@john-desktop:~$ who -r
         run-level 2  2013-02-18 09:10

上面的示例说明当前处于运行级别2,字母N指示自引导以来对当前运行级别没有任何更改

在运行级别之间切换-init和telinit

如果您是root用户,并且您有权更改为其他运行级别,那么在运行级别之间进行切换非常容易!init或telinit命令将请求发送到init进程以更改为指定的运行级别。

通常,您将使用init命令关闭系统,切换到单用户模式或仅重新引导系统。

该命令的语法非常简单:

init n

n表示运行级别。例如,要在基于Red Hat的系统上切换到运行级别3,我们可以执行:init 3。要关闭系统,我们可以执行:init 0。要重新启动系统,我们可以执行:init 6。 telinit是替代init使用的替代命令。使用telinit的语法与init相同。

关机

如果要关闭系统,并且有其他用户登录到系统情况下,应该总是有礼貌地先通知他们。为此,就最好不要使用init 0命令。
我们将使用shutdown命令。

shutdown命令将接受时间和广播消息:

shutdown [options] time [warning_message]

关机时常用的选项

选项描述
-F快速启动,重新启动时跳过fsck文件检查。
-H关机后停止系统。
-k发送假装关机警告消息。
-r关机后重新启动。
-F在下次启动时强制文件系统检查。

关闭并立即重启

# shutdown -r now

在5分钟后重新启动并显示消息

# shutdown -r +5 System going down Please logoff immediately

22:00定时关机和停止系统

# shutdown -h 22:00

立即关机

# shutdown -h now