1.windows linux双系统引导备份与恢复 2.Linux和Windows双系统Grub丢失恢复

来源:互联网 发布:中世纪西班牙 知乎 编辑:程序博客网 时间:2024/05/20 16:37


1.windows linux双系统引导备份与恢复

1.先安装Windows后再在另一个分区安装Linux,那么一般可以实现双系统启动.

2.先安装Linux再安装Windows,那么Windows会把Linux的启动破坏掉,要用Grub修复才能实现双系统的启动.
3.不管现在是什么分区,在安装过程中你选择在哪个分区安装,那么就会把那个分区格式化成所安装系统的文件格式,windows会格式化成Fat32或ntfs,而linux会把它格式化成Ext3,这都是在安装过程中实现的.不用你在安装之前先格式成那种格式.
尺有所长, 寸有所短. 虽然能完全用Linux工作, 娱乐. 但计算机只是为人类服务的. 怎么方便怎么来, 操作系统亦然, Linux和Windows都给装上.   

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

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

  先补充一下基础知识: 理解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)

  备份MBR:   

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

  恢复MBR:   

  # dd if=/boot/boot.NNNN of=/dev/sda bs=446 count=1   
(if是input file,输入文件。of是output file,输出文件。bs,block size,是每个block大小。count是总共有几个bs的意思)
  -为什么不是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... 研究起来是比较有意思的.


2.Linux和Windows双系统Grub丢失恢复

        当我们每次要重装WIN的时候,MBR都会被重写,这样原来的GRUB或LILO就会不见了,或者由于某些原因使得原来的GRUB不见了,这个时候只要重装GRUB就行了。
GRUB的重装方法有很多,这种方法不行,换一种试下:

1.用安装光盘启动,选升级安装,再只选安装GRUB行了。

2.用安装光盘启动,到BOOT那里输入linux rescue也就是进入救援模式,到出现#命令提示符时,输入chroot /mnt/sysimage,然后再输入grub-install /dev/hda,搞定...

3.没有软驱如何修复grub/lilo引导菜单?

 a.把第一张linux安装盘里的dosutils目录复制到windows盘中。如果是iso可以用winrar3提取。
 b.进入纯dos,进入dosutils目录,执行loadlin autoboot/vmlinuz root=/dev/hdxx()hdxx是你的linux根分区。这样就能进入linux。
 c.执行grub-install /dev/hdx(x=a,b,c,d) 或lilo即可以重写引导。

4.如果你用grub来引导linux和windows,当windows出毛病重新安装后,会破坏MBR中的grub,这时需要恢复grub。

  a.把linux安装光盘的第一张放到光驱,然后重新启动机器,在BOIS中把系统用光驱来引导。
  b.等安装界面出来后,按[F4]键,也就是linux rescue模式。
  c.一系列键盘以及几项简单的配制,过后就[继续]了。。。这个过程,我不说了,比较简单。
  d.然后会出现这样的提示符:
  sh#
  e.我们就可以操作GRUB了.输入grub:
  sh#grub
  会出现这样的提示符:
  grub>
  我们就可以在这样的字符后面,输入:
  grub>root (hdX,Y)
  grub>setup (hd0)
  如果成功会有一个successful......
  这里的X,如果是一个盘,就是0,如果你所安装的linux的根分区在第二个硬盘上,那X就是1了;Y,就是装有linux系统所在的根分区。 setup (hd0)就是把GRUB写到硬盘的MBR上。
  另外说下,有人说我没安装光盘啊?我是从硬盘安装的.呵呵,那你的ISO文件还在吧..那再来次硬盘安装进入安装界面也是一样的....

5.如何把GRUB或LILO删掉?

  只要在DOS下执行FDISK /MBR就行了...
  如何配置grub?
  修改/boot/grub/grub.conf文件。其中
  “default=n”(n是个数字)是grub引导菜单默认被选中的项,n从0开始,0表示第一项,1表示第二项,依此类推。
  “timeout=x”(x是一个数)是超时时间,单位是妙。也就是引导菜单显示后,如果x秒内用户不进行选择,那么grub将启动默认项。
  “splashimage =xxxxxx”,这是引导菜单的背景图,先不理他。
  其它常用项我用下面的例子来说明:
  title Red Hat 8.0
  root (hd1,6)
  kernel /boot/vmlinuz-2.4.18-14 ro root=/dev/hdb7
  initrd /boot/initrd-2.4.18-14.img
  其中"Red Hat 8.0"是在启动菜单列表里显示的名字
  root (hdx,y)用来指定你的boot分区位置,如果你没有分boot分区(本例就没分boot分区),那就指向根分区就行了,hdx是linux所在硬 盘,hd0是第一块硬盘,hd1是第二块,依此类推。y是分区位置,从0开始,也就是等于分区号减一,比如你要指向的分区是hdx7,那么y就是6,如果 是hdx1,那y就是0。注意root后面要有一个空格。
  kernel /boot/vmlinuz-2.4.18-14,其中"/boot/vmlinuz-2.4.18-14"是你要用的内核路径,如果你编译了心内核,把它改成你的新内核的路径就行了。
  ro就不用管,写上不会有错。
  root=/dev/hdxx指定根分区,本例是hdb7,所以root=/dev/hdb7
  initrd xxxxxxxxxxxxx这行不要也行,目前我还不清楚它是做什么用的。
  上面是linux的,下面是windows的
  title windows 98
  rootnoverify (hd0,0)
  chainloader +1
  title xxxxxxx不用解释了,上面有解释。
  rootnoverify (hdx,y)用来指定windows所在分区,x,y跟上面一样,注意rootnoverify后有空格。
  chainloader +1照抄就行,注意空格。
原创粉丝点击