基于Grub 2.00的x86内核引导流程

基于Grub 2.00的x86内核引导流程
基于Grub 2.00的x86内核引导流程

基于Grub 2.00的x86内核引导流程--源代码情景分析目前Linux中使用最广泛的的bootloader是Grub(GRand Unified Bootloader)。如今Grub 2已经替换了早期的0.9x系列版本的Grub Legacy,而且Grub Legacy已经不再开发维护。虽然Grub 2从名字上看像是Grub的升级版,但其源代码实际被完全重构了。现从源代码角度分析基于Grub 2.00的x86内核引导流程。

1. 磁盘简介

由于在Grub进行内核引导的过程中涉及到磁盘操作,先简介一下磁盘为后续引导流程分析作铺垫。磁盘三要素:由所有盘面上相同半径的同心圆形磁道(Track)组成的柱面(Cylinder), 磁头(Head), 扇区(Sector)之间的关系如下图所示:

对于磁盘,其最小存储单位为扇区(Sector),在相当长的一段时间里,扇区的大小固定在512 bytes[1]. 但是从2009年开始出现扇区大小为4096

bytes的磁盘,即Advanced Format disks。

对于扇区的编址,早期的方案是CHS编址(Cylinder-Head-Sector),即用数据元组CHS tuples (c,h,s)的形式表示一个扇区的位置,但是在CHS编址时,扇区号是从1开始的,没有扇区0,但磁头和柱面编号都是从0开始的,即CHS编址起始于地址(0,0,1)。另外一种编址方案是LBA编址(Logical Block Addressing),把整个磁盘的所有扇区资源统一分配序号。在2003年发布的ATA-6标准中,LBA采用48-bit地址。

CHS数据元组(c, h, s)根据如下公式转换成相应的LBA逻辑地址:

LBA= (c×Nheads + h)×Nsectors + (s ? 1)

其中:Nheads是硬盘中的磁头数目,Nsectors是每条磁道上可以划分的最大的扇区数目。上面的公式意味着LBA对扇区的编址是从0开始的,所以在Grub 的boot.S源代码中,当磁盘不支持LBA模式,代码执行流回退至CHS模式继续进行处理时,会将编址的起始地址调整成从1开始。

[1]Floppydisks and controllers use physical sector sizes of 128, 256, 512 and 1024 bytes(e.g., PC/AX), whereby formats with 512 bytes per physical sector becamedominant in the 1980s.

磁盘在使用过程中总是会涉及到分区方案,其中一个典型的四分区MBR磁盘结构如下所示:

其中:磁盘的0柱面、0磁头、1扇区即为主引导记录MBR(MasterBoot Record)扇区。它由三个部分组成:主引导程序bootloader、磁盘分区表和有效标志(0x55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),占64个字节,磁盘中分区有多少以及每一分区的大小都记在其中。第三部分是磁盘有效标志签名,占2个字节,固定为0x55AA。另外对于MBR磁盘,由于扇区空间限制分区表

最多占用64字节,每个分区表项占用16字节,所以其最多有4个分区。

后续对bootloader部分会有详细分析。先来分析磁盘分区表,其定义如下:Table 2 磁盘分区表项(DiskPartition Table)结构

磁盘分区表项结构定义对柱面、磁头和扇区的大小分别限定在10 bits、8 bits和6 bits,

该种定义隐含着限制了磁盘的大小。分区表可描述磁盘容量的大小根据如下公式计算:

MaxCapacity= Nheads×Nsectors×Ncylinders×SectorSize

取(c,h,s)的上限便可得到最大磁盘容量:

MaxCapacity= 256×64×1024×512 bytes = 8GB

即:现有的分区表项结构定义只能描述8GB容量以下的硬盘。

随着磁盘的容量越来越大,8GB的容量限制显然亟待扩容,最好的方式应该

是重新定义分区表项结构,但不幸的是:对于容量大于8GB的磁盘,磁盘分区表项结构定义并没有更新,只是将其中CHS相关的结构体变量设置成一个不合理配置(Cylinder = 1023, Head = 255, Sector = 63),然后用32位LBA 扇区地址(Relative Sector)和32位分区长度(PartitionLength)去描述某个磁盘分区,但是该用法依然会限制磁盘容量:

MaxCapacity= 232 ? 512 bytes = 2TB

让人感觉更不合理的是:在2003年发布的ATA-6标准中,LBA采用48-bit 地址,在此分区表项定义中却只能使用其低32bit,这是一种自废武功的做法。为何不将结构体中空闲的CHS相关字段组合起来保存LBA-48的高16位呢?下面就是一种非官方的定义,悲哀的是:这种合理的定义并没有被实现。

Table 3 "Unofficial" 48bit LBA Proposed MBR Format

追根溯源,对于MBR磁盘,由于扇区空间大小的限制,留给磁盘分区表项的空间只有64 bytes,仅有的这点空间还要平均分配给若干个分区。清晰描述一个分区所需的最小空间需求摆在那里,无论怎么设计磁盘分区表项,用一个受限的分区表空间去描述的磁盘空间也同样是受限的。于是为了解决MBR磁盘分区表可描述磁盘容量受限的问题,在2004年,Wintel在共同推出的一种可扩展固件接口(EFI: Extensible Firmware Interface)的主板升级换代方案中提出了GPT分区模式。

GPT(Globally Unique Identifier Partition Table Format)磁盘分区模式虽然是EFI方案的一部分,但并不依赖于EFI主板,在BIOS主板的PC中也可使用GPT分区。与MBR分区方案的最大4个分区表项的限制相比,GPT 对分区数量没有限制。GPT还允许将主磁盘分区表和备份磁盘分区表用于冗余,支持唯一的磁盘和分区GUID。GPT分区方案目前在Windows操作系统上应用比较广泛。GPT分区方案示意图如下:

为了前向兼容性,在GPT分区方案中传统的MBR空间被保留下来,但是其用途是防止基于MBR分区的磁盘工具误判以及可能误写GPT磁盘。这也是第一个逻辑扇区LBA0称为保护分区PMBR(Protective MBR)的缘由。

Linux支持通过BIOS从基于GPT的磁盘中进行引导,即所谓的Hybrid MBR 模式。该模式下保护分区PMBR与传统的MBR作用相同:该扇区被用来存放引导程序bootloader第一阶段(Stage 1)的代码,但是磁盘分区表项中仅包含一种类型为0xEE的主分区表项(Primary Partition Entry)。

Note: 后续内核引导流程分析时,以当下主流的MBR分区磁盘为主,GPT 磁盘仅作提及,不作详述。

2. 基于Grub2.00的x86内核引导流程

有了磁盘简介的铺垫,现切入主题Grub 2.00内核引导源代码分析。整个分析过程基本都是一个逆向分析的过程,先介绍其用法及相关描述[1],然后分析Makefile以确定生成某个可执行文件的依赖链,从而得出其对应的源文件,最后分析源文件解析其动作。

[1]对描述中涉及到英文的部分,为保留原意不致扭曲而不做翻译。毕竟在GNU Grub和Linux内核源代码中,所有文档注释都是英文描述。所以,英语,x86汇编语言,Makefile是内核开发过程中绕不过去的坎。

Grub的x86源代码主要分为四个部分,分别为位于目录grub-core/boot/i386/pc下的boot.S, diskboot.S, startup_raw.S,

以及grub-core/kern目录下的Grub main.c主模块相关代码。

2.1 Stage 1: boot.img分析

GNU的软件工程基本都依赖于Makefile去描述一个可执行文件的来龙去脉,由其编译过程可以整理出某个可执行文件的诞生过程:由哪些源文件编译,然后链接哪些库,以及还可能额外存在的二进制文件操作,比如objcopy,strip 等等。为了弄清楚boot.img的来龙去脉,需要理顺boot.img在Makefile中的依赖链:

由Makefile中的依赖链条可知:MBR中存放的bootloader的源代码就是boot.S,当然在编译过程中还涉及到一些其他细节,在此就不再展开。

先来分析boot.S。我原本打算摘一些重要的代码片段出来分析,但是之后发现boot.S中的代码是一个一气呵成的执行流,彼此之间相互铺垫但又甚是简洁明了。鉴于boot.S是MBR中的bootloader,我们有时候好奇在加电开机的瞬间到底发生了什么,操作系统到底是怎么一步步被引导起来的,下面就是加电开机“宇宙大爆炸”的瞬间:

结论:MBR中的boot.S,其唯一功能是加载硬盘第二个扇区的内容到内存中,并跳转至其入口函数继续执行。如是更加深入理解之前Stage1中对boot.img的描述:”the sole function of `boot.img' is to load the first sectorof core.img from a local disk and jump to it”。

GRUB启动过程分析 & GRUB 引导程序配置

计算机在启动的时候,首先由BIOS中的程序执行自检,自检通过后,就根据CMOS的配置找到第一个可启动磁盘的MBR中的Boot Loader程序(一般在启动盘的第一个物理扇区,占416字节),并把控制权交给Boot Loader,由Boot Loader进一步完成操作系统内核的加载。当Boot Loader找到内核之后,就把控制权交给操作系统内核,由内核继续完成系统的启动。

可以看出,Boot Loader是计算机启动中第二个要执行的程序,它是引导操作系统的关键程序。可以引导操作系统的Boot Loader主要有LiLo、GRUB以及Windows下的MBR程序。其中,GRUB是目前使用最为广泛,并且非常优秀的

一款启动引导程序。

GRUB对设备的命名

首先,GRUB对设备的命名必须包含在小括号( )内;其次,GRUB不区分IDE 硬盘和SCSI硬盘,统一使用hdx,其中x指定BIOS中硬盘的编号,并从0开始计数,而且IDE硬盘编号小于SCSI硬盘;第三,GRUB用fdx指定软盘设备,x是软盘驱动器号。下面是一些GRUB对设备命名的举例:

q(fd0)表示第1个软盘

q(hd0,1)表示第1个硬盘的第2个分区

q(hd0,0)/boot/vmlinuz表示第1个硬盘的第一个分区下的boot/目录下的vmlinuz文件。如果没有指定某个分区,则表示使用整个设备,否则只使用指定的分区

q(hd0,2,a)专用于FreeBSD,FreeBSD有一个slice概念,把一个分区进一步分为几个slice,此处指明是第1块硬盘的第3个分区中的slice a。

GRUB的执行流程

当系统加电后,固化在BIOS中的程序首先对系统硬件进行自检,自检通过后,就加载启动磁盘上的MBR,并将控制权交给MBR中的程序(stage1),stage1执行,判断自己是否GRUB,如果是且配置了stage1_5,则加载stage1_5,否则就转去加载启动扇区,接着,stage2被加载并执行,由stage2借助stage1_5驱动文件系统,并查找grub.conf,显示启动菜单供用户选择,然后根据用户的选择或默认配置加载操作系统内核,并将控制权交给操作系统内核,由内核完成操作系统的启动。

GRUB涉及到几个重要的文件:

第一个就是stage1。它被安装在MBR扇区(0面0磁道的第1扇区),大小为512字节(446字节代码+64字节分区表+2字节标志55AA),它负责加载存放于0面0道第2扇区的start程序。

第二个是stage1_5。stage1_5负责识别文件系统和加载stage2,所以stage1_5往往有多个,以支持不同文件系统的读取。在安装GRUB的时候,GRUB 会根据当前/boot/分区类型,加载相应的stage1_5到0面0磁道的第3扇区。stage1_5是由start加载的。

第三个是stage2。它负责显示启动菜单和提供用户交互接口,并根据用户选择或默认配置加载操作系统内核。同前两个文件不同,stage2是存放在磁盘上/boot/grub下。

第四个是menu.lst(/boot/grub/grub.conf的链接)。grub.conf是一个基于脚本的文本文件,其中包含菜单显示的配置和各个操作系统的内核加载配置。GRUB根据grub.conf显示启动菜单,提供同用户交互界面。GRUB正是根据用户选择或默认配置和grub.conf的内核配置加载相应的内核程序,并把控制权交给内核程序,使得内核程序完成真正的操作系统的启动。

其它重要文件,GRUB除了上面叙述的主要文件之外,还包括支持交互功能的一些磁盘程序。主要包括/sbin/下的grub、grub-install、grub-md5-crypt 和grub-terminfo和/usr/bin/mbchk,以及/boot/grub下的设备映像文件(device.map)和菜单背景图像文件(splash.xpm.gz)。

通过上面的分析总结,可以很容易地看出,GRUB实际上包含两部分,一部分被安装在磁盘的特殊扇区,另外一部分则以文件的形式存在。要让GRUB启动操作系统,就必须首先把GRUB的stage1和stage1_5(根据文件系统自动选择

是否安装)安装到磁盘的特殊扇区,另外,在磁盘的/boot/grub下存在有grub.conf、device.map等文件和支持交互的程序,而且这些程序必须在PATH 环境变量指定的路径中。具备了这些知识,相信不管是安装、配置、备份或修复GRUB都不是件很难的是情。

安装GRUB到MBR

GRUB的工作目录是在/boot/grub下,而make install并没将其安装到/boot/grub。所以,安装完成后要执行如下一些操作:

a)把/usr/local/share/grub/i386-pc/目录下的所有文件统统拷贝到/boot/grub/目录下(要先下载源码包进行./configure,make, make install)

#cp /usr/local/share/grub/i386-pc/* /boot/grub/

b)在/boot/grub下创建grub.conf文件,并建立一个到grub.conf的软链接menu.lst

#cd /boot/grub

#touch grub.conf

#ln -s grub.conf menu.lst

注意!如果已经存在grub.conf,就最好不要再次创建,需要时直接修改即可。

c)确认/usr/local/sbin和/usr/local/bin在PATH变量的值中,执行如下命令检查

#env |grep PATH

如果发现/usr/local/sbin和/usr/local/bin不在PATH变量中,可以通过如下命令修改:

#export PATH=$PATH /usr/local/sbin:/usr/local/bin

d)安装GRUB到MBR

GRUB在启动中,被BIOS调用,只有放在MBR中才可以被调用,所以,GRUB

要让BIOS调用,就必须安装在MBR中。实际上是将stage1安装到MBR中,也可能根据文件系统选择安装了stage1_5。下面,提供几个安装GRUB的例子:#grub-install /dev/hda //将GRUB安装到第1块IDE硬盘的MBR

#grub-install /dev/sda//将GRUB安装到第1块SCSI硬盘的MBR

#grub-install /dev/fd0//将GRUB安装到软盘

#grub-install /dev/hda1//将GRUB安装到第1快硬盘的0扇区,当用其它引导程序引导系统时,往往选择这种方式,以免覆盖其它引导程序。

e)在GRUB的命令行模式下安装GRUB

关于GRUB命令行模式及其操作方法请参考3小节的内容。在系统显示启动菜单时候按下c键,或者系统启动后在命令行执行/usr/sbin/grub程序,都可以进入GRUB的命令行模式。命令行模式下安装GRUB的基本过程如下:q指定启动设备

grub>root (hd0,0)#除了root后必须有空格,别的位置均不能有空格!

此处(hd0,0)是指第1块硬盘的第1个分区。如果不能确定包含GRUB的stage1文件的分区,可以通过find指令查找确定:

grub>find /boot/grub/stage1#查找stage1

GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名,这个设备就是上面要用到的设备。

q安装GRUB

grub>setup (hd0)#除了setup后必须有空格,别的位置均不能有空格!

这条命令将会在第1块硬盘的MBR安装GRUB,如果不想在MBR安装GRUB,而是希望将GRUB安装在某分区的引导扇区的话,可以用下面的命令安装:

grub>setup (hd0,0)#除了setup后必须有空格,别的位置均不能有空格!

这将会在第1块硬盘的第1个分区的引导扇区安装GRUB。

q退出GRUB

grub>quit

f)重启机器,新安装的GRUB生效

GRUB配置文件示例

grub.conf是GRUB的配置文件,其结构比较简单,可以分为两部分,第一步分是全局配置,另外一部分就是每个操作系统的启动配置。其中可以有多个操作系统的菜单配置。下面就是一个具体的例子。

#===========/boot/grub/grub.conf文件范例=========

timeout 30 #等待用户选择菜单项的时间(以秒计),超时则引导默认的选项

default 0 #默认选项,第一项

fallback 1 #如果第一项出错,则启动下面的后备选项

splashimage=(hd0,0)/grub/splash.xpm.gz #GRUB启动画面

#以下是启动Linux的配置

titleRed Hat Linux Enterprise AS3 for syd168 #启动项的菜单标题

root (hd0,0) #指定根文件系统,第1块硬盘第1个扇区中的/boot。

kernel /vmlinuz-2.4.18 ro root=LABEL=/ #内核在/boot中

initrd /initrd-2.4.18-14.img #启动RAM盘在/boot下

#以下是启动Windows的配置,如果只有Linux就不需要

title Windows2003 Enterprise for syd168 #Windows启动菜单标题

root noverify(hd0,1) #该操作系统在hd0的第二分区,不mount

chainloader +1 #从第一个硬盘的第二个分区引导Windows

修复更新grub2系统引导

修复更新grub2系统引导 一.修复 如果重装系统或者引导系统崩溃无法进入系统开机引导项从而无法进入以装系统,以Ubuntu Grub2引导为例,详细写一下如何修复之前的系统引导。 (以下说明均以Ubuntu系统为例,其他系统大同小异) 1.放入系统安装盘或这插入刻录好的系统安装U盘,进入系统安装选项,选择试用选项! 2.选择适用之后,进入Ubuntu图形界面,打开终端。 3.选择Ubuntu安装磁盘,如果不确定具体在哪个磁盘,可以用命令查看一下 [plain] sudo fdisk -l 4.挂载Ubuntu系统安装磁盘(我的是在第8磁盘,故为sda8) [plain] sudo mount /dev/sda8 /mnt 5.开始恢复grub2系统引导 [plain] sudo grub-install --root-directory=/mnt/dev/sda 6.执行命令之后,如果没有报错,则恢复成功,重启即可。 二.更新 恢复之后是之前的系统引导界面,如果新安装的系统没有在界面上显示,那么可以进入Ubuntu系统,进行grub2更新。

打开终端,输入 [plain] sudo update-grub2 成功的话,将会出现更新后找到的磁盘上所有系统引导的记录。(以我自己的为例) [plain] hugo@hugo-HP:~$ sudo update-grub2 [sudo] password for hugo: Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.5.0-26-generic Found initrd image: /boot/initrd.img-3.5.0-26-generic Found linux image: /boot/vmlinuz-3.5.0-25-generic Found initrd image: /boot/initrd.img-3.5.0-25-generic Found linux image: /boot/vmlinuz-3.5.0-17-generic Found initrd image: /boot/initrd.img-3.5.0-17-generic Found memtest86+ image: /boot/memtest86+.bin Found Windows 8 (loader) on /dev/sda1 Found CentOS release 6.4 (Final) on /dev/sda3 Found Mac OS X on /dev/sda9 done 之后重启即可。 update-grub这个是Ubuntu专用的吧,其它发行版不一定有,通用的是:sudo grub-mkconfig -o /boot/grub/grub.cfg

BCDautofix V1.0.3 [ NT6 启动菜单自动修复工具 ] 帮助文档

BCDautofix V1.0.3 [ NT6 启动菜单自动修复工具] 帮助文档 程序适用范围: 1、格式化或GHOST活动分区(C盘)重装系统后添加修复其它分区上的Vista/2008/Win7启动菜单 2、在Vista/2008/Win7上新装2000/xp/2003后添加修复原Vista/2008/Win7启动菜单 简化出先vista/2008/win7后装2000/xp/2003多系统最简解决方案:2000/xp/2003光盘引导直接装至其它分区,完成后运行本程序修复即可 3、修复其他因BCD相关引起的故障 a.BCD引起的win7/2008r2的修复计算机(Windows Recovery Environment)菜单丢失 b.BCD引起的win7/2008r2的3D启动画面丢失(变成VISTA滚动条启动画面) c.BCD引起的启动菜单选择界面乱码现象 d.为VISTA/2008添加修复计算机(Windows Recovery Environment)菜单,使用方法:在系统盘符中新建recovery文件夹,再把光盘或安装程序中的sources\boot.wim(这个文件是否改名为winr e.wim随意)和boot\boot.sdi两个文件复制至recovery文件夹,再运行本程序,即可自动添加。 e.不明原因的启动菜单丢失 090412更新: f.系统BCD非法的强制修复,现象:VISTA/2008/WIN7中-- 运行msconfig后“启动”(BOOT)栏空白 管理员身份运行命令提示符中后运行bcdedit等和BCD相关的操作提示出错 系统属性的“启动和故障恢复”窗口无法配置“默认操作系统”和等待时间 其它软件无法添加BCD管理的新启动菜单 注:这种情况是否要强制修复自行决定。 使用方法: 非安装软件,直接运行,可运行于32位和64位系统或光盘WINPE系统。程序以盘符形式搜索系统,因此得确保你要添加的系统分区别被隐含盘符。 090416:增加支持繁体中文系统 090417(v1.0.0):修正一些处理流程,改版本号V1.0 090616(v1.0.3):细微修改/改打包方式 可以添加修复Vista/2008/Win7启动菜单,在满足条件的情况下也可以添加修复2000/xp/2003启动菜单。例如可以在xp中运行添加其它分区的vista启动菜单,自动生成xp+vista多系统启动菜单,反过来在vista中运行添加xp的启动菜单就需要满足xp的三个必要引导文件(ntldr/https://www.360docs.net/doc/759327172.html,/boot.ini)已存在活动分区且活动分区不被隐藏盘符的情况才会添加(当xp 菜单不符合条件而无法添加时,如xp菜单已在原多系统菜单中存在,不会影响已存在的xp 启动菜单项)。

UEFI+GPT、Legacy+MBR引导模式介绍及引导修复教程

UEFI+GPT、Legacy+MBR引导模式介绍及引导修复教程 磁盘分区表格式 一般来说,磁盘分区表有两种格式:MBR 和GPT MBR 分区表在windows 操作系统下最多支持4 个主分区或3 个主分区+1 个扩展分区(包含多个逻辑分区),扩展分区必须划分为逻辑分区才能使用,1 个扩展分区可以划分多个逻辑分区 MBR 分区表不支持容量大于2.2TB 的分区(一些硬盘制造商将他们的容量较大的磁盘升级到了4KB 的扇区,这意味着MBR 的有效容量上限提升到了16 TB) 如下图是一个MBR 分区表示例:1 个主分区+1 个扩展分区(划分了3 个逻辑分区) GPT 分区表对分区数量没有限制,但在windows 系统上最多可以支持128 个主分区GPT 分区表突破了MBR 最大支持2.2T 分区的限制,貌似最大支持18EB 的分区如下图是一个GPT 分区表示例:划分了7 个主分区 BIOS 引导方式目前主要的系统引导方式也有两种:传统的Legacy BIOS 和新型的UEFI BIOS一般来说,有如下两种引导+磁盘分区表组合方式:

Legacy BIOS+MBR 和UEFI BIOS+GPT Legacy BIOS 无法识别GPT 分区表格式, 所以也就没有Legacy BIOS+GPT 组合方式; UEFI BIOS 可同时识别MBR 分区和GPT 分区,所以UEFI 下,MBR 和GPT 磁盘都可用于启动操作系统。不过由于微软限制,UEFI 下使用Windows 安装程序安装操作系统是只能将系统安装在GPT 磁盘中。 再来说说传统Legacy BIOS 和新型UEFI BIOS 引导方式的工作原理吧: Legacy BIOS Legacy BIOS → MBR →“活动的主分区”→ \bootmgr→ \Boot\BCD →\Windows\system32\winload.exe 传统Legacy BIOS 引导windows 操作系统时,是通过一个活动的主分区下的bootmgr(启动管理器)文件导入根目录下boot 文件夹里的BCD(启动设置数据)文件,然后BCD 文件根据自身的配置内容加载系统启动文件winload.exe (位置:根目录 \Windows\system32\winload.exe)来启动系统。 一个BCD 文件可以加载多个系统启动文件从而实现引导多个系统的启动通过EasyBCD工具看以看到BCD 文件的内容,如下是我的win8.1 和win10 两个系统的BCD 内容: 我的windows 8.1 在C 盘,winload.exe 位置:C: \Windows\system32\winload.exe 我的window 10 在G 盘,winload位置:G: \Windows\system32\winload.exe 通过BCD 来加载不同 位置的winload.exe 来实现这两个系统的启动

macbook OS和WINDOWS双系统引导修复

起因 在通过Boot Camp安装完Win8之后,发现只有一个分区,就在Win8的磁盘管理中通过“压缩卷”功能对当前系统分区操作,扩展了一部分未使用的容量出来,于是在重启系统之后发现引导界面中“Macintosh HD”引导项不见了,在一番折腾之后(貌似是合并刚刚扩展出来的空闲空间)我把“Recovery HD”也弄丢了。。。 现象 尝试着回忆之前做过的操作,并试着修复,不过失败了,把当前情况记录如下: 在Windows系统下可以正常加载OS X分区(Boot Camp驱动已装),分区类型显示为HFS(右键该分区,查看属性)

?在第一次重启时仍可看到“Recovery HD”,进入“Recovery HD”后,OS X 分区显示为:disk0s2,分区类型显示为:“MS-DOS”(也或许是“MS-FAT”之类,此部分为回忆,细节已忘) 分析 既然分区内数据都在,并且在Recovery环境下显示的分区类型有误,猜想可能跟分区表/ 写得太好了,解答了我以下几个问题: ?磁盘分区表目前主要有两种:MBR 与GPT,并且把GPT 的结构大概读了下 ?OS X 的磁盘分区结构 ?Mac 引导系统的过程 ?如果同时存在MBR与GUID,那么EFI会读取哪个分区表?(既混合分区,帖子里有细说) 于是我决定记录下这个问题,自己的思考以及最后如何解决问题的,并分享出来。 在了解了帖子中的大部分概念后,这个情况就感觉清楚多了,那么我需要解决这几个问题: 1.如何确定磁盘所使用的分区表类型(MBR or GPT) 2.如何查看某个分区的GUID(是否是OS X分区的GUID变更导致引导时找不到此系 统) 3.如何更改分区类型ID(如果是,那么我需要重新设置这个分区ID)

系统引导菜单自动修复工具(中文帮助文档)NTBOOTautofix v2.5.7

NTBOOTautofix v2.5.7NT系统引导菜单自动修复工具 (简繁英三语版中文帮助文档) 免责声明: 本软件为免费软件,作者对使用本软件而给用户带来的任何损失不负任何责任。如不同意本免责声明,你必须立即删除本软件。 -------------------------------------------------------------------------------- 更新概述: v2.5.7:修正v2.5.6在win8中运行时把系统错认为winPE而不进行修复的BUG。 v2.5.6:修正win8部分情况下winRE不能修复的BUG,增加一种少见的系统环境的修复支持。 v2.5.5:修正v2.5.4修复后主引导菜单为英文的一个BUG。 v2.5.4:一些不常用功能的修复结果上小修改。 v2.5.2:初步支持EFI的GPT磁盘系统。 v2.5.1:更换NTLDR文件以减少软件体积,修正修复WES7系统时可能发生的一个BUG。v2.4.6:错误修正 - 修复OSLetter的一处错误;繁体高级菜单2和3位置错误 v2.4.3:增加繁体支持,添加BCD修复区域设定,增强查看/管理BCD功能 v2.2.9:增加对Win8的WinRE修复;自动修复默认禁用Win8的Metro引导界面,恢复为经典的黑白引导界面 v2.2.2:去除了以前版本在使用实例中的大部分限制,更新较多,不详述 v2.0.0:NTBOOTautofix前身为BCDautofix,版本号顺延更新,但工具名因功能改变而更换,纯修复BCD的BCDautofix最新版本为v1.2.3,BCDautofix v1.1.x已经有nt5.x的boot.ini的自动生成,应属NTBOOTautofix系列。v2.0.0是更名后的第一个版本。 -------------------------------------------------------------------------------- 使用方法: * 非安装软件,直接双击运行,傻瓜式修复,可运行于32位和64位系统和WINPE系统* "自动修复"自动判断和系统引导有关的条件并自动修复程序支持的盘符上的NT系统引导,无需用户手工干预 * "高级"只供特殊需要的朋友,参看下面应用实例中的更改活动分区盘符后修复 * 由于不少PE使用各种手段调整了系统默认盘符,程序未必准确判定活动分区,所以在PE中修复时推荐使用"高级"再选定活动分区后进行修复,如在PE中进行过调整/重分区操作,推荐重启后再使用本工具 * 默认禁用windows8的Metro引导菜单(v2.2.9开始),如需恢复Metro引导菜单, v2.5.2的两种方法操作: 方法1. “高级”,“查看/管理BCD引导配置”,管理 Windows8,把bootmenupolicy 这一行值修改为Standard - Metro引导开启(如本来为Standard则修改两次),再点击“默认”。 方法2. 手动修复,只开启METRO引导并修复Windows8,其它系统跳过修复。 * Win8多系统时推荐在Win8中关闭快速启动或管理员身份运行命令提示符后执行Powercfg -h off关闭休眠以免出现引导菜单冲突 * 没关闭休眠功能时,在Win8中修复后会出现无法关机,重启一次即可

linux开机启动grub解决方法

装了windows和linux双系统,突然开机后没有出现启动菜单,而是出现了 [ 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>; 在这种情况下怎么进入windows和linux系统呢? 进入windows,进行如下操作: grub>root (hd0,0) //第1块硬盘的第一个分区C grub>chainloader (hd0,0)+1 //加入链 grub>boot //即可进入windows系统 进入linux,进行如下操作: grub>root (hd0,6)//这里的6表示的是我机器上linux系统/boot所在的分区号,具体数值取决于自己实际情况 grub>kernel /boot/vmlinuz-2.6.27.5-117.fc10.i686 ro root=LABEL=/ //vmlinuz-2.6.27.5-117.fc10.i686是可执行的Linux内核,位于/boot目录下,内核版本不一样,这个文件也不一 样,所以具体文件名取决于自己实际情况 grub>initrd /boot/initrd-2.6.27.5-117.fc10.i686.img //initrd-2.6.27.5-117.fc10.i686.img是初始化linux的镜像,位于/boot目录下,内核版本不一样,这个文件也 不一样,所以具体文件名取决于自己实际情况 grbu>boot //即可进入linux系统 以上方法虽然可以进入系统,但是每次开机都要输入这些命令。解决方法就是重新将grub写入mbr,使得开机后启动菜单能够出现。

引导丢失windows7开机不能进系统修复方法

写在最前面: 经常有些TX在开机之后发现进不了系统,电脑屏幕上面只显示一行英文字母"bootmgr is missing",这种情况就是属于系统引导丢失的范畴,今天和大家分享一下修复系统引导的分享。 首先这个方法本身不难,他其实就是硬盘安装win7或者vista方法的一个变种。整个过程需要只需要鼠标操作以及输入一行命令即可。同样的,想干掉预装系统自带的100M的分区的同学也可以参考次方法(实施的时候一定记得看备注) 说明:由于要编辑帖子,我实在win7系统下做演示的。实际操作的时候,由于进不了系统需要在pe下修复。因此在后面说明中,win7系统盘的盘符我会用x:表示 首先将附件中的boot.rar(点击下载)文件,复制到win7系统盘x(pe下win的系统盘盘符不是C,要仔细注意),并解压到x盘的根目录。解压后x盘根目录应该有下图中红色框框标识出来的文件。 2011-8-5 15:19 上传 下载附件(62.4 KB) 同样的,再将附件中的bootsect.rar文件bootsect.rar(35.63 KB, 下载次数: 92) ,解压到X盘根目录。

下面,按win键+R→输入cmd→回车在弹出的对话框中输入下列命令 1.x:\bootsect /nt60 x: 复制代码 注意命令中的空格以及斜线的方向。 输入命名之后按回车,在几秒钟之后,如果收到的提示中含有successfully,那就代表引导已经修复成功。下面就可以重启看见熟悉的启动画面了。 含有100M隐藏分区的TX修复引导或者想干掉100m分区的TX请继续看2L备注 备注 ok,提到100M的隐藏分区,就设计到关于硬盘分区的一些基本概念,有兴趣的可以参考我的另外一个帖子:https://www.360docs.net/doc/759327172.html,/thread-1675491-1-1.html 具体的操作步骤如下。 在存在100M的隐藏分区情况下,win7系统是处于非活动状态,不能作为启动分区。因此,在用bootsect重做引导之后,还需要修改分区的活动状态。 修改方法多种多样,利用diskpart命令也可以用分区软件。这里介绍一种WinPm软件的修改方法,其他软件也是类似。 在WinPm下,右击想要设置成活动状态的分区,点击设置活动(不同软件,可能会显示成激活分区),就ok。

双系统启动菜单修复方法

NTBOOTautofix v2.0.2 (091217) - NT系统启动菜单自动修复工具 (中英版) 中文帮助文档 最新版本请关注网盘:https://www.360docs.net/doc/759327172.html,/chzhlh --------------------------------------------------------------------------------------------------------- 更新概述: -------- v2.0.2: 发现v2.0.1中的画图指令在一些系统中无法运行,更换写屏方案 PS:v2.0.1写屏出错时按取消后不影响修复效果,v2.0.0没有这个问题 v2.0.1: 去除v2.0.0启动菜单中的in 0:1提示,直接以"Microsoft Windows Server 2003 x86"形式修复 PE中使用修改:改用自动修复优先,当多硬盘工具无法判断PE类型时才自动出现本地硬盘盘符选择 "高级"菜单盘符由v2.0.0的8个增至24个(C - Z) 修正v2.0.0特殊情况下的生成多余BCD备份的情况 v2.0.0: NTBOOTautofix前身为BCDautofix,版本号顺延更新,但工具名因为功能改变而更换,本来应该从BCDautofix v1.1.0 开始就更名的,纯修复BCD的BCDautofix最终版本应该算是v1.0.5,其v1.1.0已经解决了nt5.x的boot.ini自动生成。目前还没 有发现有其他自动正确生成boot.ini的win中运行的工具。v2.0.0是更名后的第一个版本,NTBOOTautofix相对于BCDautofix完 善的部分甚多,不止boot.ini部分,BCD部分完善部分也很多,所以更名后的首版本v2.0.0就不作详细的更新说明了 使用方法: -------- 非安装软件,直接双击运行,傻瓜式修复,可运行于32位和64位系统和WINPE系统 程序根据当前系统non-Unicode设置自动显示中/英界面 "自动修复"自动判断和系统启动有关的条件并自动修复程序支持的盘符上的NT系统启动,无需用户手工干预 "高级修复"只供特殊需要的朋友,参看下面应用实例中的高级修复部分 PE中自动判断PE环境,单硬盘可以直接"自动修复",如多硬盘在PE中修复时推荐使用"高级"修复选择你作为系统引导的盘符 适用范围: -------- 1. 启动菜单/启动文件丢失修复: 适用所有NT5.x(2000/XP/2003)和NT6.x(Vista/2008/Win7/2008r2) 2. 修复其他因BCD相关引起的故障 a. Win7/2008r2中 BCD 的修复计算机(Windows Recovery Environment)菜单丢失 b. Win7/2008r2中 BCD 引起的3D启动画面丢失(变成VISTA滚动条启动画面)

双系统启动修复方法(精)

以下内容摘自 https://www.360docs.net/doc/759327172.html,/hoxolo123/blog/item/70c1b22a733b1c21d42af1c3.html,我本人仅用过bcdboot这个命令,其他的没用过。 Win7:双启动引导修复问题一:原系统xp,在C盘。ghost安装win7到D盘。显然,D盘的win7没有引导,需要手动修复。修复方法【内为注释】: 1. 进入C盘xp,运行cmd进入xp命令行模式。输入 d: cd d:\windows\system32 bcdboot d:\windows /l zh-cn /s c: 运行上述命令后,在C 盘根目录生成了\boot文件夹和bootmgr文件。【D盘下已经具备了一个完整的win7,唯一欠缺的是系统盘内的引导,因此首先要在C盘重建win7的引导环境。通过Windows7内置的bcdboot命令可以轻易做到这一点。这个命令不能修改引导记录,我用VHD验证过】 2. 去win7安装光盘,找到bootsect.exe文件(找不到就网上下载一个,注意要win7的),复制到C:\boot\文件夹。然后进入命令行: cd c:\boot bootsect /nt60 c: bootsect /nt60 c: /mbr 这个命令执行完毕后,在完成所有后续步骤之前,一定不能重启XP,否则XP将无法启动!【bootsect ——用来写win7需要的引导信息到引导记录,第一个bootsect命令把引导信息写入C盘分区引导记录,第二个bootsect命令把引导信息写入硬盘主引导记录。由于主引导记录和分区引导记录都被修改为支持bootmgr,因此XP的引导器ntldr将不能被引导,后续步骤中我们会修复它】 3. 继续在xp的命令行模式,输入 d: cd d:\Windows\system32 bcdedit /create {ntldr} /d "Windows XP" bcdedit /set {ntldr} device boot bcdedit /set {ntldr} path \ntldr bcdedit /displayorder {ntldr} /addlast bcdedit /timeout 10 【这一步,我们用bcdedit命令来给XP在bcd中重建引导项。这样通过bootmgr加载bcd中XP的引导项,进而把启动控制权交给XP的引导管理器ntldr,实现XP的启动】至此,双系统引导修复完成。上述命令中,每个命令都必须成功。有可能,bcdedit命令会返回失败信息。此时步骤3中的命令改为: bcdedit /store c:\boot\bcd /create {ntldr} /d "Windows XP" bcdedit /store c:\boot\bcd /set {ntldr} device boot bcdedit /store c:\boot\bcd /set {ntldr} path \ntldr bcdedit /store c:\boot\bcd /displayorder {ntldr} /addlast bcdedit /store c:\boot\bcd /timeout 10 ——————————————————————————————————————————————————————————————————————————————————————

win7系统损坏可以自动修复[不用重装]

win7系统损坏可以自动修复[不用重装] 尽管Windows 7(以下简称Win7)的稳定性已经非常不错,但难免遇到系统崩溃的情况,而此时很多用户还是按照老习惯和老方法,动不动就重做系统!其实你大可不必如此,利用Win7的自修复功能就可以方便、快捷地修复系统! Win7的系统维护功能已经非常强大,利用Win7的系统备份和还原功能,你甚至可以不再需要Ghost!而且Win7更加智能化,它会在你安装程序或者对系统进行重要改动的时候自动创建还原点,这样在系统崩溃后就可以保证你将系统还原到最近的一个正常状态。这一点也是Ghost最大的劣势——很多人是Ghost一次就再也不去维护,而如果时间久了,那么利用Ghost恢复的系统也将面目全非。 此外,常见的系统问题也都可以用Win7的WinRE功能来修复而不需要重新安装系统,如果你还像以前那样遇到问题就重装,那只能说你还不了解Win7,相信看过本文大家会有新的认识。 注:Win7的维护功能需要开启系统的备份还原功能,强烈建议开启它,它不会占用多少系统资源,而带来的好处是很多的。 一般问题启动修复绰绰有余 Win7的系统修复功能是很智能的,很多时候根本不用用户太多的干预。例如由于非法关机而引起的小问题,当再次启动系统时就会进入“Windows错误恢复”界面,光标默认

停留在“正常启动Windows”选项上并开始倒计时。很显然,系统本身已经允许你正常启动,而问题已经自己修复了。 此外,由于操作不规范或者硬件的改动而造成的系统文件被破坏或者配置文件不正确,都有可能导致系统无法正常启动。此时系统再次启动,同样会出现“Windows错误恢复”对话窗。提示窗口中有两项内容可选,默认会停在“启动启动修复(推荐)”项(如图1所示)。显然,Win7是希望用户选择“启动修复”选项对系统进行修复。 经过测试,如果选择“正常启动Windows”,系统一样可以正常启动。不过这样可能会产生一些不可预知的问题,所以为了系统的稳定,建议大家还是多花一点时间,启用系统的修复功能。 启动系统的“启动修复”功能后,系统将自动进行修复而不需要你操作,修复完成后如果提示“请重新启动计算机,以完成修复”,那么重启后就可以恢复正常了(如图2所示)。如果提示“系统修复无法自动修复此计算机”,那就要使用更高级的工具来进行修复了。什么更高级的工具?别急,我们慢慢来了解。 无法启动系统还原出手相救 如果“启动修复”功能也无法解决问题,系统还是不能正常启动,那就需要“系统还原”出手相救了!

电脑开机显示grub,

在使用Linux的过程中,大多初学者都遇到过系统启动到“grub>”提示符后就停止不前的问题,功夫不深的爱好者可能会束手无策,转而选择重装系统,其实这只是系统出现了一点小问题,既系统的GRUB配置文件出现了故障,此时可以采用以下两种方案来解决问题: 1)存在GRUB配置文件备份 如果存在GRUB配置文件备份,则可以比较简单的进行恢复,可以按如下方法进行: 使用光盘引导机器,进入到“linux rescue”模式,即系统维护模式;在提示符”sh#”下执行cp命令,将备份文件拷贝到/boot/grub.conf即可 Sh#cp /backup/grub.conf.bak /mnt/sysimage/boot/grub/grub.conf 假设备份文件为/backup/grub.conf.bak,因为大多数Linux光盘修复模式中会将硬盘系统的”/”分区chroot到 “/mnt/sysimage”处,所以拷贝的目标为“/mnt/sysimage/boot/grub/grub.conf”,而非“/boot/grub/grub.conf”。 完成后重新启动即可。内核文件、镜像文件、/boot目录等文件损坏或丢失,也可以使用此种方法修复。 2)如果没有GRUB配置文件备份 如果没有备份文件时可以使用grub的交换功能,可以在”grub>”命令行下进行以下操作以手动启动系统: 查找/boot/grub/grub.conf分区所在的目录: grub> find /boot/grub/grub.conf (hd0,0) 需要注意的是,上述命令将得到的是grub.conf配置文件所在的系统的分区,(hd0,0)即表示它在分区hda1 查看grub.conf文件错误使用如下的命令: grub> cat (hd0,0)/boot/grub/grub.conf 需要注意的是,可以查看配置文件到底什么地方出现了错误,以便进入后修改。 指定/boot分区使用命令:root (hd0,0) 从此步骤开始,即为本文前面提到的GRUB配置文件的主要引导步骤,只是一般都是系统读取GRUB配置文件,出现问题时我们可以使用手动启动。 指定内核加载的命令:kernel /boot/vmlinuz ro root=LABEL=/ 指定镜像文件所在的位置可用如下命令:initrd /boot/initrd-2.6.24-1.3194.fc7 从/boot分区启动可以使用如下命令:boot (hd0,0) 此时系统即可正常启动,实际上以上步骤就是执行了GRUB引导期间加载grub.conf文件的步骤,当系统正常启动后将GRUB配置文件修改正确后即可。

关于系统引导及激活失败的修复问题

关于系统引导及激活失败的修复问题 一般出现这种问题的原因很多, 1.有可能就是win7激活重启后就出现这种(我遇到过两次了)这种就是激活软件的问题。 2.有可能是病毒等等杀毒什么玩意的吧引导文件破坏了,或者引导文件丢失。 出现以上的情况,俺总结出来了几个方法,首先处理这种问题一般都要进去操作,所以要用到pe系统或者系统光盘。 PE系统的方法“ 这种首先要做的就是把bios里面的sate模式给更改一下,以便PE能够识别出硬盘分区信息等。一般笔记本和新店的台式机都需要更改(把SATA模式的ACHI更改一下就行了)。 进入pe后,能够看到硬盘信息这些了。 实验环境:windows 7 sp1 为了实验windows 7下的Bitlocker技术(驱动器加密),将C盘加密后,系统自己建立了一个额外的100M的隐藏分区。实验完成后,将此分区格式化,合并入C盘,至此问题出现,提示“bootmgr is missing”系统无法引导了。 后来发现,将C盘加密后产生的100M隐藏分区是用于存储系统引导文件的分区,格式化后,引导文件被删除了,自然无法引导。 用PE盘引导进入PE,利用BCDboot命令即可轻松的恢复引导文件。BCDboot是一种用于快速设置系统分区或修复系统分区上的启动环境的工具。系统分区是通过从已安装的Windows(R) 映像复制一小部分启动环境文件来设置的。BCDboot还会在系统分区上创建引导配置数据(BCD) 存储,该存储中包含一个新的引导项,可让您引导到已安装的Windows 映像。 Bcdboot - Bcd启动文件创建和修复工具。 bcdboot.exe 命令行工具用于将关键启动文件复制到系统分区以及创建新的系统BCD 存储 bcdboot [/l ] [/s ] [/v] [/m [{OS Loader ID}]] source 指定windows 系统根目录的位置。 /l 指定在初始化BCD 存储时使用的可选区域设置参数。 默认值为“简体中文”。 /s 指定一个可选的卷号参数,该参数用于指定要将启动环境文件复制到 的目标系统分区。默认值为固件标识的系统分区。 /v 启用详细模式。

利用Windows 7安装光盘的启动修复功能自动解决Windows 无法启动的问题

利用Windows 7安装光盘的启动修复功能自动解决Windows 无法启动的问题 1、插入Windows 7光盘并从光驱引导进入安装界面 2、当屏幕显示到“Press any key to boot from the CD”时,按下任意键,以便从光盘引导。 3、此时出现输入语言和其他首选项的设置,一般保留默认然后单击“下一步”继续 4、进入安装Windows 界面后单击左下角的“修复计算机”

5、接下来系统会搜索当前安装了哪些Windows 操作系统,并显示其安装分区的盘符和分区的容量大小(注:如果未列出您的操作系统,请单击“加载驱动程序”,然后安装硬盘驱动程序)找到并选中所需修复的Windows 7 所在分区,然后单击“下一步”按钮。 6、现在来到了标题为“系统恢复选项”的页面,以下列出了Windows 启动问题的各项恢复工具,而我们现在要用的是名为“启动修复”的功能,该功能可以自动解决Windows 无法启动的问题 各个恢复选项的作用 系统恢复选项描述 启动修复修复可能会阻止Windows 正常启动的某些问题,如系统文件缺失或损坏。

系统还原将计算机系统文件还原到一个早期的时间点,而不会影响您的文件(例如,电子邮件、文档或照片)。 如果从“系统恢复选项”菜单使用系统还原,您将无法撤销该还原操作。但是,可以重新运行系统还原,选择其他存在的还原点。 系统映像恢复您需要预先创建系统映像才能使用此选项。系统映像是一个个性化的分区备份,其中包含Windows、程序和用户数据(如文档、照片和音乐)。 Windows 内存诊断工具扫描计算机内存中的错误。 命令提示符高级用户可以使用“命令提示符”执行与恢复相关的操作,也可以运行其他命令行工具来诊断和解决问题。 7、这时启动修复检查程序正在按照预先设定的顺序,依次查找可能导致启动故障的原因并尝试修复问题

如何修复Win7 Win8双系统的开机引导菜单

如何修复Win7/Win8双系统的开机引导菜单 考虑到Win8的稳定性和兼容性,相信很多人都是装的Win7与Win8的双系统,但是大家装了以后就会发现引导菜单会带来很多问题。为了更好的帮助大家,在这里把遇到的情况和大家分享一下,写这篇文章是为了能够帮助更多人少走弯路,文章内方法均以亲测。该方法适用于Win8目前为止全线产品。 首先说说可能的两种情况: A.先装Win7,再装Win8 不良后果: 1.开机后Win8是默认系统,如果选择Win7,势必会重启再进入Win7 2.Win8一旦奔溃,没有系统盘引导,连Win7也无法进入 分析原因:众所周知,Win8里面引进了快速启动这项功能,官方给出的说法是将一部分系统启动所需的信息储存在一个文件里,开机后直接调用,就会节约很多时间。但是其实纠其本质,其实就是休眠。所以这就是为什么metro的引导菜单是在Win8图标显示以后出现,而不是在这之前出现,因为默认快速启动是打开的,那么开机后是不会直接读取引导,而会先进入系统,如果把引导菜单放在Win8启动前,那么就会直接跳过。 解决方法: 1.原理就是把metro的菜单修复成开机就启动的普通菜单。我个人用的是BCDautofix v1.23(BCD),当然你也可以使用Win7的bootsect来修复。你可以在Win8修复,但是事实证明Win8下使用,有一定机

率会出现假关机现象,电源指示灯不灭,敲一下键盘就又回到登陆界面了,原因应该就是快速启动这项功能的本质造成的。所以建议大家还是先进Win7修复,自动修复完成后可以运行msconfig指令进入系统配置的引导标签下修改默认系统和等待时间。 至于操作系统的显示文字你可以自己在Win7优化大师里改,这个需要netframework3.5环境,我的Win8里装了3.5,没有装的孩子可以在Win7下运行,修改操作系统显示文字,我修改的是Windows8和Windows7,显示简洁,上下顺序可以调整,我的是把Windows8放在上面的。 这样就基本完成了,然后进入Win8,按win+X使用管理员权限运行命令提示符,输入指令powercfg -h off,或者去控制面板的电源选项里手动关掉快速启动,因为只有这样才是真正的关机,才会显示Win8图标前的引导菜单。不然还是会直接进入Win8,不显示引导。其实关掉也没啥,只是慢10秒左右,总时间大概30秒左右,不会有太大影响,但是Win7的启动就不用重新启动一次了,而且需要的时候再去控制面板打开或者运行powercfg -h on也行。 2.Win7下以管理员身份运行cmd(by Vista小学生),输入: bcdedit /export c:\bcd_backup bcdedit /default {current} bcdedit /displayorder {current} /addfirst bcdedit /timeout 30 B.先装Win8,再装Win7 解决方法:相对好解决的多,只要把Win8设成默认启动项,然后和A情况一样关掉Win8系统快速启动就可以了

重装Win7后恢复grub引导

重装Win7后恢复grub引导 一、在Win7中建立Ubuntu的引导 1.在win7下安装easyBCD 2.1,新建ubuntu启动项,具体如下: 打开软件,如图 选择Add New Entry项,再选择Linux/BSD标签,Type项选为GRUB2,Name可以自己定义什么都可以。然后点Add Entry。 2.在Edit Boot Menu里,调节启动项显示的时间,不要还来不及选就跳过去。

3.Ubuntu启动项添加完毕,再重启时win7启动项会先出现。 二、在grub rescue中恢复grub引导(此步可跳过,视具 体情况而定) 1.先使用ls命令,找到Ubuntu的安装在哪个分区: grub rescue>ls 会罗列所有的磁盘分区信息,比方说:(hd0,1),(hd0,5),(hd0,3),(hd0,2) 2.然后依次调用如下命令: X表示各个分区号码 grub rescue>ls (hd0,X)/boot/grub 如果都找不到的话,需要查一下是否因为Linux版本差异,造成grub的路径不对,例如直接ls(hd0,X)/grub等等。

3.假设找到(hd0,7)时,显示了文件夹中的文件,则表示Linux安装在 这个分区。 4.调用如下命令: grub rescue>set root=(hd0,7) grub rescue>set prefix=(hd0,7)/boot/grub grub rescue>insmod /boot/grub/normal.mod 5.然后调用如下命令,就可以显示出丢失的grub菜单了。 grub rescue>normal 不过不要高兴,如果这时重启,问题依旧存在,我们需要进入Linux中,对grub 进行修复。 三、在Linux中修复grub 6.进入Linux之后,在命令行执行: sudo update-grub sudo grub-install /dev/sda (sda是你的硬盘号码,千万不要指定分区号码,例如sda1,sda5等都不对)7.重启测试是否已经恢复了grub的启动菜单?恭喜你恢复成功!

linux grub 引导启动过程详解

linux grub 引导启动过程详解 2008-01-08 17:18 这几天看了很多文档,算是对linux的启动过程有了比较细致的了解. 网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的 细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux启动过程, 不涉及内核,但是我觉得比较详细哦. (由于本人比较懒,这一段是从网上抄的) 机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘 设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查 软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设 备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区, 寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader. linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB( GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。那么启动的时候grub是如何被载入的呢 grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都 在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤: 1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上用du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是107520 bit. 2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能, 以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。由于stage2很大,所以它一般位于文件系统之中(通常是boot所在的根 分区). 上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看, fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统 有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这 时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5 的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5. 下面是我的试验: #mkfs.ext2 /dev/fd0 #mount -t ext2 /dev/fd0 /mnt/floppy #cd /mnt/floppy #mkdir boot #cd boot #mkdir grub (以上三步可用mkdir -p boot/grub命令完成) #cd grub #cp /boot/grub/{stage1,stage2,grub.conf} ./ #cd; umount /mnt/floppy

相关文档
最新文档