linux系统启动过程中的排错
一.系统启动流程
(1)通电
(2)bios(主板上的只读存储中,basic input or output system)作用,硬件检测,**硬件
(3)grub系统引导(grub引导分为两个阶段)
1)阶段1 mbr(主引导记录)主引导记录在硬盘上的0磁道,一扇区,446个字
linux中MBR分区原理:446 Byte 硬盘主引导记录、64 Byte 硬盘分区表(linux最多有四个分区,每个16byte)、2 Byte 硬盘有效标志
2)阶段2 grub文件引导阶段
(4)启动内核,只读挂载/设备检测设备对设备驱动进行初始化
(5)系统初始化阶段、系统初始化阶段加载initrd镜像、开启初始化进程systemd、开始selinux、加载内核参数、初始化系统时钟、键盘,主机名称、重新读写挂载/设备、**raid,lvm、**配额、启动multi-user.target.wants中的所有服务、开启虚拟控制台、启动图形
二、当系统启动时出现错误,进行排错
(1)如果 mbr 分区前446个字节坏了
dd if=/dev/zero of=/dev/vda bs=446 count=1 重启后发现无法启动虚拟机
(首先对虚拟机force off)
进入挽救模式后,执行
chroot /mnt/sysimage/
grub2-install /dev/vda
两次退出(exit)后用对虚拟机force off
硬盘(Hard Disk)再次启动
首先对虚拟机force off
使用光驱启动
进入挽救模式
再次对虚拟及force off 之后从硬盘重新启动
(2)如果引导文件坏了或丢失,系统启动不了(grub.cfg)
rm -fr /boot/grub2/grub.cfg
在没有reboot之前发现错误可以直接执行命令
grub2-mkconfig > /boot/grub2/grub.cfg恢复
在reboot后,重启系统后的界面输入以下命令:
set root='hd0,msdos1' ##hd0 代表第一块硬盘,msdos1 代表第一个分区
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
boot
开机之后执行 grub2-mkconfig > /boot/grub2/grub.cfg
(3)误删或其他原因导致的内核文件丢失 如/boot/vmlinuz -3.10.0-123.el7.x86-64丢失
1>可以使用网卡启动 (没有reboot)
下载镜像里的 Packages/kernel-3.10.0-123.el7.x86-64.rpm(放在桌面)
rpm2cpio kernel-3.10.0-123.el7.x86-64.rpm | cpio -id
解压后会有一个boot目录
在boot目录里面拷贝丢失的文件到 /boot 下就ok了
cp boot/vmlinuz -3.10.0-123.el7.x86-64 /boot
2>使用光驱启动的(reboot之后)
进入挽救模式
cd /run/install/repo/
cd packages/
cp kernel-3.10.0-123.el7.x86_64.rpm /mnt/sysimage/mnt/
chroot /mnt/sysimage/
cd /mnt
rpm2cpio kernel-3.10.0-123.el7.x86-64.rpm | cpio -id
解压后会有一个boot目录
在boot目录里面拷贝丢失的文件到 /boot 下就ok了
cp boot/vmlinuz -3.10.0-123.el7.x86-64 /boot
两次退出之后再从硬盘启动系统
从光驱启动
进入挽救模式
重新从硬盘启动
(4)误删或其他原因导致的内核文件丢失 如/boot/initramfs-3.10.0-123.el7.x86-64丢失
1>直接输入命令(没有reboot)
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
2>使用光驱启动进入挽救模式
chroot /mnt/sysimage
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
ls /boot/initramfs-3.10.0-123.el7.x86_64.img
两次退出(exit)
之后从硬盘启动
(5)系统启动级别的设定
启动级别
runlever0.target -> poweroff.target
runlever1.target -> rescue.target
runlever2.target -> multi-user.target
runlever3.target -> multi-user.target
runlever4.target -> multi-user.target
runlever5.target -> grapical.target
runlever6.target -> reboot.targ
(6)当我们忘记超级用户密码时在系统启动时进行修改
1、重新启动系统
2、在系统启动阶段按上下键停止系统引导
3、选择启动引导标题,按“e”进行编辑
4、找到linux16引导条目这一行,从这行最后删除到ro选项,并把ro改为rw,然后添加rd。break选项
5、ctrl+x启动设定过后的引导条目
6、进入系统执行
chroot /sysroot
7、passwd root
8、建立文件 touch /.autorelabel让系统重新扫描所有文件
9、exit(两次退出)系统重启