Linux云计算架构-Linux系统启动原理
文章目录
- Linux云计算架构-Linux系统启动原理
- centos6启动原理
- centos7启动原理
- 管理服务
Linux云计算架构-Linux系统启动原理
1. centos6启动原理
# centos6系统启动过程
1.加载bios的硬件信息,根据设定获取第一个可开机引导设置。
2.读取硬盘中MBR的boot Loader(主引导程序),即grub引导。【MBR=主引导程序(boot loader)+分区表(Partition table)+MBR有效标识】
3.依据boot loader的设定,到引导分区加载Kernel,Kernel会开始侦测硬件并加载驱动程序。
4.硬件驱动程序加载成功后,Kernel会主动执行init程序,init程序读取/etc/inittab文件获取run-level信息。
5.init执行/etc/rc.d/rc.sysinit文件来准备软件执行的作业环境 (如网络、时区等)。
6.init执行run-level下各个服务并启动(script方式)。【7个运行级别(0-6)】
7.init执行开机后自动运行脚本/etc/rc.d/rc.local文件。
8.init执行虚拟终端机控制程序mingetty来启动login程序,最后就等待用户登录。
# centos6启动的相关配置文件
/boot/grub/grub.conf # 主引导程序的配置文件
/etc/inittab # 定义系统运行级别
/etc/rc.d/rc.sysint # 系统初始化脚本
/etc/rc.d/rc3.d/* # 在对应运行级别下,会执行对应目录下的服务的启动文件【S启动K关闭,数字为启动或关闭的顺序】
/etc/rc.d/rc.local # 登录前自动运行脚本
2. centos7启动原理
# centos7系统启动过程
1.UEFi或BIOS初始化,运行POST开机自检
2.选择启动设备,引导装载程序,centos7是grub2,centos6是grub
3.加载装载程序的配置文件:/etc/grub.d/(根据此目录下文件设置 grub.cfg)
[root@server ~]# ll -d /etc/grub.d/
drwx------. 2 root root 182 6月 30 16:07 /etc/grub.d/
# 用/etc/default/grub文件配置/boot/grub2/grub.cfg文件
[root@server ~]# ll /etc/default/grub
-rw-r--r--. 1 root root 279 6月 30 16:08 /etc/default/grub
[root@server ~]# ll /boot/grub2/grub.cfg
-rw-r--r--. 1 root root 4287 6月 30 16:09 /boot/grub2/grub.cfg
4.加载内核,加载initramfs初始化伪文件系统【虚拟文件系统,/boot/initramfs能通过boot loader加载到内存中。用于提供启动过程中的重要内核模块。】
[root@server ~]# ll /boot/initramfs-*
-rw-------. 1 root root 73998306 6月 30 16:07 /boot/initramfs-0-rescue-e1e61b24281c4661a62720f8c084ca3d.img
-rw-------. 1 root root 31879114 6月 30 16:09 /boot/initramfs-3.10.0-957.el7.x86_64.img
-rw-------. 1 root root 13575929 7月 21 20:15 /boot/initramfs-3.10.0-957.el7.x86_64kdump.img
5.内核初始化,启动systemd程序【centos7用systemd代替init】
6.执行initrd.target所有单元,包括挂载/etc/fstab
7.从initramfs根文件系统切换到磁盘根目录
[root@server ~]# pwd
/root
8.systemd执行默认target配置,配置文件/etc/systemd/system/default.target
[root@server ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 6月 30 16:08 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
9.systemd执行sysinit.target初始化系统及basic.target准备操作系统
[root@server ~]# ll /etc/systemd/system/ | grep wants
drwxr-xr-x. 2 root root 4096 6月 30 16:03 sysinit.target.wants
drwxr-xr-x. 2 root root 57 6月 30 16:05 basic.target.wants
10.systemd启动multi-user.target下的本机与服务器服务
drwxr-xr-x. 2 root root 4096 7月 3 07:40 multi-user.target.wants
11.systemd执行multi-user.target下的/etc/rc.d/rc.local
drwxr-xr-x. 2 root root 4096 7月 3 07:40 multi-user.target.wants
12.systemd执行multi-user.target下的getty.target及登录服务
drwxr-xr-x. 2 root root 32 6月 30 16:03 getty.target.wants
13.systemd执行graphical需要的服务
drwxr-xr-x. 2 root root 133 6月 30 16:35 graphical.target.wants
[root@server ~]# ll /etc/systemd/system/ | grep wants
drwxr-xr-x. 2 root root 57 6月 30 16:05 basic.target.wants
drwxr-xr-x. 2 root root 31 6月 30 16:03 bluetooth.target.wants
drwxr-xr-x. 2 root root 87 6月 30 16:03 default.target.wants
drwxr-xr-x. 2 root root 38 6月 30 16:05 dev-virtio\x2dports-org.qemu.guest_agent.0.device.wants
drwxr-xr-x. 2 root root 32 6月 30 16:03 getty.target.wants
drwxr-xr-x. 2 root root 133 6月 30 16:35 graphical.target.wants
drwxr-xr-x. 2 root root 35 6月 30 16:03 local-fs.target.wants
drwxr-xr-x. 2 root root 4096 7月 3 07:40 multi-user.target.wants
drwxr-xr-x. 2 root root 48 6月 30 16:03 network-online.target.wants
drwxr-xr-x. 2 root root 26 6月 30 16:04 printer.target.wants
drwxr-xr-x. 2 root root 31 6月 30 16:03 remote-fs.target.wants
drwxr-xr-x. 2 root root 217 6月 30 16:05 sockets.target.wants
drwxr-xr-x. 2 root root 4096 6月 30 16:03 sysinit.target.wants
drwxr-xr-x. 2 root root 44 6月 30 16:03 system-update.target.wants
drwxr-xr-x. 2 root root 34 6月 30 16:03 timers.target.wants
3. 管理服务
动作 | centos6 | centos7 |
---|---|---|
启动 | service 独立服务名 start | systemctl start 独立服务名 |
停止 | service 独立服务名 stop | systemctl stop 独立服务名 |
重启 | service 独立服务名 restart | systemctl restart 独立服务名 |
状态 | service 独立服务名 status | systemctl status 独立服务名 |
重载或重启服务(先加载,再重启) | systemctl reload 独立服务名 |
动作 | centos6 | centos7 |
---|---|---|
自启动 | chkconfig name on | systemctl enable name |
禁用自启动 | chkconfig name off | systemctl disable name |
查看所有服务的开机自启状态 | chkconfig —list | systemctl list-unit-files —type service |
# 服务状态
loaded # Unit配置文件已处理
active(running) # 一次或多次持续处理的运行
active(exited) # 成功完成一次性的配置
active(waiting) # 运行中,等待一个事件
inactive # 不运行
enabled # 开机启动
disabled # 开机不启动
static # 开机不启动,但可被另一个启用的服务激活
# 系统的启动级别,及启动级别的切换。
0:关机 Init 0 systemctl poweroff
1:单用户模式,用于系统恢复。 Init 1 systemctl isolate rescue.target
2:不完全命令行模式,无网络
3:完全命令行模式,有网络,字符界面 Init 3 systemctl isolate multi-user.target
4:系统保留
5:图形化界面,有网络 init 5 systemctl isolate graphical.target
6:重启 init 6 systemctl reboot
# 可以在不同级别下,设置服务是否随系统启动而运行。
[root@server ~]# ll /usr/lib/systemd/system/*.target | grep runlevel
lrwxrwxrwx. 1 root root 15 6月 30 16:03 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 6月 30 16:03 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 6月 30 16:03 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 6月 30 16:03 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 6月 30 16:03 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 6月 30 16:03 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 6月 30 16:03 /usr/lib/systemd/system/runlevel6.target -> reboot.target
# 查询target目标态类型的运行级别
[root@server ~]# systemctl list-unit-files --type target
# 查询随着系统以某种运行级别启动时,所对应的服务的启动情况【依赖于某个系统运行级别所启动或关闭的服务】
[root@server ~]# systemctl list-dependencies runlevel3.target
[root@server ~]# systemctl list-dependencies runlevel5.target
# 系统运行级别切换
[root@server ~]# runlevel
3 5
[root@server ~]# init 3
# 设置默认目标态default.target【默认启动级别】
# 设置默认目标态,即是将默认目标态用软连接指向对应启动级别的目标态
[root@server ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 6月 23 17:54 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target
[root@server ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
[root@server ~]# ll /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 41 7月 22 17:27 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target
# grub和grub2的区别
1.centos6的grub配置文件/boot/grub/grub.conf
2.centos7的grub2配置文件/boot/grub2/grub.cfg
3.grub和grub2都是用于加载内核,但grub2有一个默认启动项配置文件
# centos7修改内核启动的顺序
[root@server ~]# cat /etc/default/grub
GRUB_TIMEOUT=5 # 默认5s后启动内核
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved # 默认使用的内核,0为第一个内核,1为第二个内核
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
# 查询加载的内核
[root@server ~]# uname -r
3.10.0-957.el7.x86_64
# centos6修改内核启动顺序
[root@server ~]# vim /boot/grub/grub.conf
default=1
[root@server ~]# reboot
如果不是很清楚服务应该怎样管理的,可以看看这篇博客:服务管理
还没有评论,来说两句吧...