OpenSolarisのルートファイルシステム(ブートディスク)をZFSでミラー化した
最近自宅サーバ(ウェブ + 開発も一応含む)のホストOSをLinux(CentOS 5.2)からOpen Solaris 08.11 に移行しました。私の環境では、ウェブサーバや、リポジトリサーバはXenのDomU(Linux CentOS 5.2)で利用しているため、ホストの移行は簡単でした。
まあ、そんなこんなでOpenSolarisを使い始めて1ヶ月くらい経ちました。SolarisはファイルシステムのZFSをサポートしています。そこで、自動バックアップシステム構築の第一歩としてZFSを使ってルートファイルシステム(ブートディスク)のミラー化(RAID1)をやってみました。結構苦労したので、自分へのメモを兼ねてここに書いておきます。自分が苦労したポイントをまとめたついでに、実行したコマンドも載せておきます。ただし、記憶からたどってまとめたものであり、実際に正しく動くか完全に確かめていないので注意してください。
まず私の環境(ML115 G5のSATA HDD)のディスクのデバイス名は次のようになっていました。
- c3t0d0:ルートファイルシステムのあるブートディスク
- c3t1d0:追加するディスク
ディスク追加までの流れは次のようになります。
- EFIパーティションである場合、Solarisパーティションを作る(format => fdisk)
- EFIラベルがついていると、attach できないため、EFIラベルを削除(format -e
=> label) - ディスクのパーティションの設定をする(format => partition)
- ルートファイルシステムがあるプール(rpool)にディスクを追加する
- 追加したディスクにGRUBをインストールする
EFIラベル/EFIパーティションのディスクは、ルートファイルシステムに追加することができません。そのため、1, 2番を済ませます。
次に、ルートファイルシステムはブートディスクでもあるため、ディスクの0番のパーティションに対してミラー化できるようにする必要があります。これが、3番目です。
formatコマンドから、partitionを呼び出し、0番目のパーティションのサイズを2番(backup)より少し小さいサイズにしておきます(backup - bootくらいの大きさが理想?)。その状態でzpoolコマンドでミラーの設定を行い、その後GRUBをインストールします。0番目のパーティションというのは、zpoolコマンドで指定するときのデバイス名のc3t1ds0s0のs0に相当します。
例として、私の環境のパーティションを次に示します。ちなみに、0番目のタグが「unassigned」になっているのと、大きさが中途半端なのは私の設定ミスです。
# format c3t1d0 format> partition partition> print Current partition table (original): Total disk cylinders available: 60798 + 2 (reserved cylinders) Part Tag Flag Cylinders Size Blocks 0 unassigned wm 1 - 60702 465.00GB (60702/0/0) 975177630 1 unassigned wm 0 0 (0/0/0) 0 2 backup wu 0 - 60797 465.74GB (60798/0/0) 976719870 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 60703 - 60797 745.20MB (95/0/0) 1526175 7 unassigned wm 0 0 (0/0/0) 0 8 boot wu 0 - 0 7.84MB (1/0/0) 16065 9 unassigned wm 0 0 (0/0/0) 0
ミラーの再構築(resilver)まで一通り完了(zpool statusで確認)したら、マシンを再起動してミラー化したディスクからブートできるか確認します。
注意:ミラーの再構築が終わっていない状態で、追加したディスクから起動するとGRUBの起動時にInconsistent Filesystem などとエラーが出るので注意。
# format -e c3t1d0s0 format> label [0] SMI Label [1] EFI Label Specify Label type[1]: 0 (このへんで確認メッセージが出る) format>quit # zpool attach -f rpool c3t0d0s0 c3t1d0s0 # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3t1d0s0
次のフォーラムを参考にしました。が、最初のスレッドでは2番目のパーティション(s2)をattachしようとしているので注意(installgrubコマンドで失敗します)。
http://www.opensolaris.org/jive/thread.jspa?messageID=331284
http://www.opensolaris.org/jive/thread.jspa?threadID=91506
めでたく完了すると、statusで次のように表示されます。
suma@hyper ~$ zpool status pool: rpool state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c3t0d0s0 ONLINE 0 0 0 c3t1d0s0 ONLINE 0 0 0