2009年2月24日火曜日

ZFS のデバイスを「物理⇔仮想」で移植(できるかもしれない)

前回、ZFSのデバイス管理について書いたが、ふとわいた疑問があったのでテストしてみた。
各デバイスは中身だけあればいいんだから、ddでいくらでもコピーできるんじゃないのか。
 
 


テスト用ZFSストレージプールの作成


物理HDDをパーティションで区切ったもの "c1d1p2 c1d1p3 c1d1p4" の3つでプールを作った。
RAWデバイスでやりたかったがちょっと手元になし。
 

ステータスを見るとこうだ。
$zpool status
プール: zfs01
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:
 
NAME STATE READ WRITE CKSUM
zfs01 ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0
c1d1p4 ONLINE 0 0 0
 
エラー: 既知のデータエラーはありません

 


では、おもむろにエクスポートしよう。
$zpool export zfs01

 
準備OK。
 
 

ddコマンドでデバイスを少しファイルに書き出し


さて、先ほどのプールに使ったデバイスたち、当然ZFSのメタ情報が頭のほうに入っているに違いない。
ということで dd コマンドを使って先頭のほうだけファイルに書き出してみよう。
"/zdev3/" というフォルダに、3つのパーティションからそれぞれ "p2 p3 p4" というファイルで書き出した。これらは合計1MBにも満たない。

$dd if=/dev/dsk/c1d1p2 of=/zdev3/p2 count=512
書き込まれたレコード数 512+0
読み出されたレコード数 512+0

$dd if=/dev/dsk/c1d1p3 of=/zdev3/p3 count=512
書き込まれたレコード数 512+0
読み出されたレコード数 512+0

$dd if=/dev/dsk/c1d1p4 of=/zdev3/p4 count=512
書き込まれたレコード数 512+0
読み出されたレコード数 512+0

 
 


いんちきファイルをインポート認識するか?


さあ、さっき作ったファイルを置いたディレクトリを指定して、インポート検出してみる。

$zpool import -d /zdev3
プール: zfs01
ID: 9060992260761082608
状態: ONLINE
アクション: プールの名前または数値識別子を使用してプールをインポートできます。
構成:
 
zfs01 ONLINE
/zdev3/p2 ONLINE
/zdev3/p3 ONLINE
/zdev3/p4 ONLINE


認識するし。。。オイオイ、この節操なしめ。
 
 

まとめ


ZFSのストレージプール用デバイスは、うまいことやれば物理仮想問わずに乗せ換えが自由自在かもしれない。
懐が深い気もするが、穿った見方をすれば結構いいかげんに作ることで堅牢っぽく見せているともいえるか。
 

今度は容量をちゃんと確保して、RAWからファイルに書きだしてZFSを再構築したいな。