このエントリーをはてなブックマークに追加

ZFS

概要

ZFS(Zettabyte File System)は拡張性を実現しながら、管理しやすいファイルシステムです。 ZFSは、従来のファイルシステムとは異なり、堅牢性を保持したファイルシステムで不慮の電源断などが起こってもファイルシステムが破壊されることはありません。fsckコマンドも、ロギングやジャーナリングも必要ありません。

但し、Linuxにおいては安定版のリリースがまだです。(2012/04/01時点)

なので本番環境などにおいて実際に利用する場合は十分検討が必要だと思います。きっと素直にSolarisを利用したほうがいいでしょう。

ZFSの特長

  1. 高機能
    1. スナップショットを行うことが出来、リモートサーバへの差分転送バックアップも容易に行うことが出来る
    2. 重複排除機能(dedup)を利用可能
  2. 拡張性
    1. 世界初の128bitのファイルシステム
    2. 事実上無限大のファイルシステム(16エクサバイトまで)、またその大きさのファイルを1ファイルで構築可能
  3. 管理のしやすさ
    1. 管理コマンドの簡素化( zfs zpool の2つだけ )
    2. ストレージプールによるデバイスの隠蔽とストレージ管理の容易化
    3. 物理 DISK を集約し、1 つの仮想 DISK として管理・提供
    4. ストレージプールが足りなくなれば、ディスクを追加し少し設定するだけでストレージプール自体を拡張可能
    5. ボリューム管理は不要
  4. データの堅牢性
    1. データとチェックサムが分離しているためチェックサム自身の損傷にも対応可能
    2. ミラー、RAID-Z、RAID-Z2、RAID-Z3 の冗長機能を提供
    3. RAID構成によるデータ冗長化
    4. 実データを上書きせず、常にコピーブロックに対して変更するCopy-On-Write(COW)トランザクションファイルシステムモデル
    5. チェックサムとデータの自己修復
  5. 拡張性
    1. オンライン拡張が可能
  6. 柔軟性
    1. cifs , nfs , iscsi などに対応可能
    2. パーティション構成やファイルシステムサイズを容易に変更可能

コマンドについて

zfs を利用するためのコマンドは2つだけです。

  1. zfsコマンド概要
    1. ストレージプール上にファイルシステム作成、マウント
    2. スナップショットやクローンの作成
    3. ファイルシステムのバックアップ、リストア
  2. zpoolコマンド概要
    1. 物理ディスクからストレージプールを作成
    2. ディスクの冗長構成(RAID)を設定
    3. データ整合性チェック(ディスクスクラブ)

ディスクの必要数

増設時には各種類の最低必要本数が必要になります。

種類 機能 ディスクの最低必要本数
ミラー 通常のミラー構成 2本
RAID-Z シングルパリティの RAID-Z 構成でRAID5(シングルパリティ)に相当する 3本
RAID-Z2 ダブルパリティの RAID-Z 構成でRAID6(ダブルパリティ)に相当する 4本
RAID-Z3 トリプルパリティの RAID-Z 5本

インストール

Ubuntuでの利用方法ですが、ソースからであればどのディストリビューションでも余り違いは無いと思います。但し Ubuntu もしくは RedHat 系だとパッケージを作成することが出来ます。

また、、カーネルが新しくなる場合はカーネル組み込みではないため再度コンパイルが必要です。

ノート

最新版は、右記のURLで確認 http://zfsonlinux.org/

$ sudo apt-get install build-essential gawk zlib1g-dev uuid-dev alien
$ cd /usr/local/src
$ sudo wget http://github.com/downloads/zfsonlinux/spl/spl-0.6.0-rc8.tar.gz
$ sudo wget http://github.com/downloads/zfsonlinux/zfs/zfs-0.6.0-rc8.tar.gz
$ sudo tar -xvzf spl-0.6.0-rc8.tar.gz
$ cd spl-0.6.0-rc8/
$ sudo ./configure
$ sudo make
$ sudo make pkg
$ sudo dpkg -i \*deb
$ cd ..
$ sudo tar -xvzf zfs-0.6.0-rc8.tar.gz
$ cd zfs-0.6.0-rc8/
$ sudo ./configure
$ sudo make
$ sudo make pkg
$ sudo dpkg -i \*deb
$ sudo modprobe splat
$ sudo modprobe zfs

ZFSの利用

ディスクの用意

HDDやSSDなどの空ディスクが3つとか4つあればそれを利用したほうがいいですがなければ検証であればイメージやディレクトリでも代用可能です。

スナップショットを利用できるのでイメージでの利用も全く意味がないという訳でもないと思います。スナップショットのコマンドは記述していないので今度追加しておきます。

ここでは、100Gのディスクイメージを8つ用意して利用してみます。後でまた1つ追加しますので計9つになります。

$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs1.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs2.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs3.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs4.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs5.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs6.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs7.img
$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs8.img

ストレージプールの作成

ストレージプールとは、仮想的なストレージデバイスのことで 物理ディスク や``パーティション`` もしくは データファイル で構成されます。ディスクスライスでなく物理ディスク全体を利用することが推奨されています。

単一デバイスでストレージプールを作成

ミラーもRAIDも組んでなくてもZFSは利用できます。但し対障害性は何もありません。

$ sudo zpool create zpool1 /root/zfs1.img

ストレージプールを削除する場合は以下のコマンドを実行します。

$ sudo zpool destroy zpool1

ミラー構成のストレージプールを作成

ディスクを2つ指定し mirror オプションを付与するとミラー構成のストレージプールを作成出来ます。

$ sudo zpool create zpool1 mirror /root/zfs1.img /root/zfs2.img

ディスクを追加する場合

ミラー構成の追加ディスクは2台必要です。

$ sudo zpool add zpool1 mirror /root/zfs3.img /root/zfs4.img

ストレージプール作成と同時にマウントポイントを指定する場合はオプション -m を付与してコマンドを実行します。

$ sudo zpool create -m /root/test zool1 mirror /root/zfs1.img /root/zfs2.img

ストライプ構成のストレージプールを作成

mirrorを指定しないとストライプ構成になります。これも冗長構成ではありませんので気をつける必要があります。

$ sudo zpool create zpool1 /root/zfs1.img /root/zfs2.img

RAID-Z構成のストレージプールを作成

RAID5相当の構成になりディスクは3台必要になります。容量はディスク数-1台です。

$ sudo zpool create zpool1 raidz1 /root/zfs1.img /root/zfs2.img /root/zfs3.img

ディスクを追加する場合

RAID-Zの場合、追加ディスクは3台必要です。

$ sudo zpool add zpool1 raidz1 /root/zfs4.img /root/zfs5.img /root/zfs6.img

RAID-Z2構成のストレージプールを作成

RAID6相当の構成でパリティが2台分必要になります。容量はディスク数-2台で最低4台ディスクが必要です。

$ sudo zpool create zpool1 raidz2 /root/zfs1.img /root/zfs2.img /root/zfs3.img /root/zfs4.img

ディスクを追加する場合

RAID-Z2構成の場合、追加ディスクは4台必要です。

$ sudo zpool add zpool1 raidz2 /root/zfs5.img /root/zfs6.img /root/zfs7.img /root/zfs8.img

設定確認

ストレージプールの状態を確認

$ sudo zpool status

作成したストレージプールを一覧表示

$ sudo zpool list

データセット情報を表示

$ sudo zfs list
$ df

ミラーの詳細情報まで確認

$ sudo zpool iostat -v

ディスク交換

障害などが発生したらディスクを交換する必要があります。

交換対象のディスクをオフラインにする

$ sudo zpool offline zpool1 /root/zfs8.img

ディスク交換

ここでは、新規ディスクイメージを作ってディスク交換の振りをやってみます。

$ dd if=/dev/zero bs=1  count=1 bs=1 seek=100G of=/root/zfs9.img

ディスク交換後ディスクをリプレース

シャットダウンして同じ場所にディスクを追加した場合は二台指定する必要はありません。最初のデバイスだけです。

$ sudo zpool replace zpool1 /root/zfs8.img /root/zfs9.img

確認

$ sudo zpool status

デバイスファイルの切り出し

デバイスファイルを切り出して以下のような利用を行うことが出来ます。他にも色々な用途で利用可能だと思います。

  1. iscsiのターゲットとして利用する
  2. GlusterFSのブリックとして利用する ZFSは拡張属性を付与できないので ZFS の領域を直接 GlusterFS に利用できません。 ZFS のストレージプールを一旦デバイスファイルとして切り出してマウントした領域を GlusterFS で利用できるフォーマット形式にすると利用可能になります。
$ sudo zfs create -V 100g zpool1/zdev

上記コマンドの結果、 /dev/zvol/zpool1/zdev が作成されるのでiscsiのターゲットや GlusterFS を利用するために再マウントしたりしましょう。