Mac mini(Early 2009)の内蔵HDD(120GB)が手狭になってきたので、500GBのHDDに交換しました。
もともと内蔵されていたものは富士通のMHZ2120BH(120GB,5400rpm)ですが、これを日立のHTS725050A9A364(500GB,7200rpm)に交換しました。回転数を上げて高速化ももくろんでいます。
Mac miniではxenを動作させています。これまではxenの起動にrefit経由でBIOSエミュレーションを使用していました。
今回の交換にあわせてBIOSエミュレーションをやめてEFIで動かそうと試行錯誤してみましたが、EFIにはxen等まだいろいろ対応できていないところがあるようで、結局BIOSエミュレーションで動かすことになりました。
以下、試行錯誤を含めたディスク交換の流れです。
2010年 11月 13(土曜日)
Mac miniのディスク交換
ディスクパーティショニング
dom0(Linux)での作業です。
まずはUSBで新しいHDDを接続します。これは/dev/sdbとして認識されました。
これをEFIで利用するためGPTでパーティショニングします。GPTのパーティショニングにはGNU partedを利用します。
sdb1はrefitが使用できるようにfat32で、sdb3は既存のデータを保存するためにext3で作成、sdb4は将来的に利用するためスペースだけ確保しています。
既存データコピー
/dev/sdb3に既存のデータ(xen,linuxを含め一式)をコピーします。
refitをsdb1にインストール
http://refit.sourceforge.net/
からrefit-bin-0.14.tar.gzをダウンロードします。
grub.efiを作成
EFIから直接grubを起動するためにgrub.efiを作成します。(これは結局うまくいきませんでした。後述)
参考
http://www.gnu.org/software/grub/grub-download.en.html
http://grub.enbug.org/TestingOnMacbook
http://grub.enbug.org/TestingOnEFI
grubの最新版取得にはbazaarが必要ですが、bzrは新しめのにする必要があります。
HDD交換
下準備が整いましたので、Mac miniを停止しふたをあけ、HDDを交換します。
boot設定
DVDからMacOSXインストーラを起動しgrubを直接起動できるようにします。
MacOSX起動後ターミナルを立ち上げて以下を実行します。
grub起動(できず)
リブートするとgrubが立ち上がりました。
ところが、
というエラーがでてmultibootでxenを起動できません。
また、multibootではなくlinux, initrdを指定してxenではなくlinuxの起動も試みてみましたが失敗しました。
refit経由grub起動(できず)
grub直接は起動できないので、refitを起動し、そこからgrub.efiを起動してみることにします。
DVDからMacOSXインストーラを起動します。
blessコマンドはfat32またはhfsplusを認識可能のようです。fat32の場合は--mountオプションの必要あり。
refitが起動するとrefitのメニューでgrub(grub.efiを自動的にみつける)が選択可能になります。
この方法で起動してみました。refit起動後選択が面でgrubが選択可能になるのでgrubを選択してみましたが、
前回と同様multibootのエラーとなりました。
grubのstableバージョンを利用してみる
実績のありそうなgrub-1.98を試してみます。
grub-1.98.tar.gz
linux dom0上でi386版とx86_64版の二つをつくって試してみます。
x86_64版
これもgrub-1.99と同様の結果になりました
i386版
これはgrubの起動自体失敗しました
BIOSエミュレーションモードに方針変更
EFIはあきらめBIOSエミュレーションモードを利用することにしました。
まずはrefitのshellで、
gptsync
を実行します。
これでMBRパーティションができます。
つぎに、ubuntuのLive DVDで起動し、
でMBRに書き込みます。
これで再起動すると、MBR経由でgrubが起動しxen (+ dom0 linux)が起動しました。
なぜかrefitを経由しなくなってしまったので、
再びMacOSXのDVDから起動し、refitを再設定します。
/var/tmp/mnt/efi/refit/refit.confを編集
legacyfirst
を有効にし、refit timeout時にgrubが起動できるようにします。
これでひとまずBIOSエミュレーションで起動できるようになりました。
dom0 Linuxで、bonnie++でディスク性能を測定したところ、
HDD変更前
Write(seq): 32MB/sec
Read(seq): 52MB/sec
HDD変更後
Write(seq): 80MB/sec
Read(seq): 119MB/sec
とかなり性能改善できました。
dom0(Linux)での作業です。
まずはUSBで新しいHDDを接続します。これは/dev/sdbとして認識されました。
これをEFIで利用するためGPTでパーティショニングします。GPTのパーティショニングにはGNU partedを利用します。
# parted /dev/sdb
(parted) mkpartfs primary fat32 0 210
(parted) mkpart primary 210 10000
(parted) mkpart primary 10000 100000
(parted) mkpart primary 100000 -1
mkpartfsはext3等は作成できない
(parted) name 1 "EFI System Partition"
(parted) quit
# mkfs.ext3 /dev/sdb3
# mkswap /dev/sdb2
# parted /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: ATA Hitachi HTS72505 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 17.4kB 210MB 210MB fat32 EFI System Partition boot
2 210MB 10.0GB 9790MB linux-swap(v1) linux-swap
3 10.0GB 100GB 90.0GB ext3 primary
4 100GB 500GB 400GB primary
sdb1はrefitが使用できるようにfat32で、sdb3は既存のデータを保存するためにext3で作成、sdb4は将来的に利用するためスペースだけ確保しています。
既存データコピー
/dev/sdb3に既存のデータ(xen,linuxを含め一式)をコピーします。
# mount /dev/sdb3 /mnt2
# cd /
# rsync -av bin boot cdrom dev etc home initrd.img lib lib64 lost+found media mnt opt root sbin \
selinux srv sys tmp usr var vmlinuz /mnt2
# mkdir /mnt2/proc
refitをsdb1にインストール
http://refit.sourceforge.net/
からrefit-bin-0.14.tar.gzをダウンロードします。
$ tar zxvf refit-bin-0.14.tar.gz
$ cd refit-bin-0.14
# mount /dev/sdb1 /mnt3
# cp -pr efi /mnt3
grub.efiを作成
EFIから直接grubを起動するためにgrub.efiを作成します。(これは結局うまくいきませんでした。後述)
参考
http://www.gnu.org/software/grub/grub-download.en.html
http://grub.enbug.org/TestingOnMacbook
http://grub.enbug.org/TestingOnEFI
grubの最新版取得にはbazaarが必要ですが、bzrは新しめのにする必要があります。
$ bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub
$ cd grub
$ ./autogen.sh
$ ./configure --with-platform=efi --target=x86_64 --prefix=/usr/local --disable-werror
$ make
$ ./grub-mkimage -O x86_64-efi -d grub-core -o grub.efi -p "" part_gpt hfsplus fat ext2 normal chain boot configfile linux
# mkdir /mnt3/efi/grub
# cp -pr grub.efi grub-core/*.{mod,lst} /mnt3/efi/grub
# cp -p /boot/grub/grub.cfg /mnt3/efi/grub
# vi /mnt3/efi/grub/grub.cfg
set root='(hd0,gpt3)'
に変更
HDD交換
下準備が整いましたので、Mac miniを停止しふたをあけ、HDDを交換します。
boot設定
DVDからMacOSXインストーラを起動しgrubを直接起動できるようにします。
MacOSX起動後ターミナルを立ち上げて以下を実行します。
# mkdir /var/tmp/mnt
# mount -t msdos /dev/disk0s1 /var/tmp/mnt
# bless --mount=/var/tmp/mnt/efi --file=/var/tmp/mnt/efi/grub/grub.efi --setBoot
grub起動(できず)
リブートするとgrubが立ち上がりました。
ところが、
no multiboot header found
というエラーがでてmultibootでxenを起動できません。
また、multibootではなくlinux, initrdを指定してxenではなくlinuxの起動も試みてみましたが失敗しました。
refit経由grub起動(できず)
grub直接は起動できないので、refitを起動し、そこからgrub.efiを起動してみることにします。
DVDからMacOSXインストーラを起動します。
# mkdir /var/tmp/mnt
# mount -t msdos /dev/disk0s1 /var/tmp/mnt
# bless --mount=/var/tmp/mnt/efi --file=/var/tmp/mnt/efi/refit/refit.efi --setBoot
blessコマンドはfat32またはhfsplusを認識可能のようです。fat32の場合は--mountオプションの必要あり。
refitが起動するとrefitのメニューでgrub(grub.efiを自動的にみつける)が選択可能になります。
この方法で起動してみました。refit起動後選択が面でgrubが選択可能になるのでgrubを選択してみましたが、
前回と同様multibootのエラーとなりました。
grubのstableバージョンを利用してみる
実績のありそうなgrub-1.98を試してみます。
grub-1.98.tar.gz
linux dom0上でi386版とx86_64版の二つをつくって試してみます。
x86_64版
$ ./configure --with-platform=efi --target=x86_64
$ make
$ ./grub-mkimage -d . -o grub.efi -p "" part_gpt hfsplus fat ext2 normal chain boot configfile linux
# cp -pr grub.efi *.mod *.lst /mnt3/efi/grub
これもgrub-1.99と同様の結果になりました
i386版
$ ./configure --with-platform=efi --target=i386
$ make
$ ./grub-mkimage -d . -o grub.efi -p "" part_gpt hfsplus fat ext2 normal chain boot configfile linux
# cp -pr grub.efi *.mod *.lst /mnt3/efi/grub
これはgrubの起動自体失敗しました
BIOSエミュレーションモードに方針変更
EFIはあきらめBIOSエミュレーションモードを利用することにしました。
まずはrefitのshellで、
gptsync
を実行します。
これでMBRパーティションができます。
つぎに、ubuntuのLive DVDで起動し、
# grub-install /dev/sda
でMBRに書き込みます。
これで再起動すると、MBR経由でgrubが起動しxen (+ dom0 linux)が起動しました。
なぜかrefitを経由しなくなってしまったので、
再びMacOSXのDVDから起動し、refitを再設定します。
# mkdir /var/tmp/mnt
# mount -t msdos /dev/disk0s1 /var/tmp/mnt
# bless --mount=/var/tmp/mnt/efi --file=/var/tmp/mnt/efi/refit/refit.efi --setBoot
/var/tmp/mnt/efi/refit/refit.confを編集
legacyfirst
を有効にし、refit timeout時にgrubが起動できるようにします。
これでひとまずBIOSエミュレーションで起動できるようになりました。
dom0 Linuxで、bonnie++でディスク性能を測定したところ、
HDD変更前
Write(seq): 32MB/sec
Read(seq): 52MB/sec
HDD変更後
Write(seq): 80MB/sec
Read(seq): 119MB/sec
とかなり性能改善できました。
トラックバック
このエントリーのトラックバック URI を指定する