Linux引导顺序和关闭顺序
初始化过程,GRUB和LILO引导加载程序,运行级别说明,初始化命令,关闭命令
Linux的启动过程
Linux引导过程是系统启动以加载其操作系统所需的启动过程/命令的名称。
BIOS-基本输入输出系统
引导x86计算机时,您的系统将寻找一个名为BIOS
(基本输入输出系统)的程序。BIOS代码是一段只读代码。BIOS负责启动引导过程的第一步。执行BIOS代码时,它将查找存在的所有外围设备,然后将寻找用于引导系统的驱动器。通常,您可以按F12
或F2
进入您的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目录中的所有链接。
这些链接具有特殊的命名约定:SNNname
和KNNname
。这里的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