如果有一天你们公司很重要的一台linux服务器突然启动不了了,重装系统又浪费时间,如果是启动过程有问题,那么你知道启动过程可以快速定位系统问题,很快就可以解决。
Linux 系统启动是一个复杂而有序的过程,它是系统从硬件启动到软件运行的全过程。了解 Linux 的启动过程可以帮助我们更好地理解操作系统如何管理计算机资源,以及如何优化系统性能。本文将详细介绍 Linux 系统启动的各个阶段。
一、内核引导
当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的 GRUB 程序开始引导 Linux,当引导程序成功完成引导任务后,Linux 从它们手中接管了 CPU 的控制权,然后 CPU 就开始执行 Linux 的核心映象代码,开始了 Linux 启动过程。
二、运行 init 进程
在内核加载完毕后,会启动Linux操作系统第一个守护进程init,这个进程的PID是1,所有的进程都是它的子进程。
通过这个进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级,文件内容大致如下:
# 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:3:initdefault:
...
从文件内容知道Linux系统运行等级一共有7种:
0:关机模式,运行等级为0,系统会立即关机,在系统启动后可以利用这种等级对系统进行关机操作,但是不允许将系统下次启动时的等级设定为0,否则系统将无法正常启动(启动后立即关机)。
1:单用户模式,类似于windows系统下的安全模式,具有ROOT权限。
2:无网络支持的多用户模式,顾名思义就是支持多用户登录
3:字符界面多用户模式,文本命令行界面,一般服务器都是此模式
4:保留,未使用模式
5:图形界面多用户模式,系统启动之后会进入到图形化桌面系统中
6:重新引导系统,重启模式,千万不要设置为6,和0相似。
/etc/inittab文件内容中的设定的行:
id:3:initdefault:
表示启动的层级为3,即图形界面多用户模式。一般3和5比较常用,如果需要其它等级,可以手动修改这个值。
每一个运行级别都在/etc目录下有一个对应的子目录,可以指定每一个运行级别需要加载哪些程序,rcN.d的字母d是directory的意思,表示这是一个目录。
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。init 进程在内核引导完成后立即运行,它的任务是初始化系统环境,创建一些必要的进程和设备,以及为后续的启动步骤做好准备。
三、系统初始化
系统初始化主要通过 rc.sysinit 来进行。这个脚本会进行一些系统特定的初始化操作,比如设置系统时间、挂载文件系统、启动磁盘检查等。此外,rc.sysinit 还会加载并启动一些必要的守护进程和服务,以便在系统启动的后续阶段能够正常运行。
四、建立终端
rc.sysinit 执行完毕后,返回 init。这时基本系统环境设置好了,各种守护进程也已经启动了。init 接下来会打开 6 个终端,以便用户登录系统。这些终端分别是:tty1、tty2、tty3、tty4、tty5 和 tty6。用户可以通过这些终端进行命令行登录或远程登录。
五、用户登录
一般来说,用户的登录方式有三种:命令行登陆、SSH 登陆、图形界面登陆。当用户通过这些方式成功登录后,就可以开始使用 Linux 系统了。
总之,Linux 系统启动过程是一个从硬件到软件、从引导到登录的复杂过程。通过深入了解这个过程,我们可以更好地理解和优化系统的性能,同时也有助于我们解决系统启动过程中可能遇到的问题。