启动流程、grub配置及修复、initramfs修复
@H_403_16@目录:
- @H_403_16@ centos启动流程
- @H_403_16@grup配置及修复@H_403_16@@H_403_16@2.1 grub配置@H_403_16@2.2 grub命令启动@H_403_16@2.3 grub修复
- @H_403_16@initramfs修复
- @H_403_16@boot破坏修复
@H_403_16@
@H_403_16@1.centos启动流程 @H_403_16@
@H_403_16@ 在centos5和6中启动流程如下:
(1).POST加电自检
硬件加电自检程序(安装在CMOS中的BIOS程序)BIOS负责检测硬件设备是否正常运行,如cpu、内存、硬盘、外接设备等是否正常,在生产中服务器内存较大,由多条内存组成较大内存的服务器,因此对内存的安装顺序等要严格的控制,不同品牌服务器要根据各自厂家的设计及要求进行安装。
BIOS初始化硬件后会关联硬盘分区格式, 如:新购PC机自带Windows10(GPT分区)系统修改为Windows7(MBR)系统时,将BOIS中boot菜单的boot mode默认格式UEFI修改为Legacy Support。因为不同的硬盘分区格式,需要不同的硬件启动程序支持。
(2).MBR主引导分区
在BIOS初始化硬件后,调动INT13硬件读取MBR信息,其中MBR在硬盘的第一个扇区,一个扇区大小为512byte,前446byte存储bootloader,64byte存储硬盘分区表,2byte存储硬盘标志位。但446byte不足以启动系统,因此会在MBR后面的扇区存储1.5阶段的引导启动程序,其中1.5阶段主要负责读取boot分区(存储内核、虚拟文件系统和grup的配置文件),真正的分区一般从第63个扇区开始进行分区。
系统引导分为三个阶段:
第1阶段:在MBR分区中,主要作用加载boot loader,进入1.5阶段;
第1.5阶段:主要作用加载/boot分区的文件系统驱动,进入文件系统;
第2阶段:主要作用通过/boot/grub/grub.conf配置文件进行加载内核等,其中在/boot/grub/*下只有grub.conf配置文件生效,其他都是第1阶段和1.5阶段的备份文件。
(3).Kernel、initrd/initramfs
在系统通过Boot loader引导进入boot分区后,先是通过grub.conf中的参数root (hd0,0)从第一块磁盘中的第一个分区进行读取数据,参数kernel/vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2读取内核数据及真正加载根的为,参数initrd /initramfs-2.6.32-696.el6.x86_64.img读取初始化虚拟根系统(注意:一定要先读取内核,然后再读取虚根系统,因为只有加载内核后才能),然后加载启动过程中所定义的内核模块,最后释放虚根,切换为真实的根文件系统。
(4).init
当系统切换为真正的根后,系统从内核空间转到用户空间,执行第一个初始化程序/sbin/init,通过init初始化程序将用户空间预定义的启动级别进行执行/etc/rc.d/rc#.d/S*.sh脚本启动相关服务。
@H_403_16@@H_403_16@2.grub配置及修复 @H_403_16@
@H_403_16@grub配置文件存储位置为/boot/grub/*,其中在此目录下能够看到关于启动第1阶段、第1.5阶段、第2阶段的备份文件和grub的配置文件grub.conf @H_403_16@
@H_403_16@ 2.1 grub配置文件 @H_403_16@grub配置文件通过参数的配置控制默认启动的菜单、菜单超时时间、单用户模式登录的密码、菜单的背景图片设置、引导boot的磁盘如hd0,0(第一块磁盘的第一分区),kernel的指定、initrd的指定等相关
@H_403_16@[root@centos6 grub]# grub-crypt #对密码进行256位加密算法计算 Password: Retype password: $6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0@H_403_16@[root@centos6 grub]# vim /boot/grub/grub.conf @H_403_16@default=0 #默认 @H_403_16@timeout=5@H_403_16@splashimage=(hd0,0)/grub/splash.xpm.gz@H_403_16@password --encrypted $6$7KtGRwtyOq5ves0w$ujUp94VFUA0m8oeXN1/kF/mgzi5l0UPfdqox8fs0PeSIe0EfyyNJBkogOCSWI1P2XqVgTbH1hE2nJQRABJQFN0 #经过加密后的密码,此密码是进入防止单用户的密码 @H_403_16@hiddenmenu 有次密码,普通用户就无法进入单用户模式破解密码 @H_403_16@title CentOS 6 (2.6.32-696.el6.x86_64)@H_403_16@ root (hd0,0)@H_403_16@ kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=/dev/sda2 rhgb quiet #rhgb是开机转圈的动作 @H_403_16@ initrd /initramfs-2.6.32-696.el6.x86_64.img #quiet内核启动隐藏显示 @H_403_16@@H_403_16@title CentOS 6 (4.6.32-696.el6.x86_64) @H_403_16@ root (hd0,0)@H_403_16@ kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=/dev/sda2 quiet@H_403_16@ initrd /initramfs-2.6.32-696.el6.x86_64.img@H_403_16@ password root0987 #此密码是引导加载内核的密码也就是系统启动密码 @H_403_16@ |
@H_403_16@第一步:输入"root (hd" 然后按两次 TAB 键出现磁盘块,选中需启动的磁盘,再按两次TAB键出现磁盘分区编号,选中boot分区所在的磁盘分区; @H_403_16@第二步:输入"kernel /vm"然后按两次TAB键出现内核,再选中要选择启动的正根root=/dev/sda2 @H_403_16@第三步:输入"initrd /init"然后按两次TAB键出现虚根系统 @H_403_16@第四步:输入boot启动系统,完成加载系统 @H_403_16@
@H_403_16@ GUN GRUB version 0.97 (635K lower /1046400K upper memory) @H_403_16@grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3 #启动内核参数 @H_403_16@grub>initrd /boot/initrd.img-2.6.15-26-386 #启动虚根参数 @H_403_16@grub>root (hd0,0) #启动boot的位置 @H_403_16@grub>boot @H_403_16@ (具体也可参考http://man.linuxde.net/grub) |
@H_403_16@2.3 grub修复 @H_403_16@grub修改有两种方法: @H_403_16@第一种方法:重构grub引导程序 @H_403_16@ 在误删grub的第一阶段(446byte字节)、第1.5阶段或第三阶段的数据导致系统无法正常启动时,通过万能的方法重新构建新的grub引导程序,但是如若分区表64tyte删除则无法恢复,具体恢复如下令:
@H_403_16@#!/bin/bash @H_403_16@sh-4.1# grub-install /dev/sda #安装grub程序到/dev/sda这块磁盘 Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'.@H_403_16@sh-4.1#reboot@H_403_16@#################################重启后指定引导配置文件进入系统#################################### @H_403_16@ GUN GRUB version 0.97 (635K lower /1046400K upper memory) @H_403_16@grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3 #启动内核参数 @H_403_16@grub>initrd /boot/initrd.img-2.6.15-26-386 #启动虚根参数 @H_403_16@grub>root (hd0,0) #启动boot的位置 @H_403_16@grub>boot @H_403_16@##################################登录系统重构配置文件##############################################@H_403_16@[root@centos6 grub]# vim /boot/grub/grub.conf @H_403_16@default=0 #默认 @H_403_16@timeout=5@H_403_16@splashimage=(hd0,0)/grub/splash.xpm.gz@H_403_16@hiddenmenu @H_403_16@title CentOS 6 (2.6.32-696.el6.x86_64)@H_403_16@ root (hd0,0)@H_403_16@ kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=/dev/sda2 rhgb quiet @H_403_16@ initrd /initramfs-2.6.32-696.el6.x86_64.img @H_403_16@ |
@H_403_16@ GUN GRUB version 0.97 (635K lower /1046400K upper memory) @H_403_16@grub>setup (hd0) #利用备份文件恢复 @H_403_16@grub>kernel /boot/vmlinuz-2.6.15-26-386 ro dev=/dev/hda3 #启动内核参数 @H_403_16@grub>initrd /boot/initrd.img-2.6.15-26-386 #启动虚根参数 @H_403_16@grub>root (hd0,0) #启动boot的位置 @H_403_16@grub>boot |
@H_403_16@3.initramfs修复 @H_403_16@
@H_403_16@initramfs虚根系统是安装系统时,系统利用自身的命令生成相关的文件系统,如若此文件系统可以利用mkinitrd
@H_403_16@##################################生成虚拟文件系统################################################## @H_403_16@[root@centos6 bak]#mkinitrd /boot/initramfs-$(name -r).img $(name -r) |