CentOS 7开机启动过程,引导和服务,密码的修改

发布于:2024-04-17 ⋅ 阅读:(30) ⋅ 点赞:(0)

开机启动过程:

引导过程:1.开机自检(BIOS)->2.MBR引导->GRUB菜单->加载内核kernel->systemd进程初始化

程序:执行特定任务的一串代码,静态,存在硬盘中。

进程:运行中的程序叫进程,动态,存在内存中。有生命周期。linux宏内核。

守护进程:init(CentOS6),systemd(CentOS7)。开机后先启动systemd再启动其它程序

开机启动顺序:告诉硬件去哪里找操作系统。BIOS:1.硬件,2.移动设备(光驱CDROM),3.网卡。

BIOS软件:检测硬件,然后指引硬件去找操作系统

MBR(硬盘的第一个扇区)512字节:1.开机引导程序 446字节。2.分区表64字节

GRUB:根据grub.cfg配置文件找到内核文件引导内核文件运行起来

kernel:加载内核,把内核放入内存中运行

运行级别所对应的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 重新启动,使用该级别时将会重启主机

2,3是字符界面,5是图形界面。可通过init 3进入字符界面

输入用户名和密码登录字符界面。说明:密码含有数字的小键盘输入无效!

可以再输入init 5切回图形界面!

解决系统故障问题

1.修复MBR分区

修复MBR扇区故障

故障原因:病毒,木马等造成的破坏;不正确的分区操作、磁盘读写误操作

故障现象:找不到引导程序,启动中断;无法加载操作系统,开机后黑屏

解决思路:应提前做好备份文件;以安装光盘引导进入急救模式;从备份文件中恢复

1.备份mbr引导扇区到其他磁盘。2.模拟破坏mbr引导扇区。3.引导镜像急救模式进入mbr扇区恢复

基本原理:

1.增加一块磁盘sdb(可以重启一下,lsblk就能看到sdb了)

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64 

2.分区格式化挂载到mnt下

3.复制(备份分区表)

dd if=/dev/sda of=/mnt/mbr.bak count=1 bs=512

[root@localhost ~]# dd if=/dev/sda of=/mnt/mbr.bak count=1 bs=512
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000643148 秒,796 kB/秒

[root@localhost ~]# ls /mnt                # 备份进来了
mbr.bak

4.破坏sda中第一个扇区

可以先看一下前512字节,是完整的数据

可以看到备份的文件和sda的第一个扇区完全一致

破坏:往sda第一个扇区里面写0:dd if=/dev/zero of=/dev/sda count=1 bs=512

数据被破坏

 重启前保证光驱是连接的

重启!选择第三个进入急救模式!

选择第二个!

 进入光驱的系统中去

ls /mnt        看到当前的mnt下没有任何东西

mount /dev/sdb1 /mnt        将sdb1挂载到mnt下

ls /mnt        看到了我们的备份文件

dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512        复制回去

reboot重启

重启后就能正常进入操作系统了

总结:

增加一块磁盘sdb 分区sdb1 挂载到/mnt上。

复制(备份分区表):dd if=/dev/sda of=/mnt/mbr.bak count=1 bs=512

hexdump -C -n 512 /dev/sba  查看完整性

dd if=/dev/zero of=/dev/sda count=1 bs=512 损坏

hexdump -C -n 512 /dev/sda 查看到数据被破坏

reboot 重启进入光驱:选择第三个急救模式,选择第二个进入光驱系统,输入1 continue

mount /dev/sdb1 /mnt 把sdb1挂载到/mnt下

dd if=/mnt/mbr.bak of=/dev/sda count=1 bs=512 备份回去(备份分区表)

hexdump -C -n 512 /dev/sda #能看到数据恢复了

重启:reboot。能正常进入系统了。

2.修复GRUB分区

文件在/boot/grub2/grub.cfg。我们在根下创建个文件夹mkdir /data。把grub.cfg移动到/data中

使得开机启动时找不到grub.cfg

重启!重启时在读条过程中按esc,且只能按一次,读条只有0.5秒。

如果成功了,就进入这个界面,没成功就多试几次。选择CD-ROM

操作

总结:

把grub.cfg从/boot/grub2/grub.cfg移动到/data/下

重启,在读条0.5秒内按esc键,选择第三个进入光驱里面。选第三个急救模式,选择第二个进入光驱模式,输入1 continue

chroot /mnt/sysimage #有提示,根被挂载到mnt下了,切换到自己的根。进入急救模式后,更改环境

ls /data 发现有grub.cfg。可以直接复制过去到/boot/grub2/grub.cfg也可以用命令生成它。这里用以下两条命令生成

grub2-install /dev/sda 重新设置分区。重新建立加载sda分区

grub2-mkconfig -o /boot/grub2/grub.cfg 到这个路径下。只能叫这个名字。重新构建grub菜单配置文件

exit #退出shell环境

重启reboot

3.修改密码

当忘记root密码时可以通过两种方式:1.进入急救模式,通过passwd修改密码。2.启动时任意键暂停启动。按e键进入编辑模式

方式一:比较简单

需要在读条0.5秒中按一次esc键。进入光驱系统中,上面讲了。

选择1继续->2.更改环境->3.passwd更改密码->4.输入密码和确认密码(密码不显示)->5.退出当前环境->重启

方式二:

重启时在这个界面按e键,只有5秒

进入这个界面在linux开头的行的最后,敲一个空格,输入rd.break。按ctrl+x启动。

服务

服务程序:1.本地服务程序,管理本机:systemd,init。2.网络服务程序,接待网络客户

systemd:管家式的程序,管理系统中其他程序;为了方便管理将系统中的程序按照一定的规则进行分类

通过命令pstree -p查看进程树,可见systemd是系统启动的第一个进程。由它来引导其他程序启动。

想被systemd程序管理:系统必要的程序,yum rpm安装的程序,编译安装的程序,需要手写配置文件后才可以。必须在/usr/lib/systemd/system/下.service才会被systemd管理,yum和rpm会自动生成,天生可以被systemd管理,编译需要手写该文件,手写服务名.service的文件。

[root@localhost system]# pwd
/usr/lib/systemd/system
[root@localhost system]# find ./ -name '*.service' | wc -l
338

当一个服务被停掉后,如果有其他用户来访问这个服务时,只有在/usr/lib/systemd/system/下以.service的文件才会被systemd被唤醒。

  • systemctl命令:

    systemctl start 服务名 开启服务

    systemctl stop 服务名 关闭服务

    systemctl status 服务名 查看状态

    systemct restart 服务名 重启服务

    systemctl reload 服务名 重新加载服务不影响使用

    systemctl enable 服务名 开机自启

    systemctl disable 服务名 关闭开机自启

    systemctl enable --now 服务名 开机自启并立即启动

    systemctl disable --now 服务关闭开机自启,并立即关闭