Linux系统管理-开机启动流程
文章目录
- Linux系统管理-开机启动流程
- CentoOS6的开机启动流程
- CentOS6忘记root密码
- Linux的关机指令
- CentOS7的开机启动流程
- CentOS7进入单用户模式
- 第一种方式(只能修改密码)
- 第二种方式(只能修改运行级别)
- 进入救援模式
- 生产场景1
- 生产场景2
- 生产场景3
- systemd管理服务
- systemctl相关命令
CentoOS6的开机启动流程
1.内核引导
- MBR引导
- BIOS加电自检
- 加载grub菜单
2.运行init
运行级别 | 作用 |
0 | 关机 |
1 | 切换到单用户模式,root权限,禁止远程连接 |
2 | 多用户状态(没有文件系统) |
3 | 完全多用户状态,有文件系统,登录后使用命令行控制 |
4 | unused,没有被使用 |
5 | 切换到图形化界面(前提是安装了图形化) |
6 | 重启 |
查看当前运行级别
[root@oldboy ~]# runlevel
N 3
临时切换运行级别
[root@zls ~]# init 5
[root@zls ~]# runlevel
3 5
永久切换运行级别
[root@zls ~]# vim /etc/inittab
id:3:initdefault
3.系统初始化
首先找到,runlevel查看当前系统的运行级别
然后找到/etc/rc.d/rcN.d N代表当前的运行级别
4.建立终端
tty1
tty2
tty3
tty4
tty5
tty6
5.用户登录系统
init程序的类型:
SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
CentOS6忘记root密码
1.开机进入grub菜单
2.按e,进入单用户模式
3.按上下键选择内核kernel,再按e
4.在最后一行quiet后面加上空格再加数字1(是单用户模式的运行级别)或者single然后回车
5.然后根据提示按下b(boot)进行重新引导
6.修改root密码
passwd root
reboot
Linux的关机指令
sync 将数据由内存同步到硬盘中。
shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
shutdown –h now 立马关机
shutdown –h 20:25 系统会在今天20:25关机
shutdown –h +10 十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10 系统十分钟后重启
reboot 就是重启,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff
CentOS7的开机启动流程
1.内核引导
- MBR引导(512字节)
- BIOS加电自检
- 加载grub2菜单(选择要进入的系统)
2.运行init(使用systemd来管理init及所有服务)
运行级别 | 作用 | centos7 |
0 | 关机 | poweroff.target |
1 | 切换到单用户模式,root权限,禁止远程连接 | recuse.target |
2 | 多用户状态(没有文件系统) | multi-user.target |
3 | 完全多用户状态,有文件系统,登录后使用命令行控制 | multi-user.target |
4 | unused,没有被使用 | multi-user.target |
5 | 切换到图形化界面(前提是安装了图形化) | graphical.target |
6 | 重启 | reboot.target |
# 修改默认的运行级别
systemctl set-default 运行级别的名字
systemctl get-default 查看运行级别
3.系统初始化
- systemctl get-default 查看当前的运行级别 -> multi-user.target
- /etc/systemd/system/multi-user.target.wants
- 并行开启所有的开机自启服务
4.建立终端
tty1
tty2
tty3
tty4
tty5
tty6
5.用户登录
CentOS7进入单用户模式
第一种方式(只能修改密码)
1.关机
init 0
2.停在grub2菜单
3.按e进入内核编辑界面
4.将光标下移,移动到linux16那一行,行末(一般是quiet后面)
5.输入enforcing=0 init=/bin/bash
6.按Ctrl + x
# 重新挂载/目录 , 因为该模式/目录是只读权限
bash-2.4# mount -o rw,remount /
# 该模式下,只能解决忘记root密码的问题
bash-2.4# echo 123 |passwd --stdin root
# 重新引导系统
bash-2.4# exec /sbin/init
第二种方式(只能修改运行级别)
1.进入grub2菜单
2.按e进入内核编辑界面
3.将 biosdevname=0 前面的 ro 改成 rw ,避免重新挂在 / 目录,然后还是在 linux16 的行末输入 rd.break
4.按 Ctrl + x
5.执行命令
# 获取到root权限
switch_root:/# chroot /sysroot
# 修改运行级别
sh-4.2# systemctl set-default multi-user.target
# 退出
sh-4.2# exit
# 重启
switch_root:/# reboot
进入救援模式
生产场景1
当系统坏了,无法登陆系统,但是需要把里面的数据拷贝出来,怎么办?
bash-4.2# mkfs.xfs -f /dev/sdc
bash-4.2# mkdir /data
bash-4.2# mount /dev/sdc /data
bash-4.2# cp -a /raid0 /data
bash-4.2# umount /dev/sdb
生产场景2
修复MBR,主要出现在安装双系统的时候,后安装的系统把原来的MBR删除了,需要修复
破坏硬盘的钱446字节,模拟MBR引导损坏,会发现重启无法启动系统
系统损坏,没有机会进入grub菜单
[root@zls ~]# dd < /dev/zero >/dev/sda bs=1 count=446
记录了446+0 的读入
记录了446+0 的写出
446字节(446 B)已复制,0.0011061 秒,403 kB/秒
1.选择Troubleshooting
2.选择Rescue a CentOS system 进入救援模式
3.进入救援模式后输入 1 按回车
4.敲回车,获得一个shell
## 获取到root权限
bash-2.4# chroot /mnt/sysimage
## 修复mbr引导
grub2-install /dev/sda
## 退出
exit
## 重启
reboot
生产场景3
CentOS7 误删除grub文件,进行修复
1.模拟故障
#删除grub2
[root@oldboy ~]# rm -fr /boot/grub2/
#重启
[root@oldboy ~]# reboot
2.查看系统状态
3.从BIOS启动
4.进入BIOS设置从光盘启动
5.按F10保存退出
6.选择Troubleshooting
7.选择救援模式
8.进入救援模式后输入 1 按回车获得一个shell
9.输入chroot /mnt/sysimage获取root权限
10.重新安装MBR,加载grub2中的grub.cfg
文件
bash-4.2# chroot /mnt/sysimage
bash-4.2# grub2-install /dev/sda
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
11.查看加载出来的文件
12.退出、关机
13.进入BIOS设置从光盘启动把Hard Drive调到最上面,然后按F10保存退出
systemd管理服务
优势
1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15…)
2.CentOS7 支持开机并行启动服务,显著提高开机启动效率
3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4.CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不再有脚本。
5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。
相关的配置文件
/usr/lib/systemd/system #类似C6系统的启动脚本目录/etc/init.d/
/etc/systemd/system/ #类似C6系统的/etc/rc.d/rcN.d/
/etc/systemd/system/multi-user.target.wants/ (开机启动的服务在这个目录下)
System V init(6系统) | systemctl命令(7系统) | 作用 |
service crond start | systemctl start crond.service | 启动服务 |
service crond stop | systemctl stop crond.service | 停止服务 |
service crond restart | systemctl restart crond.service | 重启服务 |
service crond reload | systemctl reload crond.service | 重新加载配置(不终止服务) |
service crond status | systemctl status crond.servre | 查看服务运行状态 |
systemctl is-active sshd.service | 查看服务是否在运行中 | |
systemctl mask crond.servre | 禁止服务运行 | |
systemctl unmask crond.servre | 取消禁止服务运行 |
systemctl
设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
System V init(6系统) | systemctl命令(7系统) | 作用 |
chkconfig crond on | systemctl enable crond.service | 开机自动启动 |
chkconfig crond off | systemctl disable crond.service | 开机不自动启动 |
chkconfig --list | systemctl list-unit-files | 查看各个级别下服务的启动与禁用 |
chkconfig --list crond | systemctl is-enabled crond.service | 查看特定服务是否为开机自启动 |
chkconfig–add crond | systemctl daemon-reload | 创建新服务文件或者变更设置 |
systemctl
服务状态说明
服务状态 | 状态说明 |
loaded | 服务单元的配置文件已经被处理 |
active(running) | 服务的一个或多个进程在运行中 |
active(exited) | 一次性运行的服务成功被执行并退出(服务运行后完成任务,相关进程会自动退出) |
active(waiting) | 服务已经运行但在等待某个事件 |
inactive | 服务没有在运行 |
enable | 服务设定为开机运行 |
disabled | 服务设定为开机不运行 |
static | 服务不能被设定开机启动,但可以由其他服务启动该服务 |
systemctl相关命令
# 启动服务
systemctl start 服务名
# 停止服务
systemctl stop 服务名
# 重启服务
systemctl restart 服务名
# 重新加载配置文件,不重启服务
systemctl reload 服务名
# 查看服务的运行状态
systemctl status 服务名
# 判断服务是否在运行
systemctl is-active 服务名
# 禁止服务运行
systemctl mask 服务名
# 取消禁止服务运行
systemctl unmask 服务名
# 开机自启
systemctl enable 服务名
# 禁止开机自启
systemctl disable 服务名
# 查看系统中开机自启和禁止、静态服务
systemctl list-unit-files
# 查看服务是否允许开机自启
systemctl is-enabled 服务名
# 重新加载启动脚本
systemctl daemon-reload