zfsroot を利用した OpenSolaris 2008.05 と Nevada の multiboot 環境

| トラックバック(0)

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. あとは煮るやり焼くなり

トラックバック(0)

トラックバックURL: http://solaris.sunfish.suginami.tokyo.jp/blog/mt/mt-tb.cgi/604

: Twitter Updates

    follow me on Twitter

    ウェブページ

    タグクラウド

    Techonrati

    Technorati search

    » リンクしているブログ

    Powered by Movable Type 4.23-ja