centos5_6 启动流程_及启动故障修复

  • Linux组成

Linux: kernel+rootfs

kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

rootfs:程序和glibc

库:函数集合, function, 调用接口(头文件负责描述)

过程调用:procedure,无返回值

函数调用:function

程序:二进制执行文件

u内核设计流派:

单内核(monolithic kernel):Linux

把所有功能集成于同一个程序

微内核(micro kernel):Windows, Solaris

每种功能使用一个单独子系统实现

*********************************************************************

[root@lcentosinux7 ~]# ll /boot/

-rwxr-xr-x. 1 root root 6224704 8月 2 03:53 vmlinuz-0-rescue-2c82ef38ca744461b3221fa615063c58

-rwxr-xr-x. 1 root root 6224704 4月 21 02:27 vmlinuz-3.10.0-862.el7.x86_64

 

[root@lcentosinux7 ~]# tree /lib/modules/3.10.0-862.el7.x86_64/

yum reinstall tree -y

 

************************************************************************

 

内核

uLinux内核特点:

借鉴微内核

支持模块化:.ko(内核对象) kernel object

如:文件系统,硬件驱动,网络协议等

支持内核模块的动态装载和卸载

组成部分:

核心文件:/boot/vmlinuz-VERSION-release

ramdisk:辅助的伪根系统

伪根系统 放的的是各种驱动 当计算机启动时 加载内核以后根据伪文件系统 挂载根分区

***************************************************************

删除/boot/initramfs-VERSION-release.img 文件

修复 救援模式

光盘引导

Rescue installed system

#df

#ls /mnt/sysimage/boot

#chroot /mnt/sysimage/

#cd /boot

#ls

#mkinitrd initramfs-$(uname -r).img $(uname -r)

#ls -l initramfs-2.6.32-754.e16.x86_64.img /data

当前正在使用的内核重新制作ramdisk文件

#mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

#sync

#which mkinitrd

#/sbin/mkinitrd

******************************************************************

#gzip -d

#gunzip

#cpio -tv < /boot/initrd-VERSION-release.img

#cpio -idv < /boot/initrd-VERSION-release.img

#initrd是ramdisk 的意思 模拟分区

#initramfs 是ramfilesystem 模拟硬盘

CentOS 5: /boot/initrd-VERSION-release.img

CentOS 6,7: /boot/initramfs-VERSION-release.img

模块文件:/lib/modules/VERSION-release

CentOS6启动流程

 

 

  • CentOS6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备

4.核心执行init程序,并获取默认的运行信息

读取 /etc/inittab

读取 /etcinit/*.conf 文件

5.init程序执行/etc/rc.d/rc.sysinit文件

6.启动核心的外挂模块

执行 /etc/rc.d/rc脚本 ----> 会加载/etc/rc#.d/下的所有脚本,#号为默认级别 //运行各种服务

7.init执行运行的各个批处理文件(scripts)

8.init执行/etc/rc.d/rc.local

9.执行/bin/login程序,等待用户登录

10.登录之后开始以Shell控制主机

runlevel

  • 启动流程

uPOST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测

ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等

RAM:CMOS互补金属氧化物半导体,保存各项参数的设定

按次序查找引导设备,第一个有引导程序的设备为本次启动设备

  • bootloader: 引导加载器,引导程序

windows: ntloader,仅是启动OS

Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核

LILO:LInux LOader

GRUB: GRand Unified Bootloader

GRUB 0.X: GRUB Legacy, GRUB2

MBR:

446: bootloader, 64: 分区表, 2: 55AA

uGRUB:

primary boot loader : 1st stage,1.5 stage

secondary boot loader :2nd stage,分区文件

ukernel:

自身初始化:

探测可识别到的所有硬件设备

加载硬件驱动程序(借助于ramdisk加载驱动)

以只读方式挂载根文件系统

运行用户空间的第一个应用程序:/sbin/init

ramdisk伪根系统 放的的是各种驱动 当计算机启动时 加载内核以后根据伪文件系统 挂载根分区

  • 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱动

ramdisk --> ramfs 提高速度

CentOS 5: initrd

工具程序:mkinitrd

CentOS 6,7: initramfs

工具程序:mkinitrd, dracut

  • 系统初始化:

POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(systemd)

ramdisk管理

u ramdisk文件的制作:

(1) mkinitrd命令

为当前正在使用的内核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

(2) dracut命令

为当前正在使用的内核重新制作ramdisk文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

****************************************************************************

  • 系统启动流程 /etc/inittab 文件 

uinit程序的类型:

uSysV: init, CentOS 5之前

配置文件:/etc/inittab

uUpstart: init,CentOS 6

配置文件:/etc/inittab, /etc/init/*.conf

uSystemd:systemd, CentOS 7

配置文件:/usr/lib/systemd/system

/etc/systemd/system

 

  • 启动级别 

u/sbin/init CentOS6之前

cat /etc/inittab

 

u运行级别:为系统运行或维护等目的而设定;0-6:7个级别

0:关机

1:单用户模式(root自动登录), single, 维护模式

2: 多用户模式,启动网络功能,但不会启动NFS;维护模式

3:多用户模式,正常模式;文本界面

4:预留级别;可同3级别

5:多用户模式,正常模式;图形界面

6:重启

u默认级别:3, 5

u切换级别:init #

u查看级别:runlevel ; who -r

*************************************************

5 init 6 init 进程

which init

rpm -qf /sbin/init

rpm -qi SysVinit

********************************************

init初始化

uinit读取其初始化文件:/etc/inittab

初始运行级别(RUN LEVEL)

系统初始化脚本

对应运行级别的脚本目录

捕获某个关键字顺序

定义UPS电源终端/恢复脚本

在虚拟控制台生成getty

在运行级别5初始化X

 

  • CentOS 5的inittab文件

u配置文件:/etc/inittab

u每一行格式: id:runlevel:action:process

id:是惟一标识该项的字符序列

runlevels: 定义了操作所使用的运行级别

action: 指定了要执行的特定操作

wait: 切换至此级别运行一次

respawn:此process终止,就重新启动之

initdefault:设定默认运行级别;process省略

sysinit:设定系统初始化方式

process:定义了要执行的进程

u示例:

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1...

l6:6:wait:/etc/rc.d/rc 6

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 

  • CentOS 6 /etc/inittab和相关文件

/etc/inittab

设置系统默认的运行级别

id:3:initdefault:

u/etc/init/control-alt-delete.conf /// Ctrl-Alt-Delete is handled by

取消三键关机功能 将这两行注释掉

start on control-alt-delete

exec /sbin/shutdown -r now "Control-Alt-Delete pressed"

u/etc/init/tty.conf

u/etc/init/start-ttys.conf

u /etc/init/rc.conf

u /etc/init/prefdm.conf

 

respawn : sbin/mingetty tty1 登录界面进程

*****************************************************************************

  • 启动流程/etc/rc.d/rcN.d/   目录 
  •        /etc/rc.d/rc.sysinit: 系统初始化脚本

(1) 设置主机名

(2) 设置欢迎信息

(3) 激活udev和selinux

(4) 挂载/etc/fstab文件中定义的文件系统

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作

/etc/rcN.d/下的文件不是以数字排序的 而是以字符排序的

K*开头的文件表示关闭的服务

S*开头的文件表示启动的服务

 

u说明:rc N --> 意味着读取/etc/rc.d/rcN.d/

K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务

S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务

for srv in /etc/rc.d/rcN.d/K*; do

$srv stop

done

for srv in /etc/rc.d/rcN.d/S*; do

$srv start

done

runlevel

ntsysv 命令 //与当前init模式有关 管理的是开机进入5模式某个服务的状态

ntsysv --level=3 更改模式

启动流程

u注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本

u不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中

•/etc/rc.d/rc.local在指定运行级别脚本后运行

[11:52:00-root@ centos6 ~]#ls /etc/rc*.d/S99local -l

lrwxrwxrwx. 1 root root 11 Jul 18 19:48 /etc/rc2.d/S99local -> ../rc.local

lrwxrwxrwx. 1 root root 11 Jul 18 19:48 /etc/rc3.d/S99local -> ../rc.local

lrwxrwxrwx. 1 root root 11 Jul 18 19:48 /etc/rc4.d/S99local -> ../rc.local

lrwxrwxrwx. 1 root root 11 Jul 18 19:48 /etc/rc5.d/S99local -> ../rc.local

 

#vim /rc.local

#echo rc.local

#sleep 5

#touch /var/lock/subsys/local

•可以根据情况,进行自定义修改

1:2345:respawn:/usr/sbin/mingetty tty1

2:2345:respawn:/usr/sbin/mingetty tty2

...

u6:2345:respawn:/usr/sbin/mingetty tty6

mingetty会自动调用login程序

ux:5:respawn:/etc/X11/prefdm -nodaemon

u总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> (关闭对应下需要关闭的服务)启动需要启动服务 --> 设置登录终端

uCentOS 6 init程序为: upstart, 其配置文件:

/etc/inittab, /etc/init/*.conf,配置文件的语法 遵循 upstart配置文件语法格式,和CentOS5不同

************************************************************************************

centos5,6启动流程:

1 post

2 grub

1) mbr 446 stage1

2) stage1.5 mbr后面的27 sectors

3)/boot/grub stage2

grub-install --root-directory=/mnt/sysimage /dev/sda

3 /boot/vmlinuz

4 /boot/initramfs

5 root mount ro 挂根

6 /sbin/init 根进程 /etc/inittab N 启动级别

7 /etc/rc.d/rc.sysinit

8 /etc/rcN.d/K*

9 /etc/rcN.d/S*

10 /etc/rc.local

11 mingetty login 登录界面

12 windows

***********************************************************************************************************

grub legacy

uCentOS 6启动流程:

POST --> Boot Sequence(BIOS) --> Boot Loader --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端

#rpm -qi grub

#rpm -ql grub

#ls /boot/grub

#df -T

#updatedb

#locate ext4.ko

/lib/modules/2.6.32-754.el6.x86_64/kernel/fs/ext4/ext4.ko

#ll /lib/modules/2.6.32-754.el6.x86_64/kernel/fs/ext4/ext4.ko

  • grub引导各个阶段的作用_及原理
  • grub: GRand Unified Bootloader ///主要的功能是引导计算启动的 分为第一阶段 ,第二阶段 。下一阶段需要上一阶段来寻找

grub 0.97: grub legacy

grub 2.x: grub2

grub legacy:

stage1: mbr 446

stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统 第一个扇区之后的后续扇区

stage2:磁盘分区(/boot/grub/)

grub安装

  • 安装grub:

(1) grub-install                       /可以修复所有grub 启动引导阶段 

安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到 DIR/boot目录下

grub-install --root-directory=DIR /dev/DISK

(2) grub

grub> root (hd#,#) //挂载根 认为boot是根 例hd0,0 第一块磁盘的第一个分区 。

grub> setup (hd#)

 

#which grub-install

/sbin/grub-install

#rpm -qf /sbin/grub-install

/

grub legacy

u配置文件:/boot/grub/grub.conf <-- /etc/grub.conf

ustage2及内核等通常放置于一个基本磁盘分区

  • 功用:
  • (1) 提供启动菜单、并提供交互式接口

a:内核参数

e: 编辑模式,用于编辑菜单

c: 命令模式,交互式接口

  • (2) 加载用户选择的内核或操作系统

允许传递参数给内核

可隐藏启动菜单

  • (3) 为菜单提供了保护机制

为编辑启动菜单进行认证

为启用内核或操作系统进行认证

ugrub的命令行接口

help: 获取帮助列表

help KEYWORD: 详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#)

kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可添加许多内核支持使用的cmdline参数

例如:max_loop=100 selinux=0 init=/path/to/init

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk

boot: 引导启动选定的内核

#cat /proc/cmdline 内核参数

内核参数文档:/usr/share/doc/kernel-doc-2.6.32/Documentation/kernel-parameters.txt

  • 识别硬盘设备

(hd#,#)

hd#: 磁盘编号,用数字表示;从0开始编号

#: 分区编号,用数字表示; 从0开始编号

(hd0,0) 第一块硬盘,第一个分区

手动在grub命令行接口启动系统

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

grub legacy配置文件

  • 配置文件:/boot/grub/grub.conf

default=#: 设定默认启动的菜单项;落单项(title)编号从0开始

timeout=#:指定菜单项等待选项选择的时长

splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径

password [--md5] STRING: 启动菜单编辑认证

hiddenmenu:隐藏菜单

title TITLE:定义菜单项“标题”, 可出现多次

root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件

password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证

 

grub加密

生成grub口令

Øgrub-md5-crypt

Øgrub-crypt

//

关闭防火墙方法

systemctl disable firewalld /centos7

chkconfig iptables off /centos6

 

vim /etc/selinux/selinux.config

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

1.系统刚装好 ,和修复完是有区别的, 刚刚装好 /boot/grub/stahe2 的内容不完全放在这个目录

当破坏修复之后 stahe2 的内容全部放在这个目录下了

2./boot/grub/*_1.5* 文件用来做修复用的

grub > 模式依赖这些文件 而 grub-install 命令不依赖这些文件

/boot/grub/grub.conf //定义启动菜单

3.自制centos启动背景图片 /boot/grub

大小为 640*480

使用工具 convert

rpm -qf `which convert`

更改后缀为*.xpm

convert -resize 640x480 -colors 14 win.jpg win.xpm

gzip xin.xpm

cp win.xpm.gz /boot/grub/

//

[03:35:58-root@ centos6 grub]#cat grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/sda2

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0 //默认的 排在第一位的就是0

timeout=5 //倒计时

splashimage=(hd0,0)/grub/splash.xpm.gz

passwd centos 加grub 口令 不能随意更改root密码

hiddenmenu

title CentOS 6 (2.6.32-754.el6.x86_64)

root (hd0,0) /// /boot分区

kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=6c4b1089-d57c-4249-89fd-b503a12956d6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet max_loop=100

initrd /initramfs-2.6.32-754.el6.x86_64.img

**************************************************************************

可以将分区写在这

kernel (hd0,0) /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=6c4b1089-d57c-4249-89fd-b503a12956d6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM max_loop=100

initrd (hd0,0) /initramfs-2.6.32-754.el6.x86_64.img

/

grub 口令加密

#grub-md5-crypt /grub-crypt sha512算法

password:

retype password:

asdfwe$5f$5as%$Ddsaf65

vim /boot/grub/grub.conf //定义启动菜单

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/sda2

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0 //默认的 排在第一位的就是0

timeout=5 //倒计时

splashimage=(hd0,0)/grub/splash.xpm.gz

passwd --md5 asdfwe$5f$5as%$Ddsaf65 ////加grub 口令 不能随意更改root密码

hiddenmenu

title CentOS 6 (2.6.32-754.el6.x86_64)

root (hd0,0) /// /boot分区

kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=6c4b1089-d57c-4249-89fd-b503a12956d6 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet max_loop=100

initrd /initramfs-2.6.32-754.el6.x86_64.img

//

系统救援

救援环境

在根文件系统无法使用时需要,如/bin/mount删除

对系统没有特殊要求

从光盘引导(boot.iso或者安装光盘#1)

从USB盘(可由boot.iso制作)引导

文件系统重组

Anaconda将会询问是否应该挂载文件系统

/mnt/sysimage/*

/mnt/stage2

$PATH包括硬盘的目录

文件系统节点

提供系统特定的设备文件

mknod了解major/minor

系统配置文件丢失修复

系统在引导期间,很重要的一个过程就是init进程读取其配置文件/etc/inittab,启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab误删除或修改错误,Linux将无法正常启动。此时,只有通过救援模式才可以解决此类问题。

•有备份文件的回复方法

•没有备份文件的恢复办法

有备份文件的恢复办法:

进入救援模式,执行chroot命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/etc、/boot等要进行备份),直接将备份文件拷贝回去,退出重启即可。如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf及/etc/passwd的文件修改错误,也可以直接修正恢复。假设有备份文件/etc/inittab.bak,则在救援模式下执行:

chroot /mnt/sysimage

cp /etc/inittab.bak /etc/inittab

没有备份文件的恢复办法

如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复,首先查找到/etc/inittab属于哪一个RPM包

chroot /mnt/sysimage

rpm -qf /etc/inittab 查询到此文件来自initscripts包

exit 退出chroot模式

mount /dev/sr0 /mnt/source 挂载存放RPM包的安装光盘

rpm -ivh --replacepkgs | force /mnt/source/Packages/

initscripts-9.03.49-1.el6.centos.x86_64.rpm CentOS6系统的要修复的硬盘系统的根目录在/mnt/sysimage下,需要使用--root选项指定其位置。覆盖安装/etc/inittab文件所在的RPM包,使用选项“—replacepkgs 或—force 表示覆盖安装

如果想只提取RPM包中的/etc/inittab文件进行恢复,可以在进入救援模式后,执行命令:

rpm2cpio /mnt/source/Packages/initscripts-9.03.49-1.el6.centos.x86_64.rpm| cpio -idv ./etc/inittab

cp etc/inittab /mnt/sysimage/etc

注意此命令执行时不能将文件直接恢复至/etc目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的路径。提取文件成功后,将其复制到根分区所在的/mnt/sysimage目录下相应位置即可

破解root口令:

启动系统时,设置其运行级别1

进入单用户模式:

(1) 编辑grub菜单(选定要编辑的title,而后使用a 或 e 命令)

(2) 在选定的kernel后附加

1, s, S,single 都可以

(3) 在kernel所在行,键入“b”命令

//

备份删除/dev/sda 446字节

hexdump -C /dev/sda

dd if=dev/sda of=/root/grubstage1 bs=1 count=446

scp

dd if=/dev/zero of=/dev/sda bs=1 count=446

进入救援模式 修复

hexdump -C /dev/sda -n

dd if=/mnt/sysimage/root/grubstage1 of=/dev/sda

/

//grub-install 将会修复所有 grub阶段

1) mbr 446 stage1

2) stage1.5 mbr后面的27 sectors

3)/boot/grub stage2

grub-install --root-directory=mnt/sysimage /dev/DISK //指定MBR所在磁盘 --root-directory boot分区的父目录

///

无备份恢复 grub 1,2步

进入救援模式 修复

df

chroot /mnt/sysimage

grub-install /dev/sda

hexdump -C n /dev/sda

重启

//

第二种无备份恢复方法 grub 1,2步

[14:19:01-root@ centos6 ~]#grub

Probing devices to guess BIOS drives. This may take a long time.

GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB

lists possible command completions. Anywhere else TAB lists the possible

completions of a device/filename.]

#grub> root (ha0,0) //挂载根 认为boot是根 hd0,0 第一块磁盘的第一个分区 。

root (ha0,0)

Error 2: Error while parsing number

#grub> root (hd0,0)

root (hd0,0)

Filesystem type is ext2fs, partition type 0x83

#grub> setup (hd0)

setup (hd0)

Checking if "/boot/grub/stage1" exists... no

Checking if "/grub/stage1" exists... yes

Checking if "/grub/stage2" exists... yes

Checking if "/grub/e2fs_stage1_5" exists... yes

Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.

succeeded

Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded

Done.

#grub> quit

#hexdump -C /dev/sda -n 512 -v

#sync

/

stage1.5 mbr后面的27 sectors

2)/boot/grub stage2

1. 破坏grub 1.5阶段的一部分

hexdump -C -n 12240 /dev/sda //10240 20个扇区

dd if=dev/zero of=/dev/sda bs=1 count=12240 seek=512

重启之后 系统不会寻找其他启动源 (光盘 ,网络 )而是黑屏 等待

修复方法 进入救援模式

chroot /mnt/sysimage ///切跟

grub-install /dev/sda

hexdump -C n /dev/sda

重启

当grub2出现问题的时候 开机显示

Probing devices to guess BIOS drives. This may take a long time.

 

 

GNU GRUB version 0.97 (640K lower / 3072K upper memory)

 

[ Minimal BASH-like line editing is supported. For the first word, TAB

lists possible command completions. Anywhere else TAB lists the possible

completions of a device/filename.]

grub>

开机 :

grub >kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/sda2 根目录所在分区

grub >initrd /initramfs-2.6.32-754.el6.x86_64.img

*********************************************************************************************************

删除/boot/grub/ 并恢复

grub-install /dev/sda

hexdump -C n /dev/sda

修复方法 进入救援模式

chroot /mnt/sysimage ///切跟

grub-install /dev/sda

vim /boot/grub/grub.config

default=0

timeout=5

root (hd0,0)

kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2 :r!ls

initrd /initramfs-2.6.32-754.el6.x86_64.img

重启

/

删除/boot/initramfs-VERSION-release.img 文件

修复 救援模式

光盘引导

Rescue installed system

df

ls /mnt/sysimage/boot

chroot /mnt/sysimage/

cd /boot

ls

mkinitrd initramfs-$(uname -r).img $(uname -r)

ls -l initramfs-2.6.32-754.e16.x86_64.img /data

当前正在使用的内核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

sync

which mkinitrd

/sbin/mkinitrd

[root@lcentosinux7 ~]# ll /boot/

[root@lcentosinux7 ~]# stat /boot/vmlinuz-3.10.0-862.el7.x86_64

///

修复内核

进入救援模式

紧急救援模式 :

mkdir /mnt/cdrom

mount /dev/sr0 mnt/cdrom

ls /mnt/cdrom/isolinux/vmlinuz

cp /mnt/cdrom/isolinux/vmlinuxz /mnt/sysimger/vmlinuxz-`uname -r`

/

实验:rm -rf /boot ,恢复之

先修复内核 在修复grub

#chroot /mnt/sysimage ///切根

#mount /dev/sr0 /mnt

#cp /mnt/cdrom/isolinux/vmlinuxz /boot/vmlinuxz-`uname -r` /修复内核 ///cp /mnt/cdrom/isolinux/vmlinuxz /boot/

# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r) /修复initramfs /// mkinitrd /boot/initramfs.img `uname -r`

#grub-install /dev/sda /// 修复grub

vim /boot/grub/grub.config

default=0

timeout=5

title= zoutaiming

root (hd0,0) 可以不写

kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2 :r!ls

initrd /initramfs-2.6.32-754.el6.x86_64.img

重启

 

//

总结 :

1 rescue mode

2 chroot /mnt/sysimage;mount cdrom

3 cp /mnt/isolinux/vmlinuz /boot/grub

4 mkinitrd /boot/initramfs.img `uname -r`

5 grub-install /dev/sda

6 vim /boot/grub/grub.conf

default=0

timeout=3

title magelinux

kernel /vmlinuz root=/dev/sda2

initrd /initramfs.img

破坏 / etc/fstab /rm -rf /boot/* 并恢复之

mv /etc/fstab /data/

rm -rf /boot/*

reboot

进入救援模式

df

blkid

fdisk -l /dev/sda1

mkdir /mnt/tmp 找根

mount /dev/sda1 /mnt/tmp /将各分区 挂载并查看

ls /mnt/tmp

vim /etc/fstab

/dev/sda1 /boot ext4 defaults 0 0

/dev/sda2 / ext4 defaults 0 0

/dev/sda3 /data ext4 defaults 0 0

/dev/sda5 swap swap defaults

///保存重启

 

进入救援模式

修复内核 在修复grub

#chroot /mnt/sysimage ///切根

#mount /dev/sr0 /mnt

# rpm -ivh /mnt/Packages/kernel-2.6.32-754.el6.rpm --force /修复内核 ///

 

#grub-install /dev/sda /// 修复grub

vim /boot/grub/grub.config

default=0

timeout=5

title= zoutaiming

root (hd0,0) 可以不写

kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2 :r!ls

initrd /initramfs-2.6.32-754.el6.x86_64.img

修复带逻辑卷的linux

mv /etc/fstab /data/

rm -rf /boot/*

重启 进入救援模式

blkiad

 

挂载

mount /dev/VolGroup/lv_root /mnt/tmp ///你会发现挂载不上去

lvdisplay

lvscan

 

激活逻辑卷

vgchange -ay

lvdisplay

mount /dev/VolGroup/lv_root /mnt/tmp

vim /tmp/etc/fstab

/dev/VolGroup/lv_root / ext4 defaults 0 0

/dev/VolGroup/lv_home /home ext4 defaults 0 0

/dev/VolGroup/lv_swap swap swap defaults 0 0

/dev/sda1 /boot ext4 defaults 0 0

重启

进入救援模式

修复内核 在修复grub

#chroot /mnt/sysimage ///切根

#mount /dev/sr0 /mnt

# rpm -ivh /mnt/Packages/kernel-2.6.32-754.el6.rpm --force /修复内核 ///

 

#grub-install /dev/sda /// 修复grub

vim /boot/grub/grub.config

default=0

timeout=5

title= zoutaiming

root (hd0,0) 可以不写

kernel /vmlinuz-2.6.32-754.el6.x86_64 root=/dev/sda2 :r!ls

initrd /initramfs-2.6.32-754.el6.x86_64.img

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值