2007年7月19日 星期四

Intel Mac 多重開機 - OS X + WinXP + Linux

Triple Boot via BootCamp - OnMac.net Wiki

http://wiki.onmac.net/index.php/Triple_Boot_via_BootCamp

在 Apple 發表 Boot Camp 之後,已經有不少人成功的在 Intel Mac 上安裝 Windows XP 了,現在有位老兄,試出了三重(不是台北縣那個)開機,可以在上面安裝 Linux(作者用 gentoo 2006.0)了。不過有點要特別注意,他的方法會清掉硬碟當中的內容,因此要事先做好備份。


以下是準備材料:

* 一部 Intel Mac http://store.apple.com/
* OSX 安裝 DVD(s)
* 一張非升級的 Windows XP CD with SP2 slipstreamed
* 一張 x86 Linux Live CD/DVD(作者使用 gentoo 2006.0 Live CD)http://www.gentoo.org/
* 更新 Intel Mac 的 firmware(2006 早期機種才要)ttp://www.apple.com/support/downloads
* Apple BootCamp http://www.apple.com/macosx/bootcamp/
* OSX 10.4.6 combo update http://www.apple.com/support/downloads/macosx1046comboforintel.html


A quick note on disk partitioning

有點要注意,Intel Mac 採用新式的 GPT (GUID (globally unique identifier) Partition Table)系統來分割硬碟,只支援 OS X 與 Linux,Windows 則還在用 MBR。 Boot Camp 為了遷就這種情況,因此二種系統兼用,這也讓三重開機有點難度。目前只有 diskutil(包含在 OS X 10.4.6 當中)有辦法切出同時包含 GPT/MBR 的硬碟。目前 GPT 會把 MBR 的資料洗掉,因此fdisk/partion magic 之類的軟體都沒有辦法編輯 GPT。因此,目前只能用 diskutil 來切割硬碟。不過,更糟的是MBR 只支援 4 個 primary partitions,而且 GPT 不支援 extended partitions,結合這些限制,表示多重開機的系統只能夠有 4 個 primary partitions 可用,另外 Mac 的 bootloader 霸佔掉第一個 primary partition,因此只能在上面裝上其他三種不同的作業系統。
所以 linux swap partition 不能夠存在,因此必須透過 swapfile 來解決。還有,因為某些原因, Boot Camp 會把 Windows 的 "C:" 當作最後一個磁碟,因此如果不是安裝 Windows 的話,會在安裝完畢,第一次重開機時出現:"cannot find hall.dll"(地獄?)的錯誤訊息。另外,最好聽 Apple 的忠告,把分割 format 成 FAT32,NTFS 只會吃到閉門羹。然而,你要用 FAT32 時,必須注意,硬碟分割的大小不能大於 32GB。


The science of chainloading

作者是利用 "連鎖載入" 的方式從 Windows Xp (ntldr) bootloader 載入 Linux 的 lilo bootloader,達成連鎖開機的目的(Boot Camp 似乎只認得 ntldr ),因此 grub 很抱歉,不能用,因為他的 stage 1.5 code 會寫入與 GPT 相同的地方,因此 Intel Mac 會不允許這麼做。作者也表示,可能可以用 efi/elilo 來啟動,有人成功的話,別忘了告訴作者。


Procedure

1) 如同一般狀況安裝 OS X 到單一一個分割上,為了節省時間,只裝 base system
2) 開機進入 OS X,安裝 10.4.6 combo update
3) 安裝 firmware update,然後再安裝 Boot Camp
4) 執行 Boot Cam 精靈然後建立 XP driver CD,然後離開 Boot Camp。
*千萬不要用 Boot Camp 分割硬碟* 當然你可以直接察看 package 當 中的內容,找出 driver,然後用 disk utility 來燒成 CD,它位於 contents/resources/diskimage.dmg

5) 開啟終端機視窗輸入下列指令來重新分割硬碟。在 100 GB 的硬碟上作者切了 60GB 給 OS X,17GB 給 Linux,15GB 給 Windows。你可以 改變分割硬碟的大小,但是分割的次序 *不要改變* (所有指令均在 同一行)

sudo diskutil resizeVolume disk0s2 60G Linux 17G "MS-DOS FAT32" 15G

6) 插入 WinXP CD 重開機,如果聽到 "噹" 一聲,按下 c 鍵。
7) Windows 安裝程式將會開始。當初現硬碟分割畫面選擇 C: 槽。將它 "快速分割" 成 FAT32。然後按照一般方式安裝,重開機。

8) 在第一次重開機時,按住 option/alt 鍵,並從 bootloader 當中選 擇 Windows 的硬碟,以便繼續安裝 XP。你將重複這個步驟,直到 XP 完成安裝。

9) 最後安裝 Apple 所給的驅動程式,讓 XP 認得硬體。

A. OK 現在你有雙重開機的 Intel Mac 了,不過步驟尚未結束。

B. 插入 Linux 的 Live CD 然後重開機,如果聽到 "噹" 一聲,按下 c 鍵,從 Linux 開機。

C. 輸入下面指令設定 root 密碼。

sudo passwd root

D. su 成 root,然後 format Linux 的分割,它應該在 /dev/sda3,不 過請仔細檢查!

su mke2fs -j /dev/sda3

E. mount 上你建立的 ext3 分割,然後建立 swapfile。下面的例子建了 2GB 的 swapfile,當然,大小自便。

mkdir /mnt/linux && mount -t ext3 /dev/sda3 /mnt/linux
dd if=/dev/zero of=/mnt/linux/swap bs=1024 count=2097152
mkswap /mnt/linux/swap
swapon /mnt/linux/swap

F. 在這裡,你必須要 bootstrap(安裝;generally considered a longer term for booting, or the process of starting up any computer... http://en.wikipedia.org/wiki/Bootstrap)你最喜歡 的套件,依照不同的情況,你可能需要編譯你自己的 kernel。

G. 現在我們要設定 lilo bootloader 以便讓我們可以開機進入 Linux,請依照你套件安裝 lilo 的方式安裝 lilo。

H. 建立如下的 /etc/lilo.conf

# Global LILO settings
boot=/dev/sda3
prompt
timeout=50
default=Linux
# Kernel specific LILO settings
image=/boot/
label= Linux
read-only
root=/dev/sda3

I. 然後將 lilo 安裝到你的 Linux 分割的分割記錄當中。

/sbin/lilo

J. 現在你必須要將 Windows 的分割給 mount 上,並在 ntldr 的設定檔 boot.ini 當中建立連鎖載入的設定。

mkdir /mnt/windows && mount -t vfat /dev/sda4 /mnt/windows

cd /mnt/windows
dd if=/dev/sda3 of=linux.mbr bs=512 count=1
cat 'C:\linux.mbr="XYZ Linux"' >> /mnt/windows/boot.ini
cd && umount /mnt/windows

K. 現在重新開機。如果每件事情運作 OK,那麼當你按下 option/alt 鍵時你將可以看見 OS X 與 Windows 的開機選項,如果要開啟 Linux,你必須先選擇 Windows 然後從 ntldr 當中選擇 Linux 開機。


使用者發現 Boot Camp 的問題
Apple 推出軟體 可讓 Intel-Mac 裝 XP
Apple 開始更新 MacBook Pro