目录
一、操作系统引导过程
1. 过程图示
2. 步骤解析
2.1 bios
2.2 mbr
2.3 grup
2.4 加载内核文件
3. 过程总结
4. centos6和centos7启动区别
5. 小结
二、服务控制及切换运行级别
1. systemd核心概念
2. 运行级别
3. Systemd单元类型
4. 运行级别所对应的Systemd目标
三、排除启动类故障
1. 案例一:修复mbr和分区表
1.1 新增硬盘,将备份文件备份到新盘
1.2 模拟破坏
1.3 查看分区表 (十六进制)
1.4 进入急救模式修复
1.5 查看分区表,正常重启
2. 案例二:修复grup文件及程序
2.1 模拟破坏
2.2 进入急救模式
2.3 切换根
2.4 重新安装grup2程序
2.5 重新生成配置文件
3. 案例三:破解密码
3.1 有光驱
3.1.1 切根
3.1.2 passwd
3.2 无光驱
3.2.1 进入系统,选择内核界面
3.2.2 进入单用户模式
3.2.3 重新挂载,添加读写权限
3.2.4 修改密码,添加标记
四、开机自启配置
1. centos6配置chkconfig开机自启nginx
2. centos7配置systemd开机自启nginx
3. 服务管理相关命令使用
检测硬件是否正常,根据bios中的启动项设置去寻找内核文件;boot是开机启动程序,可以把内核文件放在:
也可以称为grupd第一阶段,因为grup太大第一个扇区存不下所有的grup程序,所以分为两部分,mbr的前446个字节 指引硬件找到内核
根据grup配置文件中记录的位置,去找到内核文件;mbr之后的扇区,让上一阶段中的bootloader(引导加载器,引导硬件去找到内核,操作系统的核心)能识别下一阶段所在的分区上的文件系统
把内核运行到内存中,启动第一个“祖宗”进程
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─anacron───run-parts─┬─awk
│ └─man-db.cron───mandb
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
……
systemd进程是系统级的程序,代为管理系统上的程序。比如:rpcbind启动会监听111端口,在sleep状态下,如果有需要,systemd会将其唤醒。
加电后bios程序会自检硬件,硬件无故障,会根据第一启动项去找内核,一般来说第一启动项是硬盘;找到硬盘后,会根据mbr的指引找到完整的grup程序,再根据grup的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。
在centos7中,yum及rpm安装的软件可以直接使用systemctl(centos6中使用chkconfig)去启动、关闭、重启、开机自启等功能;编译安装不可以直接使用systemctl命令去管理程序,需要手写配置文件,路径命名:/usr/lib/systemd/system/程序.service
为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内 存中运行(运行中的程序称为进程),init 进程负责完成一系列的系统初始化过程,最后等待用户进行登录。systemd即为system daemon,是linux下的一种init软件。在systemd中不同类型的systemd对象被统一称为单元(unit:描述这个软件是做什么的,以及基本信息),是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。systemd方便管理程序,将程序按照特定的功能分成了很多单元。
runlevel:查看当前运行级别(如输出3 5,表示之前是级别3,现在是级别5)
systemctl get-default:查看默认的运行级别
systemctl set-default :设置默认级别
补充:如何调整默认级别?
利用init n命令,仅能临时修改运行级别。若想永久修改,需修改默认的运行级别设置。则需要修改配置文件:Centos7 系统之前的版本是通过/etc/inittab文件来定义系统,而 CentOS7 用的是target,centos7修改默认启动级别如下:
[root@localhost ~]# systemctl set-default multi-user.target
#设置默认第三启动级别
[root@localhost ~]# systemctl set-default graphical.target
#设置默认第五启动级别
[root@localhost ~]# mount /dev/sdb1 /mnt
[root@localhost ~]# dd if=/dev/sda of=/mnt/mbr count=1 bs=512 #备份mbr第一个扇区
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000177847 秒,2.9 MB/秒
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=512 #zero空格写0
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000353442 秒,1.4 MB/秒
[root@localhost ~]# hexdump -C -n 512 /dev/sda
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
[root@localhost ~]# cd /boot/grub2
[root@localhost grub2]# ls
device.map fonts grub.cfg grubenv i386-pc locale
[root@localhost grub2]# mv grub.cfg /opt #移除配置文件
tip:重启读条迅速按一次Esc,后续参考1.4选项
同上步骤读条迅速按Esc,选择CD-ROM,“321”选项,输入命令chroot /mnt/syssimage切根
直接输入命令passwd修改密码,完成后exit,重启reboot
注:以下案例均已默认编译安装了nginx
[root@localhost ~]# cd /etc/init.d/
[root@localhost init.d]# vim nginx #写入配置
[root@localhost init.d]# chmod +x nginx #添加权限
[root@localhost init.d]# chkconfig --add nginx #将服务加入chkconfig
[root@localhost init.d]# chkconfig --level 35 nginx on #开启3和5级别自动启动
[root@localhost init.d]# service nginx start #启动服务
[root@localhost init.d]# ss -natp | grep 80
LISTEN 0 128 *:80 *:* users:(("nginx",pid=5032,fd=6),("nginx",pid=5031,fd=6))
[root@localhost init.d]# chkconfig --list #查看服务
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
nginx 0:关 1:关 2:关 3:开 4:关 5:开 6:关
配置脚本如下:
#!/bin/bash
#chkconfig: - 99 20 #-代表运行级别全开,第99个启动,第20个关闭
#description:Nginx Service Control Script
PROG="/ky35/nginx/sbin/nginx"
PIDF="/ky35/nginx/logs/nginx.pid"
case "$1" in #如果命令里面有start,调用变量RPOG
start) $PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop $0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*) echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
#描述软件的功能,web服务
[Service]
PIDFile=/apps/nginx/logs/nginx.pid
# 方便使用pid号进行操作,明进程的 pid 号
ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动
ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程 发信号
ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载 发信号 重新加载
[Install]
WantedBy=multi-user.target
安装子字符界面
systemctl daemon-reload #重新加载配置
systemctl start nginx #开机自启ngixn
systemctl status nginx #查看状态
nginx -s stop #关闭
service 服务程序 start:开启
service 服务程序 stop:关闭
service 服务程序 restart:重启
service 服务程序 reload:重新加载
service 服务程序 status:状态
systemctl start 服务名(1,2,3……):开启,后面可以跟多个服务
systemctl stop 服务名:关闭
systemctl restart 服务名:重启(关闭开启的过程)
systemctl reload 服务名:重新加载
systemctl status 服务名:状态
4. 服务程序补充
① 一旦运行一直运行不会退出
② 一般是后台运行,不会影响前台的操作