Linux系统启动原理

Linux系统启动原理及故障排除

Centos6系统启动过程

修改系统启动级别

shell 复制代码
vim /etc/inittab

Centos7启动流程

加载BIOS信息,进行硬件检测
根据BIOS设定读取设备中的MBR,加载Boot loader
加载内核,内核初始化以后以模块的形式动态加载硬件
并且加载initramfs虚拟文件系统,然后将虚拟文件系统加载到内存中
调用initrd.target 挂载/etc/fstab中文件系统
切换回硬盘真实目录,然后启动第一个进程systemd

运行级别切换

shell 复制代码
#在centos6、7切换界面
init 3  切换字符界面
init 5  切换图形界面
#属于centos7切换字符界面
systemctl isolate multi-user.target
systemctl isolate runlevel3.target

#切换图形页面
systemctl isolate grpahical.target

#centos设置系统默认启动级别
systemctl set-default graphical.target

ll /etc/systemd/system/default.target
grub2
shell 复制代码
[root@localhost ~]# vim /etc/default/grub 
GRUB_TIMEOUT=5   #开机时grub默认5秒后启动
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=1    #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"

查看操作系统内核

shell 复制代码
[root@localhost ~]# uname -r
3.10.0-957.el7.x86_64

故障排除

1.加密grub防止过单用户系统修改root密码

生成MD5密码

shell 复制代码
[root@localhost ~]# grub2-mkpasswd-pbkdf2 
输入口令:123456
Reenter password: 123456 
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.45259E0BC9FC9D0F16C89B0014D74C7275D3423E4832F1BFE0FE0D6E6521037F986A4E9D12809D939838DB374FA2C60BEA92BD9569038E1344D025903EA33A23.CF7713EC8EF3D4A47A378D304C917B2BD4E01173EC6560BC448B7A4669D98502820D9C311484877A65428848D5A46BF57561BAA3484471F1204AD7EF056F12C7

将刚好生成MD5密码复制此文件下面

shell 复制代码
[root@localhost ~]# vim /etc/grub.d/00_header 
cat << EOF
set superusers='rs'
password_pbkdf2 rs grub.pbkdf2.sha512.10000.45259E0BC9FC9D0F16C89B0014D74C7275D3423E4832F1BFE0FE0D6E6521037F986A4E9D12809D939838DB374FA2C60BEA92BD9569038E1344D025903EA33A23.CF7713EC8EF3D4A47A378D304C917B2BD4E01173EC6560BC448B7A4669D98502820D9C311484877A65428848D5A46BF57561BAA3484471F1204AD7EF056F12C7
EOF

重新加载配置文件

shell 复制代码
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 

重启验证

输入"e"之后,输入用户和密码

就能看到grub菜单,就证明加密成功

2.当MBR引导记录损坏后-重装grub进行修复

  1. 先破坏硬盘的前446字节

    shell 复制代码
    [root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
    记录了446+0 的读入
    记录了446+0 的写出
    446字节(446 B)已复制,0.00182828 秒,244 kB/秒
  2. 将centos7系统光盘装载到虚拟机光驱上,修改BISO引导顺序,让光盘启动

    进入启动的页面

    选择第三项进入故障排除页面后,点击第二项

    shell 复制代码
    #进入如下模式,选择1,会进入一个shell模式,进行系统修复
    mount
    chroot /mnt/sysimage
    grub2-install /dev/sda
    exit
    reboot

3.在centos7下误删grub文件进行修复

  1. 误删grub2

    shell 复制代码
    [root@localhost ~]# rm -rf /boot/grub2
  2. 重启计算机

    shell 复制代码
    [root@localhost ~]# reboot

    再次重启系统,按ESC,进入光盘救援模式,进入光盘救援使用live cd 进入救援模式后

    shell 复制代码
    #切换根目录
    chroot /mnt/sysimage
    #执行命令
    grub2-install /dev/sda
    grub2-mkconfig -o /boot/grub2/grub.cfg
    exit
    reboot

4.密码找回

​ 1.首先重启系统

进入启动界面内按"e"进入编辑模式

​ 2.进入编辑模式进行编辑

找到"Linux16"开头的行,在Linux的行尾空格后添加"rd.break"

添加,完成之后,按ctrl+x即可

查看下挂载信息

shell 复制代码
mount | grep "centos-root"
#查看过后发现不具备rw读写权限

重新挂载,拥有读写权限

shell 复制代码
mount -o remount,rw /dev/mapper/centos-root /sysroot/

切换根目录

shell 复制代码
chroot /sysroot/

使用passwd命令修改root密码

shell 复制代码
passwd root

修改完密码之后,创建.autorelabel隐藏文件

shell 复制代码
#因为rd.break环境下SELinux是不生效的。
#在不生效的情况下修改用户的密码,也就是修改/etc/shadow文件。
#所以密码文件的安全上下文会被取消
#如果没有让系统在启动时自动恢复SElinux的安全上下文,系统会报错无法登录
#所以在根目录下创建隐藏文件.autorelabel会让系统在重启时以SELinux默认类型重新写入SELinux安全上下文
touch /.autorelabel

或者是

shell 复制代码
vim /etc/selinux/config 
修改成:SELINUX=disabled
相关推荐
码思途远2 小时前
NXP i.MX8系列平台开发讲解 - 3.18 Linux tty子系统介绍(一)
linux·nxp·i.mx8m
aliceDingYM2 小时前
Linux python3.6安装mayavi报错
linux·python·ui
没耳朵的Rabbit2 小时前
RedHat运维-LinuxSELinux基础3-用布尔值调整SELinux政策
运维·服务器
kinlon.liu2 小时前
Linux的前世今生
linux·运维·服务器
CloudJourney2 小时前
探索 Kali Linux:定义、架构、原理、应用场景及常见命令体系
linux·运维·架构
没耳朵的Rabbit2 小时前
RedHat运维-LinuxSELinux基础1-SELinux三种状态
运维·服务器·网络
搬砖写代码2 小时前
MySQL数据库文件在Linux下存放位置
linux·数据库·mysql
季春二九3 小时前
解决 Docker 容器镜像拉取难题:全面指南
运维·docker·容器
^_^ 纵歌3 小时前
virtualbox和docker的区别和优缺点以及如何选择
运维·docker·容器
运维之美@4 小时前
Linux dig命令常见用法
linux·运维·服务器