目录:
(一)了解系统启动流程
(二)了解GRUB的做用
(三)重置root密码
(四)当GRUB丢失的时候如何修复系统
(五)当/boot里缺失文件时如何修复linux
(一)了解系统启动流程
(1.1)①在咱们按下开机键之后,最早工做的是咱们硬件BIOS芯片,其中BIOS芯片主要是监测主机的各项硬件包括键盘、鼠标、显示屏、硬盘等等是否都是正常工做的状态;②若是BIOS芯片检测是正常的,则会将系统的引导权交给系统的MBR(主引导记录),在MBR中其中前446B的字节主要是BootLoader引导加载器,64B的字节是分区表的信息,最后2B的字节是用来标识硬盘是不是有效的标志;③接着就是加载内核镜像到内存中,内核镜像并非一个可执行的内核,而是一个压缩过的内核镜像,它是提早使用zlib压缩过的,在这个内核镜像前面是一个例程,它实现少许硬件设置,并对内核镜像中包含的内核进行解压缩,而后将其放入高端内存中;④init进程是系统全部进程的起点,内核在完成核内引导后,即在本进程空间内加载init程序,它的进程是1。Init进程是全部进程的发起者和控制者。由于在任何基于Linux的系统中,它都是第一个运行的进程,因此inti进程的编号(PID)永远是1;⑤最后init的工做是根据/etc/inittab来执行相应的脚本,进行系统初始化,设置键盘,字体,装载模块,设置网路等。
注意:加载BIOS->读取MBR->Boot Loader->加载内核->用户层init依据inittab文件来设定系统运行的等级(通常3或者5,3是多用户命令行,5是界面)->init进程执行rc.syninit->启动内核模块->执行不一样级别运行的脚本程序->执行/etc/rc.d/rc.local(本地运行服务)->执行/bin/login,就能够登陆了。
(1.2)咱们知道系统的内核是放在sda1分区的,不一样的内核识别不一样的文件系统,换言之就是没有内核就没法识别文件系统。在开机以前sda1是有文件系统的,而内核是放在sda1中的,咱们在开机前通常是须要先将内核引导起来,而后才能够识别sda1的文件系统的;可是引导内核是须要先有文件系统的状况下才可以加载内核的;可是文件系统的识别是须要先有内核运行的,这样就陷入了一个死循环当中了。此时咱们就引出了BootLoader了,你们都据说过grub,它是系统的引导程序,一样级别的引导程序还有lilo,不过是属于很是古老的程序了,咱们所说的BootLoader是属于grub当中的一段代码。
(1.3)在系统中咱们发现sda1分区的起点是从2048号扇区开始的,硬盘是从0磁道0扇区开始的,而0磁道0扇区是包含有512字节的,这512字节中的前446字节是BootLoader。而BootLoader其实是从grub里stage1这段代码反汇编出来的,做用就是用来加载第二个扇区。第二个扇区是由grub里stage1.5反汇编出来的一段代码,做用是加载第3个到第n个扇区(其中n < 2048)。而在第3到第n个扇区之间存放的是一个及其精简版的文件系统,通过如上过程的引导此时咱们的硬件就能够识别文件系统了,进而能够在sda1分区中加载真正的系统内核了。vim
(二)了解GRUB的做用
(2.1)如今咱们可能会有疑问系统内核在哪里,找到内核以后,以什么样的参数来初始化内核呢?而这一切都是须要它的配置文件来设定的,这个配置文件主要是存放在/boot/grub2/目录下的grub.cfg配置文件中的,这个配置文件是由内核自动加载的,配置文件的路径是写入到代码中的不可以更改的。
# cat /boot/grub2/grub.cfg
(2.2)因为/boot/grub2/目录下的grub.cfg配置文件的内容很是的多,并且在系统启动时都会加载这个文件,因此这个文件也注明了“DO NOT EDIT THIS FILE”(不要修改这个文件),若是咱们想要将修改/boot/grub2/grub.cfg配置文件中的参数,则能够先在/etc/default/grub文件中进行修改,而后使用“grub2-mkconfig”命令将/etc/default/grub文件中修改后的内容同步到/boot/grub2/grub.cfg配置文件中。而咱们知道“grub2-mkconfig”只是一个程序,它是须要去调用/etc/grub.d/目录下脚本程序执行的,以此来修改/boot/grub2/grub.cfg配置文件中的内容。
(2.3)注意:经验总结,因此咱们若是想要修改网卡名,将网卡名设置为必将常见的eth0、eth1的格式,咱们可使用以下的方式进行修改,而后再执行“grub2-mkconfig”这个命令将修改的配置信息应用到配置文件/boot/grub2/grub.cfg当中。
# grub2-mkconfig -o /boot/grub2/grub.cfg---将/etc/default/grub配置文件中的信息从新加载到/boot/grub2/grub.cfg系统配置文件中
(2.4)咱们说尽可能不要修改“/boot/grub2/grub.cfg”配置文件中的内容,并非说不能修改,实际上是能够修改这个配置文件中的内容的。可是站在安全性、易用性角度来看,这个/boot/grub2/grub.cfg配置文件是属于系统加载的文件,常常会加载读取,很容易就被修改,例如咱们升级内核,此时系统升级完毕后也会一同升级/boot/grub2/grub.cfg配置文件中的内容,那么咱们以前在其中配置的参数就都被覆盖了。而若是咱们经过执行“grub2-mkconfig”命令,加载/etc/default/grub配置文件来进行修改则高效了不少,首先这个/etc/default/grub配置文件并不属于系统文件,基本不会被其余的进程加载,所以这个文件的存在系统中的安全性比较高,文件内容基本不会改变。因此咱们在修改系统的参数的时候通常是建议修改/etc/default/grub配置文件。
(2.5)如今咱们开启vms001主机上主机名为station的KVM虚拟机,咱们如今想要实现进入启动界面后系统有50秒的等待用户选择时间,同时系统默认是从第二个选择条进入。首先咱们从vms001主机远程登陆到KVM虚拟机station上,而后进入/etc/default/grub配置文件将GRUB_TIMEOUT参数修改成50秒,GRUB_DEFAULT参数修改成1(图2-7),而后执行“grub2-mkconfig”这个命令将修改的配置信息应用到配置文件/boot/grub2/grub.cfg当中(图2-8),此时咱们发现station虚拟机开机后已是第二行做为默认系统,而且默认倒计时的时间也已经修改成50秒了(图2-9)。所以经过/etc/default/grub配置文件修改系统启动时的参数时可靠且有效的。安全
(三)重置root密码
(3.1)接着咱们能够经过上下键选择本身所须要的内核,而后经过按键“e”进入到编辑对应内核的界面(图3-1),咱们进入到第一个内核的编辑的界面,而后在linux16这一行的最后添加一个参数“xx=test”,而后按Ctrl+x继续后面的执行内容(图3-1),咱们在station虚拟机上登陆系统后发现,在内核参数/proc/cmdline中已经生效了咱们刚刚添加的参数(图3-3)。
(3.2)咱们启动系统的时候均可以插入一些咱们想指定的参数,而后按Ctrl+x执行,固然这里修改参数只是本次启动生效,通常咱们在维护或者修复系统的时候,才会在这里修改内核的参数。其中登陆系统或有多种模式,第一种是rescue模式(救援模式),假设系统正常启动须要20个必须服务,若是某个必须服务出问题了,就会致使系统无法启动,假设救援模式只有10个必须服务,如今咱们的系统服务异常没有办法正常的进入系统,此时咱们能够选择进入到救援模式,出问题的服务不在救援模式的必须服务以内,那么此时系统即可以启动起来。咱们在station虚拟机中按“e”键进入到内核编辑状态,而后在linux16一行的末尾删除“rhgb quiet”,而后添加“single”,也能够添加“s”或者添加数字“1”(图3-4),按Ctrl+x继续执行。此时咱们经过输入root用户的密码即可以正常的登陆救援模式下的系统了(图3-5),此时咱们即可以使用常规的检查系统日志的方式进行系统排错了。
(3.3)第二种是emergency模式,假设系统正常启动须要20个必须服务,若是某个必须服务出问题了就会致使系统无法启动,假设emergency模式只有6个必须服务,咱们进入到emergency模式的时候,若是出问题的服务不在emergency模式以内,则此时咱们即可以在该模式下将系统启动起来。咱们在station虚拟机进行操做,咱们能够删除“rhgb quiet”也能够不删除,而后须要加上emergency表示进入该模式,接着按ctrl+x继续执行(图3-6)。进入到登陆界面后,咱们只须要填写root用户的密码,即可以在emergency模式下登陆系统了(图3-7),而后咱们即可以使用常规的检查系统日志的方式进行系统排错了。
(3.4)若是咱们忘记了root用户的密码,咱们想要先修改root用户的密码,而后再登陆系统,此时咱们可使用以下编辑内核的方式操做,咱们先将“rhgb quiet”删除,而后添加“init=/bin/sh”,再按Ctrl+x继续执行(图3-8)。因为vda1硬盘是以只读的形式挂载的,因此咱们须要将其修改成可读可写的形式挂载,而后重置root用户的密码,并在根目录下建立.autorelabel文件,而后执行“exec /sbin/init”命令启动系统(图3-9),此时咱们即可以正常的登陆系统了。重置root密码流程以下
# mount -o remount,rw /
# echo redhat | passwd --stdin root
# touch /.autorelabel
# exec /sbin/init
(3.5)若是咱们但愿提升系统的安全性,也能够对grub进行加密的,咱们能够进入到/etc/grub.d目录下,找到00_header文件(图3-11),并在文件中设置以下的信息,对tom用户进入grub进行加密控制(图3-12),修改完00_header配置文件后执行“grub2-mkconfig”命令,将配置的信息同步到/boot/grub2/目录下的grub.cfg文件中(图3-13),此时咱们再按“e”进入grub的时候,并不会直接进入到修改内核的界面,而是出现了让咱们输入用户名密码的信息。此时咱们便实现了对grub加密的需求。加密grub
(3.6)固然以上咱们对grub进行加密使用的是明文的密码,若是咱们但愿提升安全性使用密文的密码,则可使用pbkdf2格式的加密工具对密码进行加密(图3-15),而后将加密的结果填写到/etc/grub.d/00_header文件中(图3-16),并执行“grub2-mkconfig”命令,将配置的信息同步到/boot/grub2/目录下的grub.cfg文件中(图3-17),此时咱们想要进入grub对内核进行参数设置时,须要填写正确的用户名和密码信息才能正常的进入。
# grub2-mkpasswd-pbkdf2---使用pbkdf2格式加密工具对咱们设置的密码进行加密
(3.7)第三种是使用光盘镜像登陆系统的救援模式。若是咱们忘记了系统登录的密码,同时也忘记了进入grub修改内核的超级用户的密码,此时咱们就须要去使用光盘镜像登陆系统的救援模式。咱们在VMware环境的vms002主机上来进行实验,假设咱们如今忘记了登陆vms002主机root用户的密码,咱们重启机器后,马上按Esc键进入到Boot Menu界面,而后选择第三项“CD-ROM Drive”,接着依次选择“Troubleshooting”-->“Rescue a Red Hat Enterprise Linux system”进入到了Rescue界面,此时咱们进入的系统并不是是咱们原来硬盘里的系统,咱们如今所在的位置是光盘里的系统,而咱们硬盘中的系统是处于光盘系统的/mnt/sysimage的位置。
(3.8)此时咱们vms002主机经过光盘镜像便进入到了光盘镜像的系统中了,咱们当前vms002主机的硬盘文件在/mnt/sysimage目录下,若是咱们想切换到硬盘文件的系统中进行操做,则应该使用chroot命令进行切根操做,当前咱们虽然在光盘镜像的/mnt/sysimage/目录下,可是咱们由于通过了切根操做,因此显示当前咱们在根目录下(实际是在硬盘的根目录下)。
# ls /mnt/sysimage/
# chroot /mnt/sysimage/
(3.9)接着咱们即可以在系统中重置root用户的密码了,也能够编辑00_header文件中关于超级用户登陆grub的密码信息。这样咱们就实现了当发生没法进入系统的状况,使用光盘镜像仍然能够进入救援模式更改密码、登陆系统的需求了。而后咱们使用“exit”退出两次,就能够正常的进入系统启动界面了。网络
(四)当GRUB丢失的时候如何修复系统
(4.1)咱们知道grub做为系统的引导程序很重要,若是grub出现了丢失或者损坏的状况,那么系统便会出现一直重启或者从其余设备例如光盘或者网络重启的状态,例如咱们的硬盘MBR的前446个字节出现了损坏,则表明系统的BootLoader程序没有了,即便咱们尝试选择“Troubleshooting”-->“Boot from local drive”也仍然没法正常的进入系统(图4-2和图4-3)。
# dd if=/dev/zero of=/dev/sda bs=1 count=446---咱们使用zero填充了sda硬盘的前446字节的内容
(4.2)此时咱们应该想办法进入系统中修复BootLoader,咱们重启系统后选择“Troubleshooting”-->“Rescue a Red Hat Enterprise Linux system”进入到Rescue救援模式的界面,而后执行切根到系统的根目录下,并从新安装grub程序,此时咱们即可以正常的启动系统了(图4-6)。
# chroot /mnt/sysimages/---切换根
# grub2-install /dev/sda---安装grub程序,重装grub程序ide
(五)当/boot里缺失文件时如何修复
(5.1)在vms002主机上咱们将/boot/目录中的相关启动文件删除,此时咱们发现重启电脑后系统就没法正常的引导起来了,此时启动系统后咱们能够看到安装grub的界面,只是系统在加载时加载不到而已(图5-2)。这个时候咱们应该重启系统进入到救援模式中,咱们在vms002主机上重启机器后按Esc键进入到Boot Menu界面,而后选择CD-ROM进入,接着选择“Troubleshooting”-->“Rescue a Red Hat Enterprise Linux system”便经过光盘引导进入到了救援模式当中了(图5-4),接着咱们使用chroot命令实现从光盘系统切根到硬盘系统当中,此时咱们发如今/boot目录下没有任何系统启动的相关文件。
(5.2)此时咱们须要将启动文件安装起来,咱们将/mnt目录挂载到/dev/cdrom光盘镜像内容中,而后将kernel-3.10.0的内核文件强制从新安装起来。此时咱们发现/boot目录中已经生成了对应的文件信息。
# mount /dev/cdrom /mnt---首先将/mnt目录挂载到/dev/cdrom光盘镜像内容中
# rpm -ivh /mnt/Packages/kernel-3.10.0-229.el7.x86_64.rpm --force---强制从新安装kernel-3.10.0的内核文件
(5.3)虽然/boot目录中已经生成了对应的文件信息,可是咱们发现仍是缺乏相关的内容,例如/boot/grub2/grub.cfg文件没有生成,此时咱们须要使用“grub2-mkconfig”命令生成grub.cfg系统加载的配置文件(图5-7)。同时咱们还须要将“grub2-install”从新安装一次,这样系统除了将grub从新安装也会生成其余系统所需的配置文件(图5-8),接着咱们连续两次“exit”就能够正常进入系统了。
# mkdir /boot/grub2---建立一个/boot/grub2目录
# grub2-mkconfig -o /boot/grub2/grub.cfg---将/etc/default/grub配置文件中的信息同步到/boot/grub2/目录下的grub.cfg文件中
# grub2-install /dev/sda---从新安装grub程序,而且将安装的程序放到/dev/sda硬盘分区中
(5.4)经验总结,故障排错,有时候咱们在启动iSCSI服务的主机的时候,若是忘记在/etc/fstab文件中添加“_netdev”选项,则咱们的系统可能会出现没法启动的状况,此时咱们应该在系统中直接输入root的用户的密码,能够临时进入系统,而后对配置文件/etc/fstab进行修改,而后重启系统便可正常登陆系统。
(5.5)经验总结,有时候若是咱们但愿本身的系统开机后可以执行一些脚本、或者加载一些模块,此时咱们能够在/etc/rc.d/rc.local里添加一些脚本文件,固然同时还须要给/etc/rc.d/rc.local文件添加可执行权限。系统提示符字符,路由器交换机
# vim /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local
(5.6)通常咱们在系统启动的过程当中也须要关注两个配置文件,第一个是/etc/motd文件,这个文件通常是在咱们远程登陆系统的过程当中起做用(图5-16)。系统提示符字符,路由器交换机
# vim /etc/motd
(5.7)第二个是/etc/issue文件,这个文件主要是配置在字符界面登陆系统的时候登陆界面的提示符信息,当咱们使用字符界面登陆vms002主机的时候,系统显示了咱们在/etc/issue配置文件中添加的信息(图5-18)。系统提示符字符,路由器交换机
# vim /etc/issue工具
—————— 本文至此结束,感谢阅读 ——————字体