【操作系统】解决Linux和Windows双操作系统的引导问题,7后恢复Ubuntu启动菜单的方法

装上Windows
7+Ubuntu双系统后自己重新安装了次WIN7和XP,破坏了MBR,以前备份的WIN7映像文件恢复了没用,找了很多办法都不完美,最后找到了个相对完美的解决办法。

尺有所长, 寸有所短. 虽然能完全用Linux工作, 娱乐.
但计算机只是为人类服务的. 怎么方便怎么来, 操作系统亦然,
Linux和Windows都给装上.

  已然说过,福兮祸之所依,祸兮福之所依。一个偶然的缘故,使我决定将我的MBP的内存升级到8G。然而,其实较之于内存的升级,对我而言更有必要的,应该是硬盘。320G的硬盘对于我来说,实在是太小了。所以,在决定购入一条新4G内存的同时,我也开始寻找一块大容量的硬盘。内存的选购其实是再简单不过的,我的MBP原配的就是三星的内存,而我又在韩国,除了三星也就别无选择了,因为国内出名的威刚、金士顿、海盗船等品牌在这里几乎没有。不过,说起内存,我倒是有那么一点儿的不爽,因为刚刚收到的这条新内存跟MBP里原配的内存虽然都是三星的,但是产地并不相同,PCB板的颜色也不相同,更重要的是连具体的型号都不相同。我还真是担心这两条内存不能完美兼容,不过,从暂时的测试信息反馈来看,似乎并没有这方面的问题,还需要进一步的观察才行。而硬盘的选择则颇费了许多的时间和纠结。我对于硬盘容量的追求可以说是穷奢极欲的,如果现在可以买得到1
yottabyte的硬盘,我也会毫不犹豫地买下来的,当然,要在我的承受能力之内才行。反正,后来我发现,如今最大的笔记本硬盘就是西数的1T蓝盘了,价格也不是很贵,还算比较有性价比。不过,后来在了解硬盘的评价的时候,就发现这块最大容量的硬盘质量堪忧。许多国外的网友反映硬盘容易发生故障以及在MBP下面出现Smart测试失败的现象,不免使我投鼠忌器起来。为了保险其见,我最后终于还是按捺住了对tera的欲望,退而求其次,选了一块seagate的750G。说起来,我跟seagate渊源还是颇深的,巧的是,我当年省吃俭用花大价钱买的第一块20G的seagate当时的价格正好是750元。总而言之,买了条三星的4G,又买了块seagate的750G,顺带着又买了一套45in1的螺丝刀工具套装。我的MBP升级之路也就算开始了。

就是重装Windows 7后把本帖提供的附件释放到Windows 7根目录即可。

本文中,Windows使用XP, Linux选用Ubuntu.
但其实基本思想是一样的:Linux现在流行的bootloader是grub.
xp和NT采用的是ntloader。

  原本,这一路下来,我都有拍照的,但是因为将相机忘在了家里,所以这会儿也没有办法上照片。明天有时间再另发文上照吧,应该可以一气发好几篇了。所以,今天就先不说拆机换硬盘的过程了,单说恢复数据的经历。

附件下载

Ubuntu论坛里的这篇文章主张采用这样的引导方式: ntloader -> grub ->
win/lin. 但正如有的网友所说,
grub考虑到了引导windows,而ntloader还没有考虑过引导windows之外的其他系统.
而且, 使用ntloader来引导比较繁琐. 不如使用grub引导简便.
这里我使用grub来作为bootloader.

  已然说过,我在原来的320G硬盘里面安装了Mac
OS、WIN7、Ubuntu三个操作系统,而且每个系统里面都已经安装了许多的软件,如果换了硬盘以后都重安装的话,真的会把人累得吐血身亡。所以,我的思路就是通过软件来实现分区对拷,这样可以节省许多的时间和工作量。

PS:本来这次我已经备份好了MBR和GHO,准备重装Ubuntu了再备份MBR的,没想到用上面的方法解决了,就先不去折腾了,硬盘吃不消。

先补充一下基础知识: 理解Linux的启动过程. 另外,
手头要有xp和Ubuntu的安装光盘. (Ubuntu的LiveCD,
用以挂载硬盘分区以及恢复mbr). 在开始之前, 要知道这样几个事实: (1)
PC启动时, 在加载bios之后, 紧接着就加载位于mbr中的bootloader,
这个bootloader可以是ntloader, 也可以是grub. (2)安装windows系统时,
安装程序会把ntloader写入到mbr作为bootloader. (3)grub可以被安装到mbr,
也可以安装到其他位置. 但Ubuntu的liveCD进行安装时是默认安在mbr中的.

  Mac系统本身的恢复是非常方便的,因为Mac自带的磁盘工具就有将分区备份为镜像、以及将分区恢复至其它分区的功能。我是直接将刚买回来的硬盘就装到MBP里面去的,然后将原配硬盘装到了移动硬盘盒中。本来呢,虽然新款的MBP不支持U盘启动其它的操作系统,但是苹果自家的系统却是可以启动的。但是,我怎么反复重启都不能从移动硬盘启动。后来我一想,对了,原来好像在rEFIt里面将从USB设备启动给禁用了。没办法,只好用光盘引导了,好在也不是特别麻烦。

 

这样问题就来了: 怎么才能保证双系统能正常启动呢?
如果重装了其中的一个系统, 如何保证另外一个系统不受影响呢?
这就是这里要说的问题.

  放入光盘,然后等待系统文件装载完毕,进入系统安装界面。在顶部的菜单栏选择磁盘工具,然后对新硬盘进行分区。分区之后,将移动硬盘上原来的Mac分区作为源分区,将新硬盘的某个分区做为目标分区,恢复,差不多一个多半小时,恢复完毕。重新开机,从硬盘引导,可以正常进入系统。先前安装的所有软件都在,数据跟原来一模一样,只不过,spotlight会重新搜索硬盘一遍。至此,Mac
OS恢复完毕。

操作系统 1

第一次安装

  接下来,我是准备恢复Win7的。本来之前我已经安装了Mac版的Winclone,但是这个软件不能直接双盘对拷,必要先将分区保存为镜像,然后再将镜像恢复成分区,实在是比较弱智麻烦。我在磁盘工具中看到,移动硬盘上的WIN7分区的图标是亮的,也就是说Mac系统看起来可以将WIN7也恢复到新硬盘上。我就试了试,不过,以失败告终。错误提示,两个分区的格式不一致。移动硬盘上的WIN7分区是NTFS格式的,而Mac
OS的却是HSF格式的,因此,硬盘工具不能完成恢复。那么我就想把新硬盘上的分区给格成NTFS格式呗,可是Mac
OS没有这功能,所以后来又刻了Ubuntu的盘,用Linux下的Gparted完成了分区的格式化操作。随后,再次进入Mac
OS,并重新尝试恢复WIN7分区,仍以失败告终。根本原因,应该是MacOS不支持NTFS分区。这一条路没有走通。

先安装Windows, 然后安装Linux.
采用这样的顺序不光是为了避免ntloader覆盖掉grub(就算被覆盖了,
也有解决办法, 在后面介绍), 更因为Linux可以被装在扩展分区而Windows不行.
另外, 安装linux时, grub会检测到已有的分区,
从而生成合适的启动选项来加载windows系统.

  Ubuntu分区的容量稍微小一些,所以我后来决定先恢复Ubuntu。Ubuntu的恢复要用到Clonezilla。这款软件宣称支持包括Windows、Linux、Mac
OS等众多的操作系统的备份、恢复和对拷。我本来也打算用它来恢复WIN7的,但是我原来的分区要比现在的分区大,Clonezilla不支持大分区到小分区的拷贝。所以,后来就先对拷了Linux。这个没有花多少时间,因为本身Linux容量就很小。对拷完毕后,重启电脑,选择Ubuntu,没有看到Grub的菜单界面,而是左上角只有一个光标在闪烁。Ubuntu有没有被完美恢复还不好说,但是这个时候不能进Ubuntu,却是应该的事情。因为Ubuntu引导需要的Grub原来是安装在分区的PBR里面的,而要使用PBR就必须要从MBR引导,但是我还没有恢复WIN7,当然也没有恢复由WIN7控制的MBR了。所以,最重要的还是要恢复WIN7。

要注意的一点就是文件系统, 可以采用这样的方法:
在最开始安装windows时把计划给linux用的空间分为一个区,
之后在安装Linux时将这个区删除, 然后重新创建新的多个分区. Ubuntu
liveCD已经做得很傻瓜化, 安装应该不会碰到问题。

  Mac磁盘工具不行,Clonezilla也不行,最后只好又将希望寄托在了Winclone身上。实际证明,Winclone果然比自己想象的要垃圾。费了半天的工夫备份出来一个镜像,结果居然是将整个分区的所有数据都备份,连空白数据也不放过。那自然是没有办法恢复到小分区里了。

恢复MBR

  到这里,似乎已经走入了死胡同。靠软件来实现对拷恢复应该已经没有希望了。那么,是否能够通过将数据拷贝到新硬盘分区,然后用WIN7安装光盘恢复MBR来实现手工WIN7的拷贝呢?请拭目以待。

相比Linux, Windows会比较频繁地重装, 重装之后的mbr会被覆盖,
从而无法引导linux系统. 解决整个问题只需要恢复以前的MBR.
重装Linux则不存在任何问题. 因为grub会检测到已有的windows分区.

  在寻思WIN7恢复方案的同时,意外地解决了Ubuntu的引导问题。由于Ubuntu是由PBR来实现引导的,所以实际上它根本不需要MBR的信息。那么,先前出现的Ubuntu不能启动的情况,主要原因是我在使用Clonezilla恢复Ubuntur过程中并没有恢复PBR的引导信息。那么,现在要做的,就是重新安装一下Grub2引导器就可以了。这一步可以使用Ubuntu的安装CD来实现。具体的操作方法参见:How
to Install Grub2 From Live
CD?
http://www.linuxidc.com/Linux/2011-06/37556.htm

首先备份mbr, 使用dd命令将硬盘第一个扇区的头446字节’抓’下来保存.
之后重装完windows之后再恢复mbr. 这需要用到linux启动光盘. 启动进入命令行,
挂载那个被保存的mbr文件所在的分区,
然后用dd命令恢复就可以了.(注意我的是SCSI硬盘, 所以是sda, IED硬盘为hda)

  WIN7分区的数据还在拷贝当中,究竟能否以这种方式来实现成功引导WIN7呢?只好继续拭目以待了。

备份MBR:

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

#操作系统, dd if=/dev/sda of=/boot/boot.NNNN bs=446 count=1

  经过两个小时左右的复制工作,终于将原来WIN7分区的所有数据复制到了新硬盘分区。不过,在复制的过程中,出现过若干文件不能复制的情况。但从后来的测试来看,这些文件对于WIN7的运作似乎没有太大影响。而这个复制工作,我是在Ubuntu下面进行的,虽然可能由于系统架构的原因,复制过程中可能会产生意想不到的结果,但是我别无选择。因为Mac不能访问NTFS分区,而WIN7又不能从移动硬盘引导,所以只好用Ubuntu了。

恢复MBR:

  文件复制完成后,用WIN7安装光盘修复一下系统,重启后就可以正常进行系统。进入系统中发现,资料、应用程序以及桌面的边栏设置等等都跟原来的一样。

# dd if=/boot/boot.NNNN of=/dev/sda bs=446 count=1

  但是,这个迁移的过程并不是十分完美。我在使用WIN7的过程中就发现了如下的问题:

-为什么不是512呢, 主引导扇区是一个扇区(512字节呀)?

1.开机进入WIN7的时候,总是会弹出两个记事本文件,大概跟桌面设置有关系。

-只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。

2.每个文件夹下面都会生成一些奇怪的文件,有些删都删不掉。

boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了
Linux 后改变了的硬盘 DPT 表也破坏掉。

  目前还不知道有没有什么方法可以解决上述问题,有时间继续研究。

MBR-> Main/Master Boot Record, 有些书上是写成Master的。

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

我认为可以分成三个部分吧,MBR+DPT+MagicNumber(446+64+2=512)

  决定放弃前面刚刚提到的Windows恢复方案,因为我刚刚发现硬盘的分区方式有些问题。我准备换回原来的分区方式,并且给WIN7分区更多的空间,这样我应该就可以使用Clonezilla来恢复WIN7了。

这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因.
然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复,
不是DPT的恢复. 往往MBR里面的第一个指令是cli… 研究起来是比较有意思的.

操作系统 2

References

这里可以获得免费的Ubuntu安装光盘:

相关文章】

  • Linux操作系统程序启动引导过程详细剖析

  • Linux引导过程内幕

  • 双引导Linux之技巧

, 寸有所短. 虽然能完全用Linux工作, 娱乐.
但计算机只是为人类服务的. 怎么方便怎么来, 操作系统亦然,
Linux和Windows都给装上. 本文…