OpenSolaris 2008.05 なんて、ほんとうはあまりどうでもよくって、でも、触っておかないと不安なんだけど、とりあえず入れておきたい、けど、、、、、、、、、
やっぱり Nevada がスキッ!という人向けです。
zfsroot な Nevada の領域に OpenSolaris 2008.05 のファイルを展開して、Nevada と OpenSolaris 2008.05 の multiboot (?) 環境を構築する方法です。
ポイントは、偽装です。
OpenSolaris 2008.05 側で pkg update-image による snv91 ベースへの更新も問題なくできます。
応用すれば、Nevada なんて、ほんとうはどうでもよくって(以下省略 のように逆も可能かと思います。
#ちなみに、チャレンジする際は、念のためバックアップをとって自己責任でお願いいたしまする。。。
OpenSolaris 2008.05 なマシンで採取した data stream ファイルを使って、Nevada に
OpenSolaris を復元する方法
1. OpenSolaris 2008.05 の datastream file をげっつ
OpenSolaris 2008.05 が動作する環境で、
# zfs snapshot -r rpool/ROOT/opensolaris@snap
# zfs send -R rpool/ROOT/opensolaris@snap > foo/bar/opensolaris_2008.05_inst.img
などと実行し、OpenSolaris 2008.05 の rootfs を zfs datastream としてファイルに
取得します。
必要なのは rpool/ROOT/opensolaris と rpool/ROOT/opensolaris/opt なので、
zfs snapshot -r で rpool/ROOT/opensolaris の snapshot を再帰的に取得します。
2. opensolaris_2008.05_inst.img ファイルから、Nevada に復元する方法
rpool/ROOT/opensolaris に、1 で採取した opensolaris_2008.05_inst.img を復元
# zfs create rpool/ROOT/opensolaris
# cat opensolaris_2008.05_inst.img | zfs recv -dvF rpool
こんなメッセージがでますが気にせず。
cannot mount '/opt': directory is not empty
3. 復元した OpenSolaris 2008.05 環境の修正
まず、rpool/ROOT/opensolaris を /mnt に mount します。
# zfs set mountpoint=legacy rpool/ROOT/opensolaris
# mount -F zfs rpool/ROOT/opensolaris /mnt
3-1. OpenSolaris 2008.05 側の vfstab を修正
# vi /mnt/etc/vfstab
Nevada 側の /etc/vfstab を参考に、swap device を修正してください。
--
/dev/dsk/c4d0s1 - - swap - no -
↑これを
↓このような感じでよいかと。
/dev/zvol/dsk/rpool/swap - - swap - no -
--
3-2. 偽装
zfsroot では、起動時に /etc/zpool.cache を参照し boot disk の path を
得るようですが、その際、前回アクセスしたシステムの hostid を覚えている
ようで、新しい hostid でアクセスすると mount させてくれません(´・ω・`)
というわけで、hostid と zpool.cache を Nevada のもので偽装します。
# cp /kernel/misc/sysinit /mnt/kernel/misc/sysinit
# cp /kernel/misc/amd64/sysinit /mnt/kernel/misc/amd64/sysinit
# cp /etc/zfs/zpool.cache /mnt/etc/zfs/zpool.cache
3-3. OpenSolaris 2008.05 側の path_to_inst を rebuild させるための magic word
/mnt/etc/path_to_inst の中身を magic word に変更します。
これで起動時に path_to_inst を rebuild してくれます。
magic word が記載された path_to_inst は、/mnt/etc/path_to_inst.old として
存在しているので、これでおk。
# cp /mnt/etc/path_to_inst.old /mnt/etc/path_to_inst
3-4. ユーザ情報のつじつま合わせ。
OpenSolaris 2008.05 インストール時に、一般ユーザの登録をおこなますが、
その情報を元に Nevada 側で操作しておきます。
/export/home の領域は、Nevada と OpenSolaris 2008.05 で共有します。
たとえば、chloe というユーザ名で登録していた場合は。
# mkdir /export/home/chloe
# chown 101:10 chloe
とかしておくとよいです。
3-5. OpenSolaris 2008.05 側の /var/tmp を綺麗にお掃除。
# rm -fr /mnt/var/tmp/*
これで、OpenSoalris 2008.05 起動後に一般ユーザのアカウントで login できるようになります。
3-6. 起動時に device reconfigure を行うおまじない。
# touch /mnt/reconfigure
3-7. GRUB エントリを /rpool/boot/grub/menu.lst に追加
こんな感じ。
/rpool/boot/grub/menu.lst を書き換え
--
title OpenSolaris 2008.05
root (hd0,0,a) ← ここは、各自がんばってください。
bootfs rpool/ROOT/opensolaris
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,acpi-user-options=0x8
module$ /platform/i86pc/$ISADIR/boot_archive
--
*acpi-user-options=0x8 は、おまじないです。
MacBook では、これつけないと Nevada b86 ベースとはいえ起動できませんでした。
pkg update-imge で b91 ベースに更新後は、とっても大丈夫です。
3-8. 最後に bootadm で、OpenSolaris 2008.05 側の boot archive を更新します。
# bootadm update-archive -v -R /mnt
-v つけると、こんなメッセージが出ますが気にせず。
--
failed to open file: /mnt/boot/solaris/filestat.ramdisk: ファイルもディレクトリもありません。
cannot find: /mnt/etc/cluster/nodeid: ファイルもディレクトリもありません。
cannot find: /mnt/etc/devices/mdi_ib_cache: ファイルもディレクトリもありません。
cannot find: /mnt/etc/devices/retire_store: ファイルもディレクトリもありません。
cannot find: /mnt/platform/i86pc/ucode/AuthenticAMD: ファイルもディレクトリもありません。
--
4. 再起動
sync;sync;sync;reboot & pray
GRUB で登録した OpenSolaris 2008.05 を選択して起動
5. あとは煮るやり焼くなり
zfsroot を利用した OpenSolaris 2008.05 と Nevada の multiboot 環境
トラックバック(0)
トラックバックURL: http://solaris.sunfish.suginami.tokyo.jp/blog/mt/mt-tb.cgi/604
