ストレージプールの作成

利用するディスクにパーティションを作成したら,zpool コマンドで一つのプールとして利用する.

プールの作成は zpool create プール名 利用するディスク ... コマンドを利用する.

利用するディスクについては,mirror,raidz,raidz2,raidz3などのオプションも利用することができる.

Oracle Solaris ZFS 管理ガイド "ZFS ストレージプールを作成する"

http://docs.oracle.com/cd/E19253-01/819-6260/gayob/index.html

紙面の都合上,複数行にわたってコマンドを記載しているが,当然一行で実行していただいて構わない.

単一のディスクから作成

zfs0 パーティションから pool0 というプールを作る場合には.

$ sudo zpool create pool0 /dev/disk/by-partlabel/zfs0

と実行することにより作成できる.

プールの構成確認

zpool status コマンドで,ストレージプールの構成と健全性の確認ができる.

上記の例で,単一のディスクからプールを作成した場合は次のようになる.

$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      zfs0      ONLINE       0     0     0

errors: No known data errors

これにより,pool0zfs0 から構成されており,オンラインでエラーが検出されていないことが確認できる.

プールの削除

一度作ったプールを削除するには zpool destroy コマンドを利用する.

$ sudo zpool destroy pool0

ストライピング

ディスクを複数指定することにより,ストライピングでディスクを束ねることができる. 単純に本数の数だけ容量が増えるが,一台が故障するだけで全てのデータを失うため,重要な用途では利用しないことを推奨する.

$ sudo zpool create pool0 /dev/disk/by-partlabel/zfs0 \
                          /dev/disk/by-partlabel/zfs1 \
                          /dev/disk/by-partlabel/zfs2
$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      zfs0      ONLINE       0     0     0
      zfs1      ONLINE       0     0     0
      zfs2      ONLINE       0     0     0

errors: No known data errors

ミラーリング

mirrorオプションを利用して,zfs0, zfs1, zfs2 からミラーリングを利用して作成する.

$ sudo zpool create pool0 mirror /dev/disk/by-partlabel/zfs0 \
                                 /dev/disk/by-partlabel/zfs1 \
                                 /dev/disk/by-partlabel/zfs2
$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
errors: No known data errors

ストライピングと異なり,mirror-0 という名前のミラーリングデバイスの下に,zfs0, zfs1, zfs2 があることが確認できる.

RAID-Z

mirrorの代わりに,raidzからraidz3を指定することで,パリティ付きのプールが作成できる.

$ sudo zpool create pool0 raidz2 /dev/disk/by-partlabel/zfs0 \
                                 /dev/disk/by-partlabel/zfs1 \
                                 /dev/disk/by-partlabel/zfs2 \
                                 /dev/disk/by-partlabel/zfs3 \
                                 /dev/disk/by-partlabel/zfs4
$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      raidz2-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
        zfs3    ONLINE       0     0     0
        zfs4    ONLINE       0     0     0

errors: No known data errors

RAID機能を組み合わせる

ミラーリングやRAID-Zと,ストライピングを組み合わせることで,複雑な構成のプールも作成できる.

RAID1+0 (ミラーリングのストライピング)

$ sudo zpool create pool0 mirror /dev/disk/by-partlabel/zfs0 \
                                 /dev/disk/by-partlabel/zfs1 \
                          mirror /dev/disk/by-partlabel/zfs2 \
                                 /dev/disk/by-partlabel/zfs3
$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
      mirror-1  ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
        zfs3    ONLINE       0     0     0

errors: No known data errors

ディスク2台のミラーリングされたデバイス,mirror-0mirror-1がストライピング構成になっていることが確認できる.

RAID-Zとストライピング

RAIDZ構成は本数が増えるとパフォーマンスが低下するため,ある程度の数でストライピングしたほうが良いと言われている(未確認).以下の例では5本からなるRAIDZ2をストライピングし,10台構成のプールを作成している.

$ sudo zpool create pool0 raidz2 /dev/disk/by-partlabel/zfs0 \
                                 /dev/disk/by-partlabel/zfs1 \
                                 /dev/disk/by-partlabel/zfs2 \
                                 /dev/disk/by-partlabel/zfs3 \
                                 /dev/disk/by-partlabel/zfs4 \
                          raidz2 /dev/disk/by-partlabel/zfs5 \
                                 /dev/disk/by-partlabel/zfs6 \
                                 /dev/disk/by-partlabel/zfs7 \
                                 /dev/disk/by-partlabel/zfs8 \
                                 /dev/disk/by-partlabel/zfs9
$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      raidz2-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
        zfs3    ONLINE       0     0     0
        zfs4    ONLINE       0     0     0
      raidz2-1  ONLINE       0     0     0
        zfs5    ONLINE       0     0     0
        zfs6    ONLINE       0     0     0
        zfs7    ONLINE       0     0     0
        zfs8    ONLINE       0     0     0
        zfs9    ONLINE       0     0     0

errors: No known data errors

特殊なデバイス

ZFSではデータを保存するディスク以外に,

  • ログデバイス
  • キャッシュデバイス
  • スペアデバイス

を指定することができる.

これらはプール作成後に動的に追加したり削除したりすることも可能であるが,以下では作成時に指定する例を示す.

動的に扱うには,zpool addzpool removeコマンドについてドキュメントを参照されたい.

ログデバイス

ZFSでは書き込み中の停電に備えて,実行中のトランザクションの情報をディスクに保持している. デフォルトではデータと同じディスクに保存されているが,これをアクセスが高速なSSDに設置することで,パフォーマンスの向上が期待できる.

ストレージプールの作成時に log オプションを指定することで明示的にログデバイスを指定できる. ログデバイスは安全のためミラーリングにすることを推奨する.

$ sudo zpool create pool0 raidz /dev/disk/by-partlabel/zfs0 \
                                /dev/disk/by-partlabel/zfs1 \
                                /dev/disk/by-partlabel/zfs2 \
                          log mirror /dev/disk/by-partlabel/log0 \
                                     /dev/disk/by-partlabel/log1
ubuntu@zfs:~$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
    logs
      mirror-1  ONLINE       0     0     0
        log0    ONLINE       0     0     0
        log1    ONLINE       0     0     0

errors: No known data errors

トランザクションログは最大でメモリ容量の半分である.

L2ARC (キャッシュ)

ZFSではキャッシュをメモリ上に持っているが,メモリから溢れた分を別のデバイスに保持することができる.この2次的キャッシュをL2ARCと呼ぶ.このL2ARCに高速なSSDを割り当てることで,読み込みパフォーマンスの向上が期待できる.

L2ARC上のデータは喪失しても問題ないため,ストライピングにしてもよい.

L2ARCはcacheオプションで指定できる.

$ sudo zpool create pool0 raidz /dev/disk/by-partlabel/zfs0 \
                                /dev/disk/by-partlabel/zfs1 \
                                /dev/disk/by-partlabel/zfs2 \
                          cache /dev/disk/by-partlabel/cache0 \
                                /dev/disk/by-partlabel/cache1
ubuntu@zfs:~$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
    cache
      cache0    ONLINE       0     0     0
      cache1    ONLINE       0     0     0

errors: No known data errors

ホットスペア

一部のディスクが破損したときのために,spareオプションにて,予備のディスクを指定することができる.

$ sudo zpool create pool0 raidz /dev/disk/by-partlabel/zfs0 \
                                /dev/disk/by-partlabel/zfs1 \
                                /dev/disk/by-partlabel/zfs2 \
                          spare /dev/disk/by-partlabel/spare0 \
                                /dev/disk/by-partlabel/spare1
ubuntu@zfs:~$ sudo zpool status
  pool: pool0
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    pool0       ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        zfs0    ONLINE       0     0     0
        zfs1    ONLINE       0     0     0
        zfs2    ONLINE       0     0     0
    spares
      spare0    ONLINE       0     0     0
      spare1    ONLINE       0     0     0

errors: No known data errors

ホットスペアの扱いについては,公式ドキュメントを参照されたい.

Oracle Solaris ZFS 管理ガイド "ストレージプールにホットスペアを指定する"

http://docs.oracle.com/cd/E19253-01/819-6260/gcvcw/index.html

プールの移動

プールを取り外し,別のホストに接続することもあるだろう.その場合には,zpool exportコマンドと,zpool importコマンドを利用する.

プールの取り外し

プールをホストから切り離すには,zpool exportコマンドを実行するだけである.

$ sudo zpool export pool0
$ sudo zpool list
no pools available

zpool exportの実行後,プールが検出されていないことが確認できる.

プールの接続

プールをホストに接続するには,zpool importコマンドを利用する.

インポート可能なプールの検索

zpool importコマンドを引数無しで実行すると,インポート可能なプールが表示される.

$ sudo zpool import
   pool: pool0
     id: 13553525836140096658
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    pool0       ONLINE
      raidz1-0  ONLINE
        vdb1    ONLINE
        vdb2    ONLINE
        vdb3    ONLINE
    cache
      vdb4
      vdb5

しかしながら,デフォルトでは /dev から検索されるため,GPTのラベルを利用していたにもかかわらず,生のデバイス名が利用されていることがわかる.

このような場合には,-dオプションで検索ディレクトリを指定することで理想的な参照パスを利用することができる.

$ sudo zpool import -d /dev/disk/by-partlabel/
   pool: pool0
     id: 13553525836140096658
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    pool0       ONLINE
      raidz1-0  ONLINE
        zfs0    ONLINE
        zfs1    ONLINE
        zfs2    ONLINE
    cache
      zfs3
      zfs4

プールのインポート

上記で正しくインポートできそうであると確認できたら,プール名を指定して zpool importを実行する.

$ sudo zpool import -d /dev/disk/by-partlabel/ pool0
$ sudo zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
pool0  29.2G   373K  29.2G     0%  1.00x  ONLINE  -

もしも,元のホストでexportをせずに取り外してしまった場合には,次のようなエラーが発生する.

cannot import 'pool0': pool may be in use on another system
use '-f' to import anyway

強制的にインポートするには,-fオプションをつければよい.

ディスクの追加について

プールを利用中にあとからディスクを追加したくなることもあるだろう.そのような場合には zpool add コマンドを利用する.

ただし,制約もあり,RAID-Zの構成にディスクを追加することはできない. どうしても追加が必要な場合にはストライピングとしてあらたにRAID-Zやミラーリング構成を追加する必要がある.

しかしながら,このような非対称な構成は推奨されていないため,可能な限りバックアップを作成し,一からプールを作り直すことをおすすめする.

ミラーリングやストライピング構成にディスクを追加することはこの限りではない.

results matching ""

    No results matching ""