酷!學園
精華區 => 酷!學園 精華區 => 主題作者是: b90220208 於 2009-05-08 09:11
-
1.
xp 先安於 hda
linux 後裝於 hdb, 而 grub 安裝時選擇裝於 boot sector 而非 MBR
--> 如何啟動 linux ?
2.
之後採取如下動作:
dd if=/dev/zero of=/dev/hda bs=446 count=1
linux-rescue mode 下作 grub-install /dev/hda
--> 重開機後於grub選單選windows,但無法啟動...請問這是哪兒出了問題?
-
spfdisk 做完後,與grub一樣的結果,windows還是無法開機...
看了一下鳥哥的網站,我的理解若有錯誤還望指正:
因為我後來將grub裝於hda的MBR,所以開機會以grub為首個 boot loader 並調選單供 user 選擇.而若是我選擇 xp 開機,則 grub 會轉交控制權給另一個 loader(即xp的loader)去啟動 xp.
換句話說,我硬碟的 xp 的 boot loader 可能已損毀....若真為如此,不知有何解決之道?
-
上面的 dd 已經將 hda 的 mbr 摧毀了。
直接將 grub 裝到 mbr 就好了,不需要用 spfdisk ,用 rescue disk 進去跑 grub 安裝就好。
-
感謝 netman 大! :)
不好意思,可我現況就是已經在 linux-rescue mode 下作過 grub-install /dev/hda
xp啟動不了(僅到出現F8畫面),此動作不就是將GRUB安裝到MBR,難道是我誤解了?
不知 windows boot loader 可否重安裝?另外請教如當我們安裝windows xp時其loader預設是否僅安裝到hda的MBR中?...若是,那隨後在裝linux時,若grub亦裝於hda的MBR,那豈不是會覆蓋掉windows boot loader,根據鳥哥網站說法(http://linux.vbird.org/linux_basic/0130designlinux.php#partition_mbr),那 grub 如何找到 windows loader 並將控制權交給它去繼續啟動 windows ?
-
不好意思,可我現況就是已經在 linux-rescue mode 下作過 grub-install /dev/hda
xp啟動不了(僅到出現F8畫面),此動作不就是將GRUB安裝到MBR,難道是我誤解了?
F8畫面?什麼意思?
-
sorry,是安全模式的menu畫面.
果然真不是loader的問題,而是usb外接硬碟造成.不大清楚原因(??),將其拔掉後windows就可正常啟動.
但是我接著嘗試將 grub 裝於 hdb 的 boot sector:
grub> root (hd1,0) #我的/boot是獨立的partition
grub> setup (hd1,0)
安裝過程正常: stage1,stage2,kernel image都有被找到.
bios 也設定以 hdb 為開機碟...但啟動linux時卻出現錯誤訊息:
先列出 grub.conf (我是用rhel5)的設定,然後顯示 - couldn't mount selected filesystem
確定設定無誤...我系統多為LVM filesystem,但/boot的partition則是ext3,在grub shell設定 root (hd1,0) 時,其出現的結果竟是ext2 的檔案系統....不知問題是否與此有關?
-
跑一下 pvscan 跟 vgscan ,找出 VG 之後:
vgchange -a y VG_NAME
-
跑一下 pvscan 跟 vgscan ,找出 VG 之後:
vgchange -a y VG_NAME
感謝 netman 大,但不大懂您的意思..
先請教一下該 error message :couldn't mount selected filesystem -> 指的是哪個 filesystem ?
以下 result 是當我將 grub 改裝於 hda 的 MBR 後,可正常啟動時的情形:
其中 /dev/hdb1 為 /boot 且其並非 LVM! 另外, 我所有的 VG 皆已 active !
...不懂為何只要當我將 grub 改裝至 /dev/hdb boot sector 時就啟動失敗(掛載不了)?
===========================================
Device Boot Start End Blocks Id System
/dev/hdb1 * 1 13 104391 83 Linux
/dev/hdb2 14 535 4192965 fd Linux raid autodetect
/dev/hdb3 536 1057 4192965 fd Linux raid autodetect
/dev/hdb4 1058 2498 11574832+ 5 Extended
/dev/hdb5 1058 1579 4192933+ 8e Linux LVM
/dev/hdb6 1580 2101 4192933+ 8e Linux LVM
/dev/hdb7 2102 2228 1020096 fd Linux raid autodetect
/dev/hdb8 2229 2355 1020096 fd Linux raid autodetect
/dev/hdb9 2356 2498 1148616 8e Linux LVM
[root@server1 ~]# lvscan
ACTIVE '/dev/VolGroup01/LogVol00' [1.88 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol00' [6.62 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol01' [2.00 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol02' [4.00 GB] inherit
ACTIVE '/dev/VolGroup00/LogVol03' [4.00 GB] inherit
-
哦,還以為你要 mount 的 LVM 還沒 active 呢。
原來不是,那我所答的就不對了。
或許看看 menu.lst 的設定是否也改到 sdb 了?
-
裝在hda可以開機,這是第一個線索。
裝在hdb的MBR?那hda的boot loader是什麼?只要hda的boot loader是可以載入grldr或選單進入hdbN的grub/lilo選單,那就可以載入kernel開機。
-
1.
xp 先安於 hda
linux 後裝於 hdb, 而 grub 安裝時選擇裝於 boot sector 而非 MBR
--> 如何啟動 linux ?
hda 的哪裡?1,2,3,4??
hdb 的哪裡?1,2,3,4??
Windows 的啟動流程是看哪個 partition 是 active,然後去啟動 partition 下 ntldr...
Linux 是 mbr -> 指定的 partition -> 載入該 partition superblock 的 loader...
-
Thanks! :)
1.
xp 先安於 hda
linux 後裝於 hdb, 而 grub 安裝時選擇裝於 boot sector 而非 MBR
--> 如何啟動 linux ?
hda 的哪裡?1,2,3,4??
hdb 的哪裡?1,2,3,4??
xp :
1.) /dev/hda1 (c槽=整顆硬碟)
linux(rhel5) :
1.) /dev/hdb1 的掛載點: /boot (filesystem: ext3)
2.) grub> root (hd1,0)
grub> setup (hd1,0) #就是/dev/hdb1
PS. 安裝 GRUB LOADER 前,有先作過: dd if=/dev/zero of=/dev/hda bs=446 count=1
Windows 的啟動流程是看哪個 partition 是 active,然後去啟動 partition 下 ntldr...
Linux 是 mbr -> 指定的 partition -> 載入該 partition superblock 的 loader...
裝在hda可以開機,這是第一個線索。
裝在hdb的MBR?那hda的boot loader是什麼?只要hda的boot loader是可以載入grldr或選單進入hdbN的grub/lilo選單,那就可以載入kernel開機。
hda 裝 xp 所以 boot loader 應該就是 windows 的.
不過之後有執行過: dd if=/dev/zero of=/dev/hda bs=446 count=1 所以 hda 的 MBR 的前 446bytes 應該是清掉了.
PS. bios 中開機硬碟設定為: hdb(裝 LINUX 的那顆)
-
grub裝在hdb MBR的意思是不是你去調bios的開機硬碟順序? :P
-
:P :P 不好意思,等一下,
可否先請教一下:
一直搞不是很清楚,趁機請教一下各位(有誤請糾正).例如(參考自:http://www.pczone.com.tw/vbb3/thread/39/50519/ (http://www.pczone.com.tw/vbb3/thread/39/50519/))
1.) 假若我裝 WINDOWS 於 PRIMARY MASTER 的硬碟(hda1)上的第一個分割區時:
-> 此情形,請教 hda 之 MBR (第零軌上第一個磁區)上的程式區(Pre-Loader/Pre-Boot)上的小程式是否就是 WINDOWS 的 BOOT LOADER?
-> hda 之 boot sector 上又有些甚麼?
-> ntldr 在流程中的角色?
2.) 而安裝 linux 時的狀況與 windows 是否一樣?
-
基本上每顆硬碟都有一個 MBR,這是第一個 sector (512byte)。
過了這個 sector 才是 partition,可以分一個單一 partition 也可以分多個 partition。
然後每一個 partition 的第一個 sector 就是 boot sector (也有其他名稱)
一般的 loader 可以放在 MBR 里面的 446byte 也可以放在 partition 前的 boot sector。
但 BIOS 只會找到 MBR 來開機。
也就是說,如果你將 loader 放在 boot sector,
那 MBR 那邊所開的 loader 必需有一個 entry 指到你所裝的 boot sector 才能開。
通常這也叫 chain loader。
ntld 我不確定是放哪?
但 linux 的 loader 太大了,要分開 stage1 跟 stage2,
其中的 stage2 是在 file system 里面(partition里面),
但 stage1 放 MBR 或 boot sector 都行。
但如果你選擇放 boot sector,那就請修改 MBR 開的那個 loader,
多加一個 entry 給 chain 到你的 boot sector 去。
這些在一般的 Linux 課程都會講到的,有空可以上上課,那就更清楚了。
-
-> ntldr 在流程中的角色?
ntldr 就是 Windows 的 boot loader
-
Thanks a lot! ::) ::)
回 hikohan 兄:
我是將 grub 裝在 hdb 的 boot sector 非 MBR .
如果是 netman 大開的課我一定報名! :)
可惜我住台北...現在網路這麼發達,如有遠距教學也不錯!
但 linux 的 loader 太大了,要分開 stage1 跟 stage2,
其中的 stage2 是在 file system 里面(partition里面),
但 stage1 放 MBR 或 boot sector 都行。
但如果你選擇放 boot sector,那就請修改 MBR 開的那個 loader,
多加一個 entry 給 chain 到你的 boot sector 去。
netman 大的解說若化為行動,不就是:
install grub loader
grub> root (hd1,0)
grub> find /grub/stage1
grub> find /grub/stage2
grub> setup (hd1,0)
然後是,
/etc/grub.conf 設定:
title RHEL 5 Server (2.6.18-53.el5)
root (hd1,0)
kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quie
t crashkernel=128M@16M
initrd /initrd-2.6.18-53.el5.img
title Windows XP
rootnoverify (hd0,0)
chainloader +1
.....難道是好事多磨(且我有在 BIOS 中設定 hdb 為開機碟,開機順序是: cd-rom->hard disk),為何我會開不了?
有沒有可把 MBR or Boot Sector 內容倒出來看的工具?
可否請教 darkranger 兄 NTLDR 是如何啟動 windows xp 的?感激不盡! :)
-
grub> setup (hd1)
看看?
-
基本上每顆硬碟都有一個 MBR,這是第一個 sector (512byte)。
過了這個 sector 才是 partition,可以分一個單一 partition 也可以分多個 partition。
然後每一個 partition 的第一個 sector 就是 boot sector (也有其他名稱)
一般的 loader 可以放在 MBR 里面的 446byte 也可以放在 partition 前的 boot sector。
但 BIOS 只會找到 MBR 來開機。
也就是說,如果你將 loader 放在 boot sector,
那 MBR 那邊所開的 loader 必需有一個 entry 指到你所裝的 boot sector 才能開。
通常這也叫 chain loader。
ntld 我不確定是放哪?
但 linux 的 loader 太大了,要分開 stage1 跟 stage2,
其中的 stage2 是在 file system 里面(partition里面),
但 stage1 放 MBR 或 boot sector 都行。
但如果你選擇放 boot sector,那就請修改 MBR 開的那個 loader,
多加一個 entry 給 chain 到你的 boot sector 去。
這些在一般的 Linux 課程都會講到的,有空可以上上課,那就更清楚了。
這樣講好像怪怪的?
MBR的結構是:前440bytes是程式,然後有一些disk signature,從446開始是64bytes的partition table,總共有4個entry,每個16bytes,最後是0x55AA的signature。這些全部都在這512bytes中。
bootloader一定有部份放在前面這440bytes的空間,因為bios在開機後會把這512bytes載入記憶體,然後從區段位址0開始執行。如果這440bytes不夠用,接下來的部份要放哪裡就看怎麼設計,常常是會放在MBR之後的磁區中,然後透過這440bytes的程式碼載入。只要是用硬碟開機,所有x86 bios應該都是這樣執行的。
額外的程式包含ext2檔案系統讀取的程式,這樣就可以到/boot中讀取stage1的image,也就是initrd。
所以如果MBR裡面什麼都沒有,那開機以後就不會有任何動作。bios可不會載入boot sector的東西。(硬碟第零軌的第一個磁區是MBR,第一軌的第一個磁區是boot sector,每一個軌都有很多磁區的,所以其實MBR之後還有很多空間)
另外,也可以透過ntldr載入linux的bootloader,請上網找一找grub4dos。
-
恩?你沒說怪在哪哦~~~
還有你說的那堆,跟我說的沒不一樣啊。?_?
-
是喔,那是我誤解了。 :)
-
哦,那輪到我了哦... ^_^
你說的 stage1 不是 initrd 哦。
stage1 若不放 MBR 那就是放 boot sector,
它的功能只有一個:載入 stage2
-
了解了,謝謝您。
-
可否請教 darkranger 兄 NTLDR 是如何啟動 windows xp 的?感激不盡! :)
原理嗎?我不知道
我只知道我曾經把 NTLDR 砍了,然後就發生悲劇了....
-
可否請教 darkranger 兄 NTLDR 是如何啟動 windows xp 的?感激不盡! :)
原理嗎?我不知道
我只知道我曾經把 NTLDR 砍了,然後就發生悲劇了....
NTLDR的原理?想要知道什麼?知道了也不能怎樣.....又不是GRUB4DOS什麼奇怪的東西都可以啟動!!!
-
http://phorum.study-area.org/index.php/topic,55709.0.html
的確,grub什麼都給他啟動下去。
linux kernel + NTLDR + GRLDR + DOS + ISO + Floppy Image + Iso Linux + loadlin.exe....
-
NTLDR 跟 Windows 的關係
就有如 Grub/LILO 跟 Linux 的關係
NTLDR 負責載入 Windows 核心,就有如 Grub/LILO 負責載入 Linux 核心。
Windows(nt 系列到 2003) 的 bootsector 只負責載入 NTLDR
只是 Windows 載入核心的程式碼比較肥大,無法只住在 Bootsector 或 MBR 裏面,所以才分割出來另外一個檔案。
至於上面講的 "grub什麼都給他啟動下去" 當然只是個迷思, GRUB 不支援載入 Windows 核心,只支援所謂 chainloader 來呼叫其他地方 bootsector 。
NTLDR 其實也支援類似 chainloader 的功能,理所當然也可以拿來載入 Linux (或精確一點說,呼叫在其他 bootsector 裏面的 GRUB/LILO)。
-
有興趣的話,也可以看看 12 年前的舊文章:
http://www.tldp.org/HOWTO/Linux+NT-Loader.html
-
..
至於上面講的 "grub什麼都給他啟動下去" 當然只是個迷思, GRUB 不支援載入 Windows 核心,只支援所謂 chainloader 來呼叫其他地方 bootsector 。
NTLDR 其實也支援類似 chainloader 的功能,理所當然也可以拿來載入 Linux (或精確一點說,呼叫在其他 bootsector 裏面的 GRUB/LILO)。
觀念清楚就不迷啦,觀念不清楚就迷啦,不就清楚迷觀念啦,不就觀念迷清楚啦。
感覺GRUB的大道理喔~
-
各位提供的訊息我正在 K :P 感激不禁! :)
算算之前一共試裝了幾個不同的地方,
grub> setup (hd1) --> 失敗
grub> setup (hd1,0) --> 失敗
grub> setup (hd0) --> ok
錯誤訊息如下:
選單(黑白,非彩色)以 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 .....
選單以 windows 開機時:
Booting windows xp
rootnoverify (hd0,0)
chainloader +1
GRUB loading stage2 .....
然後自行重開機
PS.
#(hd1,0) 是 linux 的 /boot 所在
#(hd0,0) 是 windows 的 c 槽所在
-
對 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 還是開不了機
對嗎?
-
所以在這個狀態下當你做了 grub> setup (hd1,0) ,你已經把 Windows bootsector 給蓋掉了。
恩,他前面有下 find 命令,但是沒貼結果。
-
佩服佩服(是我的問題,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)
是嗎? ???
-
root 跟 setup 設哪?
不防先用 find 找出 stage1 或 stage2 在哪然後再決定。
假如你要 BIOS 直接開 GRUB,就只能放在 mbr (hd0) or (hd1),不能放在 boot sector。
當你找出 linux 所在的 hd 號碼之後,剩下那顆就是 xp 的,然後用 chainloader 指過去就是了。
-
那這樣子,你照下面的步驟做做看:
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 還是在第一順序,就跟安裝的時候一樣。
-
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。
試試看這樣可否運作?
-
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 ? ???
-
請問,
同樣前提下,若欲重安 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 (http://ms-sys.sourceforge.net/)將 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。
-
Demonbane 大,
非常非常地感謝!
看來觀念清楚真的很重要,想趁休假 K 一下(練功),有無可加強這方面"基礎"的資訊,希望您不吝分享,謝謝 (所有幫過我的大大) :) :)
-
建議版主將此篇討論納入精華區 ...
尤其是洋蔥叔叔 老大的說明真是清楚 , 也讓小弟觀念一下子更為清楚 !!
(原本只是知道一個大概而已)
之前因為一些因素,無法使用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 ...
-
但不管怎樣,你只要記住 - 在預設的情況下,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 的程序了。