以前、SunのBlade 1000を買った。これにハードディスクを追加して、今システムが入ってる古いディスクとmirror化したい。
状況
先日これにSolaris 10をクリーンインストールして、このときファイルシステムはZFSにした。ちなみに、インストールの参考にしたのは『はじめてのSolaris 10』 である。
さて、今日、このマシンにハードディスクを追加した。接続はFC-ALで、サイズは新旧ともに73GBである。物理的な取り付けの方法はSunのマニュアルに絵入りで書いてある。その通りにした。
認識
取り付けて起動すると、その時点でカーネルはディスクの存在を認識している。dmesg(1)を見ると、起動時になにやら追加したディスクのファイバーチャネルWWNが出てきている。ただ、デバイスファイルは自動的には作成されない物らしい。okプロンプトからboot -rして、-r付きで起動すると作成される。
# sync; sync; sync; init 0 ok boot -r
再起動後/dev/dsk以下を見るとエントリが増えていて、新しいディスクはc1t2d0s0として認識されている。
% ls /dev/dsk c0t6d0s0@ c0t6d0s2@ c0t6d0s4@ c0t6d0s6@ c1t1d0s0@ c1t1d0s2@ c1t1d0s4@ c1t1d0s6@ c1t2d0s0@ c1t2d0s2@ c1t2d0s4@ c1t2d0s6@ c0t6d0s1@ c0t6d0s3@ c0t6d0s5@ c0t6d0s7@ c1t1d0s1@ c1t1d0s3@ c1t1d0s5@ c1t1d0s7@ c1t2d0s1@ c1t2d0s3@ c1t2d0s5@ c1t2d0s7@
パーティションテーブル
format(1)で見るには、追加ディスクはUFS形式で使うように既にスライスを切ってあるらしい。
Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 824 4.00GB (825/0/0) 8395200 1 swap wu 825 - 2473 8.00GB (1649/0/0) 16780224 2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312 3 unassigned wm 2474 - 4534 10.00GB (2061/0/0) 20972736 4 unassigned wm 4535 - 6595 10.00GB (2061/0/0) 20972736 5 unassigned wm 6596 - 10717 20.00GB (4122/0/0) 41945472 6 unassigned wm 10718 - 14065 16.25GB (3348/0/0) 34069248 7 unassigned wm 0 0 (0/0/0) 0
一方、今システムが入ってる古いディスクは全部が第0スライスに割り当てられている。
Part Tag Flag Cylinders Size Blocks 0 root wm 0 - 14086 68.35GB (14087/0/0) 143349312 1 unassigned wm 0 0 (0/0/0) 0 2 backup wm 0 - 14086 68.35GB (14087/0/0) 143349312 3 unassigned wm 0 0 (0/0/0) 0 4 unassigned wm 0 0 (0/0/0) 0 5 unassigned wm 0 0 (0/0/0) 0 6 unassigned wm 0 0 (0/0/0) 0 7 unassigned wm 0 0 (0/0/0) 0
これはSolarisのインストーラーが作成したものだけれども、要はディスク全体をZFS poolに突っ込んでるわけだ。これに従えばいいだろうと思って、新しいディスクも同様の切り方にした。
ZFS
で、できたスライスをZFS poolに追加する。
% sudo /usr/sbin/zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c1t1d0s0 ONLINE 0 0 0
errors: No known data errors
これが今の状況で、c1t1d0s0と新しいディスク(c1t2d0s0)をミラー化したいので次のようにする。
% sudo /usr/sbin/zpool attach rpool c1t1d0s0 c1t2d0s0 invalid vdev specification use '-f' to override the following errors: /dev/dsk/c1t2d0s0 contains a ufs filesystem.
なんか怒られる。ちょっと恐いけれども、-fしてみよう。
% sudo /usr/sbin/zpool attach -f rpool c1t1d0s0 c1t2d0s0 Please be sure to invoke installboot(1M) to make 'c1t2d0s0' bootable.
すると、今度はうまくいく。ディスクが同期を始めたらしく、アクセス音がする。状況を見てみると次のようになっている。
% sudo /usr/sbin/zpool status
pool: rpool
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h0m, 4.25% done, 0h11m to go
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0s0 ONLINE 0 0 0
c1t2d0s0 ONLINE 0 0 0 526M resilvered
errors: No known data errors
弾さんも言ってたけど、ZFSはメッセージが丁寧だね。
そして、しばらく待つと同期が終わったようであった。
% sudo /usr/sbin/zpool status
pool: rpool
state: ONLINE
scrub: resilver completed after 0h11m with 0 errors on Thu Feb 4 20:56:44 2010
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t1d0s0 ONLINE 0 0 0
c1t2d0s0 ONLINE 0 0 0 12.1G resilvered
errors: No known data errors
ブート情報
attachしたときに、zpoolがinstallbootがどうとか言っていた。このへんかな? そのままだと追加した方のディスクからは起動できないから、いざというときのためにブート情報を書き込むわけね。
案内通り次のようにする。
# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t2d0s0
で、一応終わりだと思われる。

コメント