close

 

小沈說希望可以在易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

這樣就完成囉!

sl400_mbr.png

這個圖是用來解釋為什麼剛剛那個值是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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 sakbk 的頭像
    sakbk

    sakbk

    sakbk 發表在 痞客邦 留言(1) 人氣()