作者 主題: grub 裝於次硬碟之boot sector的啟動請教  (閱讀 69562 次)

0 會員 與 1 訪客 正在閱讀本文。

洋蔥叔叔

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #30 於: 2009-05-13 11:19 »
對 GRUB 來講 BIOS 的開機順序很重要。設定第一個開機的,不管他在那個控制器,對 GRUB 來講他就是 hd0。所以你現在應該是把 Linux 所在那顆硬碟設成第一個開機對吧?
照你給的這段訊息:
引用
root (hd1,0)
Filesystem type unknown partition type 0x7
Kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crash kernel=128M@16M

Error 17: Cannot mount selected partition press any key to continue .....

partition type 0x7 是 NTFS 的分割區,所以很明顯的目前 GRUB 是把 Windows 所在那顆硬碟當做 hd1。
所以在這個狀態下當你做了 grub> setup (hd1,0) ,你已經把 Windows bootsector 給蓋掉了。
釐清一下你目前的狀況:

Windows 在 /dev/hda
Linux 在 /dev/hdb,/boot 在 /dev/hdb1, / 在 /dev/hdb2
BIOS 設由 /dev/hdb 開機
GRUB 裝在 /dev/hdb 的 MBR
GRUB 選 Windows 開不了機
BIOS 設由 /dev/hda 開機的話,Windows 還是開不了機

對嗎?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #31 於: 2009-05-13 13:56 »

所以在這個狀態下當你做了 grub> setup (hd1,0) ,你已經把 Windows bootsector 給蓋掉了。


恩,他前面有下 find 命令,但是沒貼結果。

b90220208

  • 鑽研的研究生
  • *****
  • 文章數: 557
    • 檢視個人資料
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #32 於: 2009-05-14 01:20 »
佩服佩服(是我的問題,sorry!)

不好意思,再次確認:

目前 BIOS 設定
1. ATAPI CD-ROM
2. IDE Hard Drive
3. Removable Device
4. Other Boot Device

Primary Master 的硬碟裝有 xp
Primary Slave 的硬碟裝 rhel

在第二項,我選擇 Primary Slave 那顆 (裝有linux)

引用
對 GRUB 來講 BIOS 的開機順序很重要。設定第一個開機的,不管他在那個控制器,對 GRUB 來講他就是 hd0。
那麼,我若欲安裝 grub 於此顆硬碟的 boot sector 時,照您意思應該是:
grub> root (hd0,1)
grub> setup (hd0,1)

是嗎?  ???
« 上次編輯: 2009-05-14 01:29 由 b90220208 »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #33 於: 2009-05-14 01:29 »
root 跟 setup 設哪?
不防先用 find 找出 stage1 或 stage2 在哪然後再決定。

假如你要 BIOS 直接開 GRUB,就只能放在 mbr (hd0) or (hd1),不能放在 boot sector。
當你找出 linux 所在的 hd 號碼之後,剩下那顆就是 xp 的,然後用 chainloader 指過去就是了。

洋蔥叔叔

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #34 於: 2009-05-14 11:34 »
那這樣子,你照下面的步驟做做看:

1. 修復 Windows 的 bootsector
  • BIOS 裏面開機設定 IDE Hard Drive 調成 Primary Master
  • 用 Windows XP 的 CD 開機,然後進入 Recovery Console(修復主控台)
  • Recovery Console 裏面打入以下兩個指令
    fixboot  (這個會還原 /dev/hda1 裏面的 Windows Boot Sector)
    fixmbr (這個會還原 /dev/hda 裏面的預設 Windows MBR,就是會載入 Active Partition 的 MBR)
  • 離開 Recovery Console 然後重開機,BIOS 都不要動,確認他開機就進 Windows。

2. 設定 GRUB
  • 回到 BIOS 把開機設定 IDE Hard Drive 調回 Primary  Slave
  • 開機後應該會進入 GRUB 選單,如果進不了 Linux 的話,自己手動輸入:
    root (hd0,0)
    kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crash kernel=128M@16M
    initrd /XXX (如果有的話)
  • 進入 Linux 之後,修改 Grub 設定檔 (/boot/grub.conf 或 /boot/menu.lst),讓他看起來類似下面:

    title Linux
    root (hd0,0)
    kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet crash kernel=128M@16M
    initrd /XXX (如果有的話)

    title Windows
    rootnoverify (hd1,0)
    map (hd0) (hd1)
    map (hd1) (hd0)
    chainloader +1
  • 重開機後看看是不是 Windows 跟 Linux 都可以進

上面 grub 設定檔裏面加了 map (XXX) (XXX) 的用意是,Windows 對於開機順序其實也是會挑,如果安裝時他是第一開機順序的硬碟,那當你 BIOS 設成用其他硬碟開機,他可能就開不了機。所以加了 map 指令的話,可以讓 Windows 以為 Primary Master 還是在第一順序,就跟安裝的時候一樣。
« 上次編輯: 2009-05-14 11:41 由 Demonbane »

harrier

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 1856
  • 性別: 男
    • 檢視個人資料
    • 國屬武裝兵
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #35 於: 2009-05-14 11:38 »
1.)  /dev/hda1 (c槽=整顆硬碟)
linux(rhel5) :
1.)  /dev/hdb1 的掛載點: /boot (filesystem: ext3)
2.)  grub> root (hd1,0)
      grub> setup (hd1,0) #就是/dev/hdb1

假設 BIOS 開機順序固定不動,grub 的設定應該如下:

title LINUX
root (hd1,0)
kernel /[你 /boot 下的 vmlinuz 檔案全名] ro root=[你 / 檔案系統的所在,用 /dev/hdbX 表示] rhgb quiet
initrd /[你 /boot 下的 initrd 檔案全名]

title WINDOWS
rootnoverify (hd0,0)
chainloader +1

記得 /dev/sda1 要用 fdisk 類軟體標記成 active/bootable。

試試看這樣可否運作?
...90Net(90:1200/1203),GameNET(99:700/707),ALLNet(92:9200/3111),InfoNet(30:100/103)..MaximusCBCS(浮懷),AirNet,TenderNet,StormNet,FidoNet...
<<- www.nas.vg ->>

b90220208

  • 鑽研的研究生
  • *****
  • 文章數: 557
    • 檢視個人資料
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #36 於: 2009-05-15 00:40 »
BIOS 選 Primay Slave 為開機碟
什麼都沒做,僅顛倒了 grub.conf 的原設定為(擷取如下):
title Linux
root (hd0,0)

title Windows
rootnoverify (hd1,0)
map (hd0) (hd1)
map (hd1) (hd0)

過關!

印象中好像也在鳥哥網站看到過這句: "grub 會受BIOS搜尋順序的影響" .....

請問,
同樣前提下,若欲重安 grub
若是以下二方式開機:
1.) Rescue cd (此時hd0不就變成了cd-rom??)
2.) hard disk(選linux)
當執行 grub shell 設定 root 與執行 setup 時,也是以開機碟(primary slave)為 hd0 為原則嗎?

有無工具可得知目前所有硬碟的 MBR 與 Boot Sector 的情形?
例如,由於之前亂裝了一番, grub 可能遍佈 primary master 與 slave 兩顆硬碟的 MBR 與 boot sector,
只是想全清掉重來,確定 grub 是裝在 primary slave 的 boot sector 即可.

最後請問之前..曾做過 dd if=/dev/zero of=/dev/hda bs=446 count=1 ,為何還可啟動 primary master 的 windows xp ?  ???
« 上次編輯: 2009-05-15 00:49 由 b90220208 »

洋蔥叔叔

  • 榮譽博士
  • 鑽研的研究生
  • *****
  • 文章數: 830
    • 檢視個人資料
    • 洋蔥叔叔的隨意漫談電腦、網路、.NET、軟體本地化、雜七雜八
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #37 於: 2009-05-15 11:16 »
引用
請問,
同樣前提下,若欲重安 grub
若是以下二方式開機:
1.) Rescue cd (此時hd0不就變成了cd-rom??)
2.) hard disk(選linux)
當執行 grub shell 設定 root 與執行 setup 時,也是以開機碟(primary slave)為 hd0 為原則嗎?

1) GRUB 不支援 CD-ROM,所以 CD-ROM 會被跳過。
2) 只要是 BIOS 裏面設定為第一個開機的硬碟,管他是 IDE/SATA/SCSI,對 GRUB 來講都會是 hd0。
其實 GRUB 支援用做對應表的方式,讓你自己對應 hdX 跟硬碟。比如說讓 hd0 永遠是 /dev/hda。只要製作一個 /boot/grub/device.map 檔案,內容如下:

/dev/hda (hd0)
/dev/hdb (hd1)

GRUB 載入或安裝時會依照這個檔案的來作 mapping。
但不管怎樣,你只要記住 - 在預設的情況下,BIOS 設為第一個開機的硬碟,不管在那裡,對 GRUB 來講就是 (hd0)


引用
有無工具可得知目前所有硬碟的 MBR 與 Boot Sector 的情形?
例如,由於之前亂裝了一番, grub 可能遍佈 primary master 與 slave 兩顆硬碟的 MBR 與 boot sector,
只是想全清掉重來,確定 grub 是裝在 primary slave 的 boot sector 即可.
你目前 GRUB 應該是裝在 /dev/hdb 的 MBR, 所以你是只想要把它裝在 /dev/hdb1 是嗎?
1. 先將 GRUB 安裝至 (hd0,0)
2. 用ms-sys將 Windows 用的 MBR 寫入 /dev/hda 跟 /dev/hdb 的 MBR。
ms-sys -m /dev/hda
ms-sys -m /dev/hdb
3. 確定 /dev/hdb1 是設成 active

這樣的話,硬碟的 MBR 跟 bootsector 的狀況變成如下:
/dev/hda Windows MBR
/dev/hda1 Windows bootsector
/dev/hdb Windows MBR
/dev/hdb1 GRUB

有無工具可以檢查 MBR 跟 bootsector 裏面有什麽 bootloader 我就不確定了,看其他人知不知道。
至於上面爲什麽連 /dev/hdb 都要 Windows MBR, 可以順便回答第三個問題:

引用
最後請問之前..曾做過 dd if=/dev/zero of=/dev/hda bs=446 count=1 ,為何還可啟動 primary master 的 windows xp ?
這段是將 /dev/hda MBR 裏面的開機程式碼(Windows MBR)清除。 Windows MBR 唯一會做的一件事就是載入設為 active partition 的 bootsector。
但是 GRUB 可以直接載入 partition 的 bootsector (i.e chainloader),不用經過 Windows MBR,所以這就是爲什麽你把在 /dev/hda 裏面 Windows MBR 清掉也沒關係的原因。
在 /dev/hda 跟 /dev/hdb 都有 Windows MBR 的話,這樣就算你把 /dev/hdb 拔掉,或 BIOS 設 Primary Master(/dev/hda) 開機,Windows 還是可以照常啟動。
/dev/hdb 有 Windows MBR 的時候,開機會呼叫 active partition, 就是 /dev/hdb1 裏面的 GRUB。
« 上次編輯: 2009-07-30 12:06 由 洋蔥叔叔 »

b90220208

  • 鑽研的研究生
  • *****
  • 文章數: 557
    • 檢視個人資料
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #38 於: 2009-05-17 00:30 »
Demonbane 大,
非常非常地感謝!
看來觀念清楚真的很重要,想趁休假 K 一下(練功),有無可加強這方面"基礎"的資訊,希望您不吝分享,謝謝  (所有幫過我的大大) :) :)

anderson1127

  • 訪客
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #39 於: 2009-07-30 11:49 »
建議版主將此篇討論納入精華區 ...

尤其是洋蔥叔叔 老大的說明真是清楚 , 也讓小弟觀念一下子更為清楚 !!
(原本只是知道一個大概而已)

之前因為一些因素,無法使用Fedora Core 6以上的install DVD來安裝在AMD 780G chipset 主機板
只能夠用Fedora Core 6安裝在AMD 780G chipset MB上,可是會找不到SATA硬碟(driver問題)

所以只好用土法煉鋼,將原本Fedora Core 6的OS SATA硬碟上的Feodra Core 6 Linux進行移轉
這次測試是從160G SATA硬碟移轉到320G SATA硬碟, 兩者的root partition都不一樣,所以要修改
grub.conf 及 /etc/fstab 檔案 !!
(Kernel Recompile in 2.6.22版 , 專門給GA-MA690G-S2H[AMD chipset 690G]使用)

之前敢做的大都是相同的HD partition號數移到另一棵相同的partition號數,這次試著給它換到不一樣的
號數 , 原本是安裝於A HD Partition 1(切20G給它當做root partition) , 移轉後安裝於B HD Partition 2
然後帶入洋蔥叔叔 大的說明,來做試當的修改設定!!

接著土法煉鋼,將A HD的root partition file system一個一個copy到B HD partition 2
當然也注意到了 grub.conf的修改以及 /etc/fstab的修改 !! 還有從 ext2 filesystem轉換成ext3
移轉完成後,移到AMD 780G主機來試著開機...

成功!! 又完成一件AMD 780G主機板可以順利使用Fedora Core 6的OS ...

harrier

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 1856
  • 性別: 男
    • 檢視個人資料
    • 國屬武裝兵
回覆: grub 裝於次硬碟之boot sector的啟動請教
« 回覆 #40 於: 2009-07-31 09:49 »
但不管怎樣,你只要記住 - 在預設的情況下,BIOS 設為第一個開機的硬碟,不管在那裡,對 GRUB 來講就是 (hd0)

IBM PC 開機的裝置,BIOS 給予的裝置編號是 0x80,然後依序為 0x81、0x82...
我們若直接調整 BIOS 中的開機順序(後來的 BIOS 才有這功能..對我們這些老人而言),BIOS 就是去修改這個機值。
這邊有古老的文件可供參考:
http://www.linux.org/docs/ldp/howto/LILO-6.html
http://tldp.org/HOWTO/MultiOS-HOWTO-6.html
http://www.pcguide.com/vb/archive/index.php/t-12676.html

BIOS 完成它的程序後,GRUB 接手,此時 BIOS 就是把 ID 被稱作 0x80 的磁碟,告訴 GRUB "這是你的 hd0",
然後接著就是 GRUB 的程序了。
...90Net(90:1200/1203),GameNET(99:700/707),ALLNet(92:9200/3111),InfoNet(30:100/103)..MaximusCBCS(浮懷),AirNet,TenderNet,StormNet,FidoNet...
<<- www.nas.vg ->>