容量拡張を伴うディスク入れ替え(ZFS)
同容量でのディスク入れ替え実験が済んだので、いよいよ容量拡張を伴うディスクの入れ替えをば。
fmthard を使って非対話的にパーティションを作成する方法はわかっていたので:
- 現在使用中の HDD の prtvtoc 出力を生成(以下「vtoc1」)
- 容量拡張用 HDD の prtvtoc 出力を生成(以下「vtoc2」)
- vtoc2 の容量情報を元に、vtoc1 の第 0 および第 2 パーティションのセクタ数を補正
- 補正した vtoc1 を使って、容量拡張用 HDD に fmthard で書き込み
という要領で問題無かろう、と思っていたら:
Partition 0 not aligned on cylinder boundary: ....
などというエラーでパーティション作成失敗。
prtvtoc 出力を確認してみたら、現在使用中の HDD は:
32 sectors/track 128 tracks/cylinder 4096 sectors/cylinder
であるのに対して、容量拡張用 HDD は:
63 sectors/track 255 tracks/cylinder 16065 sectors/cylinder
といった感じでシリンダあたりのセクタ数が全然異なるため、パーティションサイズも適宜シリンダ境界に合うように調整してやらないと駄目らしい。現行 HDD が 32 x 128 と区切りが良いのに対して、容量拡張用 HDD は 63 x 255 と半端極まりない状況がよろしくないのだな。
っつーか、シリンダ境界への整合が必須なら、そもそも「セクタ指定」なんてさせるな、という気がするのだが、この辺は「歴史的経緯」という奴なのだろう。
この問題をクリアしたら、後は順調に入れ替え完了。ミラーリングが完了した時点での容量は:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
rpool 5.47G 4.91G 570M 89% ONLINE -
だったのが、旧 HDD を rpool から切り離した段階で:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
rpool 15.4G 4.91G 10.5G 31% ONLINE -
増えてる増えてる。なんて簡単なんだ…、すげーよ > ZFS
※ 2016-12-15 追記: ここから >>>>
プール属性 autoexpand の値が on になっていないと、既存のデバイスを zpool detach で切り離した際に、プールサイズの自動拡張が行われません。
zpool detach によるデバイス切り離し後もプールサイズが拡張されない場合は、"zpool get autoexpand プール名" で属性値を確認したうえで、必要に応じて "zpool set autoexpand=on プール名" による書き換えを行ってください。
※ 2016-12-15 追記: ここまで <<<<
作業手順をもう一度おさらいしておくと:
- 移行先 HDD にSolaris2 fdisk パーティションを作成
- 移行先 HDD の prtvtoc 出力を入手
- シリンダ境界に注意しつつ prtvtoc 出力を編集
- 移行先 HDD にfmthard でパーティションを作成
- "zpool attach -f rpool 移行先パーティション" でミラーリング開始
- "zpool status rpool" で進行状況確認
- "installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/XXXXs0"
- "zpool detach rpool 旧ディスク" で旧 HDD を切り離し
- /etc/vfstab で swap 領域設定の補正
- シャットダウン/HDD 取り外し/再起動
次の実験予定は、別 pool 上に作成したバックアップを使っての再起動。