Boot
Linux在开机的流程,主要如下图。
开机之后主要是先由BIOS进入主记忆体,进行硬体以及基本功能的诊断和初始化。
BIOS执行完系统的检测之后,会将权限交给MBR(Master Boot Record)。
MBR会选择Boot Loader,Boot Loader会载入kernel。
kernel会唿叫init,init就会载入设定的runlevel启动相对应的服务,让使用者可以登入系统。
MBR
MBR是开机很重要的一环,MBR存在于硬碟的第一磁轨的第一磁区,是电脑开机第一个读取的磁区。
MBR共512bytes,主要纪录硬碟相关的资讯,以及各分割区的资讯。
MBR主要分为三个部分。
Boot Partition Loader主要用以检查Partition Table是否正确,并将权限转交给Boot Loader。
Partition Table主要纪录分割区相关的资讯,每个分割区可用16bytes,最多四个分割区。
Signature主要为验证MBR是否有效。
MBR会决定是由哪个Boot Loader来进行开机,并进行权限转移。
MBR中的Boot Loader会经由使用者选择或预设的方式将权限转交给其他Boot Loader。
当其他Boot Loader得到权限之后就会去载入各自的Kernel。
这边要特别注意的是,Windows的Boot Loader不认得其他OS的Boot Loader。
所以如果要安装双系统,要先安装Windows,再安装Linux,让Linux的Boot Loader覆写到MBR。
Kernel唿叫的第一只程式就是init,init被唿叫之后会载入配置,也就是inittab。
inittab最重要的部分就是runlevel的设定,不同的runlevel可以决定使用者有多少服务可以使用。
开机预设的runlevel可在/etc/inittab中更改设定。
Linux中总共有7个runlevel,分别如下:
0 = 关机
1 = 单人模式,不用帐号密码,管理员权限,文字介面,用以维护系统。
2 = 多人模式,使用者需输入帐号密码登入,文字介面,无网路功能。
3 = 多人模式,使用者需输入帐号密码登入,文字介面,有网路功能。
4 = 系统保留功能。
5 = (预设)多人模式,使用者需输入帐号密码登入,视窗化介面,有网路功能。
6 = 重新开机。
之后会依照runlevel载入服务,接着就可以让使用者登入系统,并进行各种shell。
使用 #runlevel 可以查询目前的runlevel,以及利用 #init [runlevel number] 切换runlevel。
若系统设定为1~3,可利用 #startx 启动图形介面,当使用者登出图形介面则会回到文字介面。
Grub
Linux的Boot Manager为Grub,主要设定档位于/boot/grub/grub.conf,此档案可设定开机选单。
default:设定为预设开机设定。
timeout:开机选项逾时时间。
splashimage=:选单背景图位置。
hiddenmenu:隐藏选单。
title = :开机设定选项标题。
root(hd0,0) :开机磁区,第一个数字为硬碟编号,第二个数字为磁区编号。
root=/dev/… : root所在的位置。
kernel :kernel所在位置。