引导过程总览
开机自检(BIOS)➡MBR引导➡GRUB菜单➡加载内核(kernel)➡ini进程初始化
操作系统内核——硬件
OS外壳——应用
系统初始化进程
init进程:由Linux内核加载运行 /sbin/init程序
init进程是系统中第一个进程
init进程的PID(进程标记)号永远为1
systemd是Linux操作系统的一种init软件
CentOS7中采用全新的systemd启动方式,取代传统的sysvinit
CentOS7中运行的第一个init进程是/lib(库文件)/systemd/systemd
单元类型
service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述一个文件系统的挂载点 |
Swap | .swap | 描述一个内存交换设备或交换文件 |
Path | .path | 描述一个文件系统中文件或目录 |
Timer | .timer | 描述一个定时器(用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态 |
Scope | .scope | 使用systemd的总线接口以编辑的方式创建外部进程 |
Slice | .slice | 描述居于(group的一组通过层次组织的管理系统进程) |
Target | .target | 描述一组systemd的单元 |
Autmount | .autmount | 描述一个文件的自动挂载点 |
运行级别所对应的systemd目标
运行级别 | systemd的target | 说明 |
0 | target | 关机状态,使用该级别时将会关闭主机 |
1 | rescue.target | 单用户模式,不需要密码验证即可登录,用于系统维护 |
2 | multi-user.target | 用户定义域特定运行级别默认等同于3 |
3 | multi-user.target | 字符界面的完整用户模式,大多数服务器主机运行在此级别 |
4 | multi-user.target | 用户定义/域特定运行级别,默认等同于3 |
5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作系统 |
6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
修复MBR扇区故障
故障原因:病毒、木马等造成的破坏
不正确的分区操作、磁盘读写误操作
故障现象:找不到引导程序,启动中断
无法加载操作系统开机后黑屏
解决思路:应提前做好备份文件
以安装光盘引导进入急救模式
从备份文件中恢复
模拟MBR扇区实验(加一块硬盘做实验)
进系统查看磁盘 fdisk -l 格式化:mkfs.ext4 /dev/sdb
挂载 mount /dev/sdb /oopt
备份MBR扇区数据
dd if=/dev/sda of=/opt/mbr.back bs=512 count=1
模拟MBR扇区故障
dd if=/dev/zero of=/opt/sda bs=512 count=1
出现:operating system not found
光盘引导,进入急救模式,提示操作
从备份文件中恢复MBR扇区
步骤如下:
装入光盘,在光盘引导界面选择troubleshooting
进入troubleshooting菜单选择Rescue a centos system
进入引导可以按回车,或者等待,按1再按回车进入sh-4.2#
急救模式下sdb的挂载 mkdir /sdb mount /dev/sdb /sdb
cd /sdb 查询下该备份文件是否存在
dd if=/sdb/mbr.back of=/dev/sda count=1 bs=512
重启reboot进入系统测试是否正常
修复GRUB引导故障
故障原因MBR中的GRUB引导程序遭到破坏
grub.conf文件丢失,引导配置有误
故障现象:系统引导停滞,显示“grub>"提示符
解决思路:
- 尝试手动输入引导命令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
步骤:
- cd /boot/grub2 进入grub2
- rm -rf grub.cfg 删除grub2.cfg模拟故障
- init 6重启出现故障grub>
修复:
- 引导急救模式,加载系统镜像chroot /mnt/sysimage
- 重新加载sda分区, grub2 install /dev/sda
- 重新构建grub菜单配置文件 grub2-mkconfig -o /doot/grub2/grub.cfg
- 退出bash环境 exit
- 重启reboot
忘记root密码
修复:
- 引导急救模式,加载系统镜像chroot /mnt/sysimage
- 修改密码:passwd root
- new:
- retry:
- 退出bash环境:exit
- 重启:reboot
系统服务控制 systemctl 控制类型,服务名称
控制类型
start | 启动 |
stop | 停止 |
restart | 服务中断并重新启动 |
reload | 服务不中断,重新加载 |
status | 查看服务状态 |
enable | 开机自启动 |
disable | 开机禁用 |
查看系统默认的运行级别:systemctl get-default
不重启机器而切换当前的运行级别
- 字符型界面:systemctl isolate muitl-user.target
- 图形化界面:systemctl isolate graphical.target
查看当前的运行级别
- systemctl isolate multi-user.target切换到字符型界面
- runlevel 5 3
- 5是前一个运行级别,3是当前的运行级别
也可以用who-r 命令
- runlevel是当前运行级别 last是上一个运行级别
修改默认的运行级别target(重启之后才能生效)
- systemctl set-default multi-user.target
删除链接的目标文件,在创建软链接
- rm /etc/systemd/system/default.target
- ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
查看一个运行级别下面的所有until服务依赖关系
- systemctl list-dependencies
- list-dependencies 分析指定target各unit之间的依赖关系,如果不指明target,则表示是默认的target
系统服务的启动和控制-ntsysv系统服务管理工具
- ntsysv
- ntsysv-level级别列表
按照默认设置,只有当前运行级别会被配置,要配置不同的运行级别使用”--level“选项来指定一个或多个运行级别,例如,命令”ntsysv --level345“配置运行级别345
- ntsysv——提供一个交互式、可视化窗口,可以在字符终端运行,便于集中管理多个服务
- systemctl工具——不提供交互式、可视化窗口,管理单个服务效率更高
查看哪些target引用了当前运行级别的target
- (--reverse)
- systemctl list-dependencies multi-user.target --reverse
- 现象为——graphical.target
- multi-user.target被graphical.target所引用
systemctl 与关机/重启相关命令
- 关闭CPU,但未关闭电源(systemctl halt)
- 关闭电源(systemctl power off )建议使用这个,这个会真正关闭电源
- 重启机器(systemctl reboot )
理出系统中包含的所有targe
- systemctl list-unit-files --type=target
查案CentOS的版本
- cat /etc/redhat-release
查看系统服务的启动状态
- systemctl is-enanled 服务名称
设置系统服务的启动状态
- systemctl enable、disable 服务名称
列出所有ative的unit
- systemctl list-units
列出所有unit包括inactive
- systemctl list-units --all
列出所有为运行的unit,击状态是inactive的
- systemctl list-units --all--stste=inactive
列出所有active的服务单元
- systemctl list-units --type=service
列出所有状态包括active和inactive的所有服务unit
- systemctl list-units --type=srevice --all
检索某一服务状态
- systemctl list-units --type=srevice --all |grep 服务名
针对四种state的说明
- enabled——已建立自启动链接
- disabled——设置建立自启动链接
- static——该配置文件没有【install】部分无法执行,只能作为其他配置文件的以来
- masked——该配置文件被禁止建立启动链接
列出一个服务所依赖的单元
- list-dependencies
列出一个unit的所有依赖
- systemctl list-dependencies firewalld.service
查看unit文件
- systemctl cat openresty.service
重新加载所有修改过的unit文件
- systemctl daemon-reload
显式指定unit的所有底层参数
- systemctl show openresty.service
也可以只看其中的一项
- systemctl show-p PIDFILE openresty.service
- PIDFILE=/usr/local/openresty/nginx/logs/nginx.pid
daemon:系统为了具备某些功能,需要开启相应的服务,服务就是我们所说的service,但是service的提供者是一些程序,所以为了完成这个service的程序,我们称呼它为daemon,即为完成某个服务需要一个daemon在后台中运行,没有这个daemon就不会有service,基本上每个服务都能找到一个它的daemon,所以昨天学的systemctl daemon-reload非常好用。
getty:这个服务是为了实现多终端功能的,什么是多终端呢,就是累telnet的多线程,为了允许多用户同时登陆时系统的这个功能而实现的。