小沈說希望可以在易PC上做Dual Boot, 於是就來研究一下如何將現有EeePC windows XP 的 build 先裝起來看一下是長什麼樣子.
在 XP 的 partition 當中有四個主分割區分別為 C:/ D:/ 一個PE:/, 和一個 ELF(Hidden partiton),且四個均為 Primary Partition. 所以基本上在這樣的條件下是跟本沒辦法裝現有 Xandros OS. 分割區已經被用完了.
所以 先將 D 槽的 partition 幹掉,重割成 Extended Partition,再割出 Logical Partition 作法如下:
<分割前> <分割後>
(Primary), C:/
(Primary), D:/ => Primary, C:/ (Extended P)-(Logical P)-
D:/-剩下的分割區再割出三個 E:/, F:/ , G:/
如此就大概完成了一半了。
接下來的問題 就來了 XP 的 partitions 均為 NTFS,但 grub (bootlader) 除了透過 patch 能讓 grub support NTFS 外是沒有辦法讀取的(其實我也不知道去哪抓,如果知道的話指導一下喔!)
用什麼樣的方式可以讓我們不用修改 MBR (因為風險大掛了就整個死了), 然後又能讀取 NTFS 的方法呢?
答案就是: grub4dos (http://dojjwnload.gna.org/grub4dos/)
這個沒什麼特別的 就抓下來 build 就對了 build 好後在 stage2 的 folder 裡面有一個 grldr 這個 binary,這個檔就是已經把 NTFS 內建了.
而且他的設定檔也是和 grub 一樣吃 menu.lst
不過這個 grldr 和 menu.lst 要放在同樣的目錄 C:/ 如此才能順開機喔!
說了這麼多 只剩下最後一步了就是就修改 Win XP 的 boot.ini
找到 [operation systems] 這個 tag
在最下方加入 => C:\grldr="The Name You Want To See"
這樣就能讓 XP 成功的執行這個 binary, 如此就能讓 grub4dos 引導相對應的 Linux kernel 和 initramfs 成功的開機囉!
至於 E:/ F:/ G:部份因為是直接 dd 進去的動作有一點繁雜 所以就不詳述了!
其實以前在裝 Windows 和 Linux 共存時 都會聽人家說這很簡單呀 只要先裝 Windows 再裝 Linux 就可以了 可是如果我是反過來裝的那該怎麼辦呢?
Windows 的 boot loader default 會在 disk 的 MBR 和 partition 1 的 boot sector 安裝,所以導致你如果先裝 Linux 再裝 Windows,這時的bootloader就會被覆蓋掉了所以就沒有辦法辨示 linux 的 filesystem.
不過 我們可以再裝 linux 前先將 mbr 備份出來...
dd if=/dev/sda of=boot.mbr bs=446 count=1, 然後 windows 裝完後 在去弄一片live cd, 再將 boot.mbr 寫回 dd if=boot.mbr of=/dev/sda bs=446 count=1
再修改 menu.lst 如下:
title Windows XP
root (hd0,0) // the partition you install
chainloader +1
這樣就完成囉!
這個圖是用來解釋為什麼剛剛那個值是446
mbr 的 結束符號是 55 aa,扣除這兩個 byte 和前面的 bootloader 還剩 64 bytes, 這邊紀錄了partition的資料,所以如果把他毀了那就完蛋了! 所有的分割就消失了.
順便附上partition的對照 這是從 util-linux-2.14/fdisk/fdisk.h 取出來的 可以參考看看.
struct partition {
unsigned char boot_ind; /* 0x80 - active */
unsigned char head; /* starting head */
unsigned char sector; /* starting sector */
unsigned char cyl; /* starting cylinder */
unsigned char sys_ind; /* What partition type */
unsigned char end_head; /* end head */
unsigned char end_sector; /* end sector */
unsigned char end_cyl; /* end cylinder */
unsigned char start4[4]; /* starting sector counting from 0 */
unsigned char size4[4]; /* nr of sectors in partition */
} PACKED;
參考資料:
http://en.wikipedia.org/wiki/Master_boot_record#cite_note-9
http://en.wikipedia.org/wiki/GRUB4DOS
留言列表