补充一下基础知识: 理解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中的.

第一次安装

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

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

恢复MBR

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

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

1、认识MBR

MBR位于硬盘分区的/dev/sda上面,注意,不是sda[1-9],sda[1-9]为各个分区。

MBR的大小为512K,其中前466k为分区引导内容,而后66k为分区表内容。

2、备份MBR

dd if=/dev/sda of=/root/mbr bs=512 count=1     //备份全部的MBR

dd if=/dev/sda of=/root/mbr bs=466 count=1     //备份引导部分内容,分区表没有备份

注意:如果备份了分区表,则系统系统的分区表不得随意改写,否则会导致MBR恢复错误;要么不要备份分区表;

3、恢复MBR

dd if=/root/mbr of=/dev/sda bs=512 count=1

4、恢复分区表

dd if=/root/mbr of=/dev/sda bs=512 skip=446 count=66

从MBR的512个字节中,跳过前446个字节,将最后的66个字节写入分区表

5、恢复grub引导内容

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

-为什么不是512呢, 主引导扇区是一个扇区(512字节呀)? -只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。 boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把 512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬盘 DPT表也破坏掉. MBR-> Main/Master Boot Record, 有些书上是写成Master的. 我认为可以分成三个部分吧, MBR+DPT+MagicNumber(446+64+2=512) 这也就是为什么进行MBR备份的时候要指定bs=512 或者 bs=1k, count=1的原因. 然后恢复时经常看到HOWTO里面是bs=446 count=1. 这个446就是指令部分的恢复, 不是DPT的恢复. 往往MBR里面的第一个指令是cli... 研究起来是比较有意思的。

6、光盘引导linxu系统

插入光盘,选择rescue模式,进入shell,然后使用dd命令,将mbr写入/dev/sda。(fedoar下实验)进入shell后,不能挂在分区到/mnt上,因为那里挂载了系统分区,也就是你的shell环境,挂载/mnt和会出现部分命令无法找到和。要挂在东西可以在根目录下建立一个文件夹,然后将磁盘分区挂载在其上。

7、selinux禁用    有时候使用grub启动的时候,由于selinux的存在,会导致系统无法正常启动,这个时候就需要禁用selinux。    grub中,在kernel行加入:selinux=0(或者selinux=disable)    修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。 8、fedora的grub中meego启动项的写法    在fedora的grub中,meego的启动项的写法与fedora类似,但是有些参数却不同,在meego系统的支持的参数,在fedora的grub中不一定支持,需要有所取舍。    #if install meego without boot zone    root (hd0, y-1)    kernel /boot/vmlinuz-xxxxxx ro root=/dev/sday quiet #doesn't support "vga=current"    如果meego安装的时候选择了boot安装,即将启动项安装到boot分区中,则写法如下:    root (hd0, y) #这一选项指示boot分区所在在磁盘分区    kernel /vmlinuz-xxxxxx ro root=/dev/sdaz quiet #doesn't support "vga=current",sdaz指示系统所在的磁盘分区

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐