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进行修复
-
先破坏硬盘的前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/秒
-
将centos7系统光盘装载到虚拟机光驱上,修改BISO引导顺序,让光盘启动
进入启动的页面
选择第三项进入故障排除页面后,点击第二项
shell#进入如下模式,选择1,会进入一个shell模式,进行系统修复 mount chroot /mnt/sysimage grub2-install /dev/sda exit reboot
3.在centos7下误删grub文件进行修复
-
误删grub2
shell[root@localhost ~]# rm -rf /boot/grub2
-
重启计算机
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