Linux学习笔记(一)_启动

来源:互联网 发布:淘宝游戏币怎么交易 编辑:程序博客网 时间:2024/06/07 17:22

Linux 启动浅析

载入BIOS 的硬体资讯与进行自我测试,并依据设定取得第一个可开机的装置
:系统加载 BIOS程序,再透过BIOS程序加载CMOS里的信息,找到各项硬件设置信息,既我们开机进入到BIOS后看到的各项硬件设置,在里面更改过的设置也会保存在CMOS里。 CMOS是记录各项硬体参数且嵌入在主机板上面的储存器,BIOS则是一个写入到主机板上的一个韧体(韧体就是写入到硬体上的一个软体程式,Bios也会通过POST(加电自检)检查硬件设备是否完好。(我曾经由于内存没插好导致开机一会儿又关机,应该是这里检查出了问题)
读取第一个开机装置的boot Loader,位于MBR(主要启动记录区),即开机的第一个扇区。
boot Loader 在MBR和文件系统上各有一份。
:MBR:早期的linux为了兼容Windows采用相同的 MBR,第一个扇区包括446bytes+64bytes+2bytes=512bytes:446的boot Loader的主要功能:载入内核文件;提供选单,移交至其他boot Loader(这是多重开机的基础);64的磁盘分割信息,又每个分区信息需要16bytes存储,所以只能又4个主要分区,为了利用额外的磁盘记录分割信息,又有了逻辑分区。

:GPT:现在的磁盘可以有4K的分区,所以第一个磁盘能够存储的信息更多,就出现了GPT.这种需要硬件及操作系统都认识才能正常工作。

这里写图片描述

加载核心,侦测硬件
boot Loader将/boot下的核心文件加载到内存里,然后由核心接管后续工作。核心文件是以vmlinuz开头的文件。Linux内核是采用模块化设计,许多功能并没有编译到核心里,而是以模块编译在/lib/module目录下。
这里写图片描述
如上图,我的第一启动盘是sda 他又分为2个部分,第二个部分sda2是根目录和交换分区挂载的地方,可以看到是LVM。核心由于精简并没有把认识lvm的驱动编译进去,而是以模块放在/lib/modules里面,所以核心拿sda2没办法。
接下来的工作就要靠/boot 下的另一个文件了:initramfs。这个是一个虚拟文件系统可以解压缩成根目录,这个目录里在/lib/modules下有启动相关的模块主要是USB,SATA,RAID等等与磁盘有关的。kernel通过它就可以加载驱动认识sda2了,并正确的挂在实际的根目录。
*有兴趣的可以把initramfs解开看看。
另外核心也会再次检测硬件信息 过程记录在 /var/log/dmesg 中,核心的各种功能加载会记录在 /var/log/boot.log中。

呼叫systemd这支程序
先介绍下旧版的runlevel和现在的联系。
这里写图片描述

systemd 找到/etc/systemd/system/default.target配置文件后 根据信息启动上述的各种模式,每种模式的启动需要的unit系统的及自定义的都可以在/lib/systemd/system/**.target.wants/和/etc/systemd/system/*.target.wants/下找到

通过命令systemctl list-dependencies **.target 可以看到属性相依的服务,需要启动什么模式都需要将相依的服务都启动。

systemd 执行sysinit.target 初始化系统、basic.target 准备系统。

所谓的开机启动某服务其实就是在 /etc/systemd/system/*.atrget.wants/下创建一个链接档。 syytemctl enable/disable *.service。
再所谓开机启动脚本/etc/rc.d/rc.local 就是由rc-local.service这个服务来运行,这个服务不需要额外启动,它会根据/etc/rc.d/rc.local是否有可执行权来自动进行。

关于开机启动项的查看:

systemctl list-unit-files –type=service | grep enabled

如果你觉得开机过程有问题可以通过 journalctl 来查看,它记录了整个启动过程
查阅systemd这支程序干了什么。

journalctl _PID=1

查阅有关网络的信息

journalctl | grep -i network

原创粉丝点击