OpenSolarisのルートファイルシステム(ブートディスク)をZFSでミラー化した

 最近自宅サーバ(ウェブ + 開発も一応含む)のホストOSをLinuxCentOS 5.2)からOpen Solaris 08.11 に移行しました。私の環境では、ウェブサーバや、リポジトリサーバはXenDomU(Linux CentOS 5.2)で利用しているため、ホストの移行は簡単でした。
 まあ、そんなこんなでOpenSolarisを使い始めて1ヶ月くらい経ちました。SolarisファイルシステムZFSをサポートしています。そこで、自動バックアップシステム構築の第一歩としてZFSを使ってルートファイルシステム(ブートディスク)のミラー化(RAID1)をやってみました。結構苦労したので、自分へのメモを兼ねてここに書いておきます。自分が苦労したポイントをまとめたついでに、実行したコマンドも載せておきます。ただし、記憶からたどってまとめたものであり、実際に正しく動くか完全に確かめていないので注意してください。

 まず私の環境(ML115 G5のSATA HDD)のディスクのデバイス名は次のようになっていました。

 ディスク追加までの流れは次のようになります。

  1. EFIパーティションである場合、Solarisパーティションを作る(format => fdisk)
  2. EFIラベルがついていると、attach できないため、EFIラベルを削除(format -e => label)
  3. ディスクのパーティションの設定をする(format => partition)
  4. ルートファイルシステムがあるプール(rpool)にディスクを追加する
  5. 追加したディスクに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