一、CentOS 6 grub legacy:

1.启动流程:

POST �> Boot Sequence(BIOS) �> Boot Loader �>Kernel(ramdisk) �> rootfs �> switchroot �> /sbin/init �>(/etc/inittab,/etc/init/*.conf) �> 设定默认运行级别 �>

系统初始化脚本rc.sysinit �> 关闭或启动对应级别的服务 �> 启动终端

2.grub legacy

grub: GRand Unified Bootloader

grub 0.x: grub legacy

grub 1.x: grub2

grub legacy:

stage1: mbr

stage1_5: mbr之后的扇区,让stage1中的bootloader

能识别stage2(/boot)所在的分区上的文件系统

vmlinuz

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

initramfs―->读取/grub.conf 文件

grub 各阶段备份文件:――�》可以用于修复

ed6301371ac642549a8631bc63cfccc8.jpg

1.jpgPHP/upload/image/20160921/1474438949130441.jpg">

3. grub 功用

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

功用:

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

a:内核参数

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

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

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

允许传递参数给内核

可隐藏启动菜单

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

为编辑启动菜单进行认证

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

4. grub的命令行接口

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) 第一块硬盘,第一个分区

5. 手动在grub命令行接口启动系统:(启动选择菜单,选择"e")

grub> root (hd#,#) #指定根目录分区位置

一般为 root (hd0,0)

grub> kernel/vmlinuz-VERSION-RELEASE ro

root=/dev/DEVICE

# 指定内核vmlinuz以及根目录

grub>initrd/initramfs-VERSION-RELEASE.img

#指定initramfs

grub> boot #引导

6.grub legacy配置文件

grub 配置文件:/boot/grub/grub.conf<� /etc/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/mapper/vg0-root

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

#boot=/dev/sda

default=0

timeout=2

splashimage=(hd0,0)/grub/splash.xpm.gz #开机启动画面背景图

hiddenmenu

title CentOS 6 (2.6.32-642.el6.x86_64) 第0启动项

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto

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

title MaMaDan 第1 启动项目

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=usquiet rhgbcrashkernel=auto

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

――――――――――――――――――――――――――――――�

启动效果:

2.jpgPHP/upload/image/20160921/1474439290838747.jpg">

――――――――――――――――――――――――――――――-

quiet rhgb 可以删去,用于美化启动界面,但是会隐藏错误信息,删除后可以看到详细错误信息,以字符界面显示

基本必须项目:

default=#

timeout=#

title #############

root ( )

kernel /############

initrd /########

――――――――――――――――――――――――――――

7.配置文件内容解析:

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

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

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

hiddenmenu:隐藏菜单

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

添加在第一个title 之前时,用于设定全局单用户模式密码

添加在指定title 之内,则用于设定指定title 密码

建议使用加密口令

grub-md5-crypt 生成加密口令

或 openssl passwd -1

3.jpgPHP/upload/image/20160921/1474439564538449.jpg">

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

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

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

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

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


8. grub加密

加密密码生成工具: grub-md5-crypt

eg: 生成密码为“123456”的加密字符

1474439683839522.jpgPHP/upload/image/20160921/1474439683839522.jpg">





在第一个title前添加password string

1474439683708195.jpgPHP/upload/image/20160921/1474439683708195.jpg">

9. 破解root口令:

启动系统时,设置其运行级别1,进入单用户模式,即可修改密码

10. 进入单用户模式:

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

1474439683840261.jpgPHP/upload/image/20160921/1474439683840261.jpg">

1474439684951826.jpgPHP/upload/image/20160921/1474439684951826.jpg">

(2) 在选定的kernel后附加

1,s,S或single都可以;

1474439683462363.jpgPHP/upload/image/20160921/1474439683462363.jpg">

按“回车”确认,并退回到前一界面

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

1474439683749454.jpgPHP/upload/image/20160921/1474439683749454.jpg">

二、grub安装(修复)

安装grub:(救援模式下)

(1) grub-install 可以修复第一(MBR被破坏)、第二阶段

安装grub stage1和stage1_5到/dev/disK磁盘上,并

复制GRUB相关文件到 DIR/boot目录下

grub-install �root-directory=DIR /dev/disK

(/boot/grub 整个文件夹丢失,可用此方法修复)

1474440262159240.jpgPHP/upload/image/20160921/1474440262159240.jpg">

修复前,需要先chroot /mnt/sysimage

grub-install /dev/sda

注意:修复第一阶段时,不可指定分区,指定设备即可

(2) 手动设定grub配置(注:此步骤不会生成grub.conf配置文件,需后续手动创建)

grub> root (hd#,#) #指定root分区

grub> setup (hd#) #修复 1.5 及 2阶段

检查并修复1.5,2 阶段

注意: /boot/grub 下的stage* 文件,是各阶段备份文件,用于修复grub的,若文件,grub setup 依赖于这些文件,

但是grub install 不依赖这些文件

三、grub 模拟损坏与修复

――――――――――――――――――――――――――――――――――�

1. 损坏第一阶段 stage1: (破坏mbr (446字节))

stage1 破坏:

1474440262839877.jpgPHP/upload/image/20160921/1474440262839877.jpg">

修复:

1 ) 救援模式下:

chroot /mnt/sysimage

grub-install /dev/sda

2) 若/boot/grub 中的各阶段备份文件存在,可直接在grub命令行下setup修复

grub

grub>root (hd0,0) # 指定根

grub>setup (hd0)

1474440262509456.jpgPHP/upload/image/20160921/1474440262509456.jpg">

1474440262513884.jpgPHP/upload/image/20160921/1474440262513884.jpg">

――――――――――――――――――――――――――――――――――

2. 损坏 1.5阶段 stage 1.5 :

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

修复:

1)救援模式下:

chroot /mnt/sysimage

grub-install /dev/sda

2) 若/boot/grub 中的各阶段备份文件存在,可直接在grub命令行下setup修复

grub

grub>root (hd0,0) # 指定根

grub>setup (hd0)

――――――――――――――――――――――――――――――――――�

3. 破坏(删除)/boot/vmlinux,initramfs

修复:

1)救援模式下,挂载iso系统文件

chroot

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

#修复 initramfs

从光盘中复制mvlinuz*文件至/boot

完成后再手动建立grub.conf即可完成

2)救援模式下,使用网络获取vmlinuz文件

(从其他 主机处获取缺失文件)

chroot

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

scp host_ip:/boot/vmlinuz* /boot/

(从远程主机中拷贝vmlinuz文件)

完成后再手动建立grub.conf即可完成

――――――――――――――――――――――――――――――――――�

4. 删除 /boot :(删除了/boot整个目录)

修复:

救援模式下:

挂载光盘 mount /dev/cdrom /dir

重建/boot:

rpm -ivh /##/cdrom/Packages/kernel-### �force

|replacepkgs

#重建/boot中的各文件,但不包括grub.conf

1474440262213906.jpgPHP/upload/image/20160921/1474440262213906.jpg">

1474440262773514.jpgPHP/upload/image/20160921/1474440262773514.jpg">

修复grub:

chroot /mnt/sysimage

grub-install /dev/sda

1474440262319493.jpgPHP/upload/image/20160921/1474440262319493.jpg">

重建grub.conf文件:

vi /boot/grub/grub.conf:

default=0

timeout=2

title mamadan

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/vg0/root

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

――――――――――――――――――――――――――――――――――�

5. 删除/etc/fstab 以及/boot:

修复:

救援模式下:

此时由于fstab丢失,无法挂载根:

1474440262303983.jpgPHP/upload/image/20160921/1474440262303983.jpg">

救援模式shell下,使用 blkid 可以查看磁盘情况:

1474440262528912.jpgPHP/upload/image/20160921/1474440262528912.jpg">

(无法区分哪个是根,需要将每个分区都挂载,以确定哪个是根)

1) 系统内存在使用lvm时,需要先激活lvm:

vgchange -ay

1474440262869440.jpgPHP/upload/image/20160921/1474440262869440.jpg">

1474440262600351.jpgPHP/upload/image/20160921/1474440262600351.jpg">

挂载各分区,尝试确定根位置:

mkdir /mnt/sda1

mkdir /mnt/sda2

mkdir /mnt/sdb1

mkdir /mnt/sdb2

mount ………………..

2) 系统内仅使用普通分区时,直接挂载各分区来确认根位置

mkdir /mnt/sda1

mkdir /mnt/sda2

mkdir /mnt/sdb1

mkdir /mnt/sdb2

…………..

进入根对应分区,建立fstab文件,并重启系统,重新进入救援模式,让救援系统挂载根目录

注意: 需要挂载 root,usr,var 三个分区,否则修复/boot目录文件时,可能会

因无依赖文件而已报错

挂载分区:

mkdir /mnt/sysroot

mount /dev/vg0/root /mnt/sysroot

修复fstab:

# vi /mnt/sysroot/etc/fstab

/dev/sda1 /boot ext4 defaults 1 1

/dev/vg0/root / ext4 defaults 1 2

/dev/vg0/usr /usr ext4 defaults 1 2

/dev/vg0/var /var ext4 defaults 1 2

重启,再次让救援系统尝试挂载根目录:

1474440262255420.jpgPHP/upload/image/20160921/1474440262255420.jpg">

根成功被识别并挂载后,按照/boot 修复方法继续修复即可

――――――――――――――――――――――――――――――――――�

Centos 6 �grub legacy及grub修复的更多相关文章

  1. macos – 运行brew命令充满了’同意Xcode / iOS许可证需要管理员权限,请通过sudo以root身份重新运行.’

    所以我跑了:如果滚动到底部,可以输入“同意”,然后就可以了.

  2. iOS推送通知适用于Dev而不是Enterprise Distribution

    本网站上没有其他问题,我已经能够找到实际上提出了Dev将工作的原因,但企业分布不会.为什么归档总是使aps环境生产?

  3. ios – 仅适用于iPad的Settings.bundle?

    我有一种情况需要通过设置应用程序为我的应用程序提供一个设置.我的应用程序是通用的,但这个特殊的设置只在iPad上有意义,所以我只希望我的应用程序显示在iPad上的设置中.这可能吗?

  4. ios – testflight库和Xcode 5没有变化现在说“ld:找不到-lTestFlight的库”

    我已经创建了几个月的应用程序,突然Xcode5不想构建它.它只是抱怨以下错误.如果我理解它可以,它会抱怨testflight,但我几周没有改变它.它完美地编译了它.我不得不说我已经尝试将AdobeADMS跟踪库添加到项目中.然后,出现链接器错误.任何提示?

  5. ios – Swift 4设置捆绑,获取默认值

    我创建了一个包含大约8个切换开关的设置包.我想要做的是从设置包中获取默认值.目前我现在有这两种方法:我在viewDidLoad中调用这些方法然而,这并没有得到我的默认值.如果我关闭应用程序,打开设置,调整设置并重新打开应用程序,这会产生正确的值.有没有获得默认设置?

  6. 如何在ios swift项目中为dev n prod使用两个不同的GoogleService-info.plist文件?

    我需要使用两个不同的GoogleService-info.plist来处理dev和prod构建,目前我只是通过在编辑方案中更改“构建配置”来分离dev和prod,但现在我需要有两个不同的.plist文件dev和prod用于处理谷歌分析,pushwoosh等,解决方法对于这种情况,您需要在Dev和Prod的项目中使用带有diffbundleid的不同Targets.之后,您可以链接GoogleSer

  7. Swift调用OC和C

    Swift文件:main.swiftOC文件:Root.hRoot.mC函数文件:Fun.c桥接文件:工程名称-Bridging-Header.h

  8. OC调用Swift

    修改main.m文件OC文件:Root.hRoot.mSwift文件:Person.swift

  9. openstack安装liberty--安装对象存储服务swift

    通常使用CACHE技術提高性能Accountservers賬戶服務,管理對象存儲中的賬戶定義。Containerservers容器服務,在對象存儲中管理容器或文件夾映……Objectservers對象服務,在存儲節點管理實際的對象,比如文件。Wsgimiddleware處理認證,通常使用OPENSTACKIdentityswiftclient為用戶提供命令行接口使用RESTAPIswift-init初始化和構建RING文件腳本swift-recon一個命令行工具,用於檢索群集的各種度量和測試信息。

  10. swift 跳到系统设置界面

    首先需要设置一下:跳转到系统的设置页主页,在iOS8.0的时候,Apple出了这么个玩意UIApplicationopenSettingsURLString,可以跳转到系统设置主页参考:http://www.jianshu.com/p/580d84dda738http://www.jianshu.com/p/8e354e684e8a

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部