简单来说,系统开机的经过可以汇整成下边的流程的:
1.载入BIOS的硬件信息与进行自我测试,并根据设置取得第一个可开机的设备;2.读取并执行第一个开机设备内MBR的bootLoader(亦称是grub2,spfdisk等程序);3.根据bootloader的设置载入Kernel,Kernel会开始探测硬件与载入驱动程序;4.在硬件驱动成功后,Kernel会主动调用systemd程序,并以default.target流程开机;1.grup2引导错误
mbr的作用是为了记录/boot目录所在分区位置c盘0扇区1磁道的前446字节
若是不小对这段信息进行了破坏将会造成系统未能启动
可在虚拟机中执行ddif=/dev/zeroif=/dev/xdabs=446count=1进行模拟
1.1对mbr破坏后未重启机器
直接在 下执行 grub2-install /dev/vda 进行恢复
[root@localhost ~]# grub2-install /dev/vda
执行如下:
1.2对mbr破坏后重启机器
对mbr破坏后重启机器会造成难以进行引导因而未能启动机器(如下:)
此时须要借助外部设备进行帮助,这儿我们利用一个与系统系统版本相符的镜像源文件对系统来进行修补
进行下述操作:
1.在真机执行 virt-manager 选择grub2出现错误的虚拟机
2.为 grub2 出现错误的虚拟机添加:storage IDE CDROM (必须关闭虚拟机)
3.添加镜像文件(与系统版本相符的镜像文件)
4.选择:Boot Options 将 IDE CDROM 选到第一个,使开机先识别 ID CDROM
5.打开虚拟机选择: Troubleshooting
6.选择:Rescue a Red Hat Enterprise Linux sustem
7.执行:chroot /mnt/sysimage
8.执行:grub2-install /dev/vda
9.执行:vim /etc/sysconfig/selinux
关闭 selinux 为了开机迅速
10.关闭机器,选择:Boot Options 将IDE CDROM选到最后
11.启动机器
具体执行如下:
1.在真机执行virt-manager选择grub2出现错误的虚拟机
2.为grub2出现错误的虚拟机添加:storageIDECDROM(必须关掉虚拟机)
选择
添加storageIDECDROM
3.添加镜像文件
4.选择:BootOptions将IDECDROM选到第一个,使开机先辨识IDCDROM
5.打开虚拟机选择:Troubleshooting
6.选择:RescueaRedHatEnterpriseLinuxsustem
选择后,下边提示:你的系统将会在援助环境下,被挂载到援助环境下的/mnt/sysimage,选择continue继续操作
提醒你,你的系统早已被挂载到援助环境下的/mnt/sysimage,你可以通过执行chroot/mnt/sysimage切换到你真实的系统环境中,并写系统会在退出shell后进行重启,选择ok继续操作
‘再次提醒你,你的系统早已被挂载到援助环境下的/mnt/sysimage
7.执行:chroot/mnt/sysimage
8.执行:grub2-install/dev/vda
9.执行:vim/etc/sysconfig/selinux,关掉selinux(为了开机迅速)
10.关掉机器,选择:BootOptions将IDECDROM选到最后
11.启动机器(可成功启动)
2.手动引导文件/boot/grub2/grub.cfg
/boot/grub2/grub.cfg.此文件属于Linux系统开启的手动引导文件linux 系统启动项,通过此文可以手动完成对系统根目录的挂载,linux内核的初始化和初始化程序的引导linux操作系统教程,此文件若是缺位,系统则难以手动开启,须要进行自动引导。
若是系统/boot/grub2/grub.cfg文件缺位,则开机后需执行如下操作
set root='hd0,msdos1' #设置root读取第一块磁盘的第一个分区,md0表示第一块磁盘,
#msdos表示第一个分区
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1
#手动进行内核引导,并将根目录只读挂载到 /dev/vda1 上
initrd16 /boot/initramfs-3.10.0-123.el7.x86_64.img
#生动进行引导初始化程序
boot #启动机器
开机后进行 /boot/grub2/grub.cfg 文件的修复
执行:
[root@localhost ~]# grub2-mkconfig > /boot/grub2/grub.cfg
#生成自动引导文件
具体执行如下:
手动引导文件缺位后,开启系统将会步入下示环境:
执行以下操作进行自动引导
1.setroot=’hd0,msdos1’
2.linux16/boot/vmlinuz-3.10.0-123.el7.x86_64roroot=/dev/vda1
3.initrd16/boot/initramfs-3.10.0-123.el7.x86_64.img
4.boot
开机后生成手动引导文件
3.内核程序/boot/vmlinuz-3.10.0-123.e17.x86_64缺位
若内核程序/boot/vmlinuz-3.10.0-123.e17.x86_64缺位,则系统会由于未能加载内核而未能启动。可以通过外加光碟,通过Linux补救程序为系统重新安装符合系统版本的内核程序
内核程序启动系统会显示如下:
先介绍一个,可以从安装包中提取文件及程序的
[root@localhost Desktop]# rpm2cpio #从RPM Package Manager (RPM)包中提取cpio归档文件
[root@localhost Desktop]# rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id
#将内核安装包内的文件提取出来
cpio #从档案到档案的拷贝文件。
-i: #提取
-d: #在需要的地方创建引导目录。
执行如下:
将当前目录下内核程序安装包内的目录、文件提取下来:
想要重新安装内核程序,可进行如下操作
进行下述操作:
1.在真机执行virt-manager
2.为内核文件的缺失虚拟机添加:storage IDE CDROM
3.添加镜像文件(与系统版本相符的镜像文件)
4.选择:Boot Options 将IDE CDROM选到第一个,使开机先识别ID CDROM
5.打开虚拟机选择:Troubleshooting
6.选择:Rescue a Red Hat Enterprise Linux sustem
7 执行:df
可看到光盘挂载在当前的 /run/install/repo 下,切换到此目录下,可看到光盘内的文件,
安装包等,将Packages内的内核安装包(kernel-3.10.0-123.el7.x86_64.rpm)复制到
真实主机中(此处指虚拟机)的指定目录下目录下。
8.执行:chroot /mnt/sysimage 切换到真实主机根目录
9.切换到/mnt目录后
执行:rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id
#将内核安装包内的文件提取出来
10.执行:cp boot/vmlinuz-3.10.0-327.el7.x86_64 /boot/
#第一个'boot/'是内核安装包内的东西,第二个/boot/是真实主机的根目录,将内核安装
#包内的对应内核程序移动到/boot/下,使机器可以正常运行。
11.关闭机器,选择:Boot Options 将IDE CDROM选到最后
12.启动机器
具体值执行如下:
1~6步与修补mbr相同
7.步入拯救环境后执行:df
**将Packages内的内核安装包(kernel-3.10.0-123.el7.x86_64.rpm)复制到
真实主机中**
df
复制内核程序安装包到真实主机(此处指虚拟机)的指定目录下。
8.执行:chroot/mnt/sysimage/mnt切换到真实主机根目录,并切换到内核安装包所在目录
执行:rpm2cpio将内核安装包内的文件提取下来
执行:cpboot/vmlinuz-3.10.0-327.el7.x86_64/boot/将内核程序拷贝到真实主机/boot目录下
第一个’boot/’是内核安装包内的东西,第二个/boot/是真实主机的根目录,将内核安装包内的对应内核程序联通到/boot/下,使机器可以正常运行。
11~12步与修补mbr最后两步亦同
4.initramfs镜像缺位
若是系统的initramfs-3.10.0-327.el7.x86_64.img缺位,系统由于难以进行下一步的开机引导而不能启动。(如下:)
想要修补initramfs镜像,可进通过拯救程序linux 系统启动项,步入到系统真实目录对initramfs镜像修补
先介绍一个命令(mkinitird)
[root@localhost ~]# mkinitrd [选项...] []
#是一个compat包装器,它调用dracut来生成一个initramfs
执行如下命令进行修复 initramfs
[root@localhost ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
uname -r #显示内核版本号
在bash中,$( )与` `(反引号)都是用来作命令替换的。
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,
再重组成新的命令行。
$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。
上述指令等同于:
mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
示例如下:
修补initramfs镜像须要执行如下操作
进行下述操作:
1.在真机执行virt-manager
2.为内核文件的缺失虚拟机添加:storage IDE CDROM
3.添加镜像文件(与系统版本相符的镜像文件)
4.选择:Boot Options 将IDE CDROM选到第一个,使开机先识别ID CDROM
5.打开虚拟机选择:Troubleshooting
6.选择:Rescue a Red Hat Enterprise Linux sustem
7 执行:chroot /mnt/sysimage 切换到真实主机根目录
8.执行:mkinitrd /boot/initramfs-3.10.0-123.el7.x86_64.img 3.10.0-123.el7.x86_64
#恢复 initramfs 镜像
9.关闭机器,选择:Boot Options 将IDE CDROM选到最后
10.启动机器
具体执行如下
1~6步与修补mbr相同
7执行:chroot/mnt/sysimage切换到真实主机根目录
8.执行:mkinitrd/boot/initramfs-3.10.0-123.el7.x86_64.img3.10.0-123.el7.x86_64
9~10步与修补mbr最后两步亦同
5.系统启动级别发生错误
介绍一下Linux系统启动的级别
Linux是可以通过通过systemctl指令来管理不同的操作环境(targetunit)而跟操作界面相关性比较高的target主要有下边几个:
graphical.target: 文字加上图形界面,这个项目已经包含了下面的 multi-user.target
项目!
multi-user.target: 纯文本模式!
rescue.target: 在无法使用 root 登陆的情况下,systemd 在开机时会多加一个额外的暂
时系统,与你原本的系统无关。这时你可以取得 root 的权限来维护你的系统。
emergency.target: 紧急处理系统的错误,还是需要使用 root 登陆的情况,在无法使用
rescue.target 时,可以尝试使用这种模式!
shutdown.target: 关机的流程。
getty.target: 可以设置你需要几个 tty 之类的,如果想要降低 tty 的项目,可以修改这个
东西的配置文件
倘若不留神将开机启动级别改为了shutdown.target
可以通过
[root@localhost ~]# systemctl set-default
来进行开机启动的设置
如是错误的将开机启动目标设置为了shutdown.target将会直接关掉系统而造成机器难以启动(如下:)
此时须要进行对开机启动级别的修补linux主机,首先先要进行正常的步入系统才行
1.在上述界面下点击Ctrl+Alt+Delete/Ctrl+Alt+End,步入系统选择界面
2.出现上述界面后,快速点击鼠标上下键,否则将又会步入最开始那难以步入系统的界面。再度界面点击‘E’键步入编辑界面
3.在编辑界面linux16*一行最后加上‘5’,后点击Ctrl+x,就可正常启动
4.启动机器后在shell下执行systemctlset-defaultgraphical.target将开机级别设置为图形界面,就完成了系统启动级别的修补
本文原创地址://q13zd.cn/xtkjlcjxcbdd.html编辑:刘遄,审核员:暂无