1.windows linux雙系統引導備份與恢復 2.Linux和Windows雙系統Grub丟失恢復


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照抄就行,注意空格。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章