ZFSルート、もうちょっと続く
先日のエントリでは、
- disk0にUFSでSolaris 10 10/08をインストール
- Live Upgradeをインストール
- disk1にZFSルート用のZFS環境構築
- Live Upgradeでdisk1のZFS上にSolaris 10をコピー ( BE名はzfs )
- disk1からSolarisをブート = ZFSルートでブート成功
で終わっていた。
まだdisk0にはUFS環境が残っているし、disk1ではなくdisk0から起動するようにしたいね。
というわけで、もうちょっと作業をしてみる。
方針としては
という感じ。
disk0のUFSで作られたBEを削除
削除する前の確認
# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- ufs yes no no yes - zfs yes yes yes no - #
実際の削除。今までブートしていた環境のためか、「-f」が必要だった。
# ludelete -f ufs System has findroot enabled GRUB Updating GRUB menu default setting Changing GRUB menu default setting to <0> Saving existing file </boot/grub/menu.lst> in top level dataset for BE <zfs> as <mount-point>//boot/grub/menu.lst.prev. File </etc/lu/GRUB_backup_menu> propagation successful Successfully deleted entry from GRUB menu Determining the devices to be marked free. Updating boot environment configuration database. Updating boot environment description database on all BEs. Updating all boot environment configuration databases. Boot environment <ufs> deleted. #
削除されたか確認してみる
# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- zfs yes yes yes no - #
というわけで、OK.
しかし、これにてBEは消えるけどディスクからデータが消えた訳ではない。
また今回の環境だと、disk0のブートローダが呼び出されているのだが、削除したことにより変更が反映されなくなっているので、そのまま次のdisk0にZFS環境を作ってもわけがわからなくなる。
空っぽのdisk0を用意する
新しいディスクを用意するなり、formatやfdiskできれいさっぱり、どれでもOK。
ただし、ディスク容量はdisk1と同じにすること。
disk0をdisk1のミラーとしてZFSルートのプールに組み込む
今までZFSに割り当てられていたディスクはdisk0であるc0d1 (実際にはパーティションを切ってあってc0d1s0)だけだった。
# zpool status プール: rpool 状態: ONLINE スクラブ: 何も要求されませんでした 構成: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c0d1s0 ONLINE 0 0 0 エラー: 既知のデータエラーはありません #
空っぽにしたdisk0 (c0d0の中のc0d0s0)を既存のプール「rpool」に追加する。
# zpool attach rpool c0d1s0 c0d0s0 #
ミラーとして追加されたディスクdisk0は自動で既存のディスクdisk1と同期化される。
# zpool status プール: rpool 状態: ONLINE 状態: 1つまたは複数のデバイスの再同期化が進行中です。 プールはおそらく縮退状態で動作を継続します。 アクション: 再同期化が完了するまでお待ちください。 スクラブ: resilver が 0h1m で進行中、12.09% 完了、0h13m 開始待ち 構成: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c0d1s0 ONLINE 0 0 0 c0d0s0 ONLINE 0 0 0 エラー: 既知のデータエラーはありません #
しばらく待っていると同期化も終わり、ミラー構成のできあがり、と。
# zpool status プール: rpool 状態: ONLINE スクラブ: Mon Nov 24 17:30:50 2008 上で 0 エラーが発生した 0h9m のあとの resilver completed構成: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c0d1s0 ONLINE 0 0 0 c0d0s0 ONLINE 0 0 0 エラー: 既知のデータエラーはありません #
disk0にブートローダをインストール
ディスクをミラーしても、ブートローダまではミラーされないので、単にミラーしただけでは追加したディスクからぶーとできない。
なので、ブートローダをインストールする必要がある。
これはZFSだけでなくUFSの時代もそうだったし、x86/SPARC環境に関わらず必要。但しx86/SPARCでブートローダそのものは異なり、インストールコマンドも異なる。
マニュアルBooting From a Alternate Disk in a Mirrored ZFS root Pool
今回はx86環境なのでinstallgrubコマンドを使う。SPARC環境だとinstallbootコマンドね。最後のディスクの生デバイスは間違えないように注意。
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0d0s0 stage1 written to partition 0 sector 0 (abs 16065) stage2 written to partition 0, 265 sectors starting at 50 (abs 16115) #
という感じで、UFSにインストールして完全にZFSルートな環境に移行できたわけです。パチパチ。