rhel 7的系统启动过程有别与之前的版本,不仅体现在systemd取代了upstart,而且linux一切皆文件也可以说转变成了一切皆单元,怪不得李那斯如此暴怒,那究竟systemd和upstart有何不同呢
一 ,systemd
1.systemd将运行级别分成了不同的启动单元组 systemctl list-units -t target
查看所有的启动单元
2.ls -l /usr/lib/sysytemd/system/runlevel?.target
可以看到rulevel已经被连接至相应的启动单元组,二每个启动单元组又各自有什么意义呢?
systemctl list-dependencies graphical.target
可以看到在graphical.target所会启动的单元组
3.systemctl get-default
然后ll /etc/systemd/system/default.target
有一个连接指向了multi-user.target
4.systemctl enable postfix.service 将postfix设为开机启动disable关闭开机启动,然后我们去看看/etc/systemd/system/multi-user.target.wants/因为目前我们所处的运行单元组是multi-user.target
会有一个文件postfix.service有个连接指向了usr目录下的postfix.service单元,当disable之后可以看看此文件还在不在,如果手动删除这个文件呢,会不会也不能自动启动呢,当然也是能达到目的的,不过不推荐这样做,如果手动将default.target文件连接到一个启动单元组上也是可以更改默认启动单元组的
像这样就可以 ln -s default.target /usr/lib/systemd/system/graphical.target
5.systemctl mask postfix.service 这样postfix服务将无论如何也将启动不了因为
postfix.service文件被指向了/dev/null
现在是不是对systemd管理服务的方式又那么点清楚了,而且systemd可以根据需要启动服务,比如只有当文档压到打印队列时,systemd才会去启动打印的服务,所以systemd的启动速度是很快的.
6.以上是systemd启动服务,systemd在管理服务时比如结束掉一个进程时为了能结束掉此服务启动的其他进程,使用cgroup来划分组将服务和服务会启动的其他进程加到同一个cgroup中一起管理:systemd-cgls 命令查看所有cgroups
加上-k选项还可以显示内核相关的内容
二,在了解了sytemd之后,可以开始系统启动的过程了
1.加电自检,首先运行ROM中的BIOS/UEFI,(UEFI是新的自检程序在各方面都可以做的比BIOS好),接着BIOS做一些列检查,如果听到嘀嘀嘀的声音可能是有问题了,当BIOS探测到显卡设别后将会在屏幕上打印这些问题
2.BIOS根据设置去相应的硬盘MBR分区寻找bootloader程序,这里rhel 7用的是grub2,grub2分为两部分第一部分在MBR上,作用是找到并运行第二部分
3.grub2运行后根据设置加载内核文件和initramfs文件(一个辅助内核去进一步操作的虚拟文件系统)
4.grub2将控制权交给内核,内核启动第一个程序,那就是systemd,接下来就是我们在上面叙述的过程了
三,grub2
1.grub2的功能先当强悍,他的配置文件是/boot/grub2/grub.cgf,很复杂不推荐去修改,我们可以通过grub2-mkconfig -o /boot/grub2/grub.cfg来生成,命令会根据/etc/default/grub和/etc/grub.d/下的脚本来生成配置
cat /etc/default/grub
(1)GRUB_DEFAULT=saved 设置默认启动的内核,saved的值从0开始,0指第一个,1指第二个内核,依此类推:grub2-set-default命令可设置该参数
(2)然后是倒数第二行rd,lvm.lv=rhel/root ;rd.lvm.lv=rhel/swap 分别指明根和交换分区;rhel quiet 指默认启动graphical.target且静默模式不输出任何内容,可以改写成system.unit=multi-user.target或其他;在启动界面按e进入编辑界面在linux 16的末尾段可以看到这些内容,也可以在那里改动,按CTRL + x 启动
其他参数保持默认即可
4.grub2的命令行参数,在此界面按C进入
手动启动系统的代码,有兴趣的可以试试
1.insmod lvm 加载lvm卷
2.search.file /grub2/grub.cfg 找到/boot所在分区,给第5步用
3.search.file /etc/fstab 找到根给第4步用
4.set root=(lvm/rhel-root) 设置grub2的根路径
5.linux (hd0,msdos1)/vmlinuz-********.x86_64 root=/dev/mapper/rhel-root
指明内核文件TAB可补全,root系统的根设置,注意和第4步不同,rhel-root是lvm卷名,同意在/dev/mapper/下放
6.initrd (hd0,msods1)/initramfs-*********.img 指明initramfs文件,可TAB补全
7.boot 启动系统