hack のためのネタ帳, etc,,,

Zettabyte File System

参考になるページ


  • 優雅な生活の設計と実装 / 2011-09: ZFS のトラブル、他
  • pcmbeta@ウィキ / ZFSチューニング
  • 日曜研究室 / タグアーカイブ: ZFS
  • 富士通 / コンピュータプラットフォーム / サーバ / UNIXサーバ / SPARC Enterprise / 技術情報 Technical Park # ZFS
  • Macquarie University (Sydney, Australia) / Faculty of Sicence / Department of Computing / Technical Report / 2009-06-05: [[Digital Crime Scene Investigation for
the Zettabyte File System>http://web.science.mq.edu.au/~rdale/teaching/itec8...]]

version 対応状況

環境

OS等package等ZFS PoolZFS Filesystem備考
Ubuntu 10.04zfs-fuze 0.6.0-1v16v4
Ubuntu 10.10zfs-fuse 0.6.9-1v23v4
Debian unstable 20101229zfs-fuse 0.6.9-1v23v4
Debian unstable 20120915zfs-fuse 0.7.0-9v23v4
Debian GNU/kFreeBSD amd64 6.0/20100913v14v3参考
OpenIndiana 147v28?参考
Solaris 11 Expressv31v5参考
KQ Infotech ZFS for Linux betav18?参考
ZFS on Linux 0.5.2v28v5参考
FreeBSD 7.3v13?参考
FreeBSD 8 stablev14?参考
FreeBSD 9 devv15?参考
FreeBSD 9 devZFS v28 patchv28?参考

機能

機能version
deduplicationZFS Pool Version 21
encryptionZFS Pool Version 30

ports

Ubuntu 10.04 で zfs-fuse (2010-05-19)

zfs-fuse (2010-05-19 現在 0.6.0-1) を install
install 時に zpool import -a -f されるところでかなり時間がかかる。

/tmp 以下にループバックでテスト用領域作成。
touch /tmp/zfspart1
dd if=/dev/zero of=/tmp/zfspart1 bs=1 count=0 seek=128MB
なお64M以上ないと pool に加えられない。

新規に mypool を作成し zfspart1 を登録
zpool create mypool /tmp/zfspart1

list の確認
zpool list

status の確認
zpool status

mount point の確認
zfs list

mount の確認
zfs mount

パラメータの確認
zfs get all mypool

dedup(重複排除)の設定
zfs set dedup=on mypool
0.6.0-1 では未対応のため失敗する。残念。

umount
zfs umount mypool

すべて mount
zfs mount -a

すべて umount
zfs umount -a

export
zpool export mypool

import されてない pool の確認
zpool import -d /tmp
「-d」がないと多分 /dev 以下を検索する。これはかなり時間がかかる。

mypool のみ import
zpool import -d /tmp mypool

すべて import
zpool import -d /tmp -a

pool にストレージの追加
touch /tmp/zfspart2
dd if=/dev/zero of=/tmp/zfspart2 bs=1 count=0 seek=128MB
zpool add mypool /tmp/zfspart2
ストライプ(RAID0?)になる
remove も detach もできないので注意
運用中の実ドライブでやったら多分泣ける(T T)
mypool1 下の fs1 を @20161213 と言う名前で snapshot
zfs snap mypool1/fs1@20161213

mypool1 下の fs1@20161213 を mypool2 下の fs1 へバックアップ
zfs send mypool1/fs1@20161213 | zfs recv -v mypool2/fs1

filesystem, snapshot 等を全て表示
zfs list -t all
AFT 等を採用して物理セクタが 512B でないドライブの場合、例えば物理セクターが 4KiB なら ashift=12 (2^12 = 4096 と言う意味)としておく必要があるらしい。
この設定は pool 作成時に例えば以下のようにオプションを与えることで行うことが出来るようだ。
# zpool create -o ashift=12 tank sdx
しかし、少なくとも 2012-09-15 現在、Debian sid の zfs-fuze 0.7.0-9 では「property 'ashift' is not a valid pool property」と言われて失敗する。ZFS on Linux なら OK なのかも?
きちんと設定されているかどうかは以下のようにして調べる。
# zdb -C poolname | grep ashift

FreeBSD 系では gnop コマンドでブロックファイルをラップして論理セクターサイズを 4096 に見せかけておけば自動的に ashift を設定してくれる模様。

参考:
ZFS の physical vdev の構造については以下に解説がある。 この資料によると、256KiB の label が先頭に2つ末尾に2つの計4つ配置されていると紹介されているが、これは若干正確ではないようだ。
末尾の label について調べてみたところ、実際には 256KiB 境界にアライメントされていた。
従って ZFS を作成したブロックデバイスのサイズを SIZE バイトとした場合、
バイト単位だと 0B, 262144B, (SIZE/262144*262144-262144)B, (SIZE/262144*262144-524288)B から 262144B ずつ、
512B のセクター単位だと 0s, 512s, (SIZE/512/512*512-512)s, (SIZE/512*512-1024)s から 512s ずつが label である。

つまり ZFS を構成する際のブロックデバイスは 256KiB の倍数でないと末尾に無駄が生じることになる。

Tips

pool 名の変更

一旦 export した後、再度 import する際に新しい pool 名を与えると良い。

雑感

スペア用ドライブの制約

mirror や raid にする場合、構築時には異なる容量のデバイスを混在しても、最小の容量にそろえてくれる。
しかし attache, replace する場合には、小さい容量のデバイスを受け付けてくれない。
通常は同一の製品で固めるため特に問題はないはずだが、緊急避難的にも使えないのはちょっと不便。
pool の容量を縮小できれば attach, replace できるはずなんだけど少なくともv23の段階では縮小ができない。
小さいほうに一旦 send, recv して attach って方法は可能だけど、時間かかるし冗長性を一旦切っちゃうのも不安。
保険的にパーティション切って、少し容量捨てとくべきか悩むところ。
ZFS は RAID レベルを後から変更できない。
しかし、良いか悪いかは別にして degrade した状態で運用することは可能。
なので、構築時に sparse file でダミーのブロックデバイスを食わせて raid-z3 で構築しておいて、2 本欠けた raid-z1 相当で運用するとか、1 本欠けた raid-z2 相当で運用するとかいう方法は現実問題として有効なのではなかろうか?、なんて事をふと思いついた。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です