技術

FreeBSDでZFS pool version 28を使う

走り書き的メモです。

今回のためだけに新しい環境を用意した。
既存の環境でやるのはおすすめしない。
あと、FreeBSD初心者なのでマズイ点が多々あるかも。

・9-CURRENTをインストール

StandardでDeveloper, User後なんだっけ?とりあえず全部インストール。
うちの環境ではFTPインストールやそれに準ずる方法がエラーで何故か使えなかったので、インストールDVDからインストールした。

・ソースの取得

2010/12/12のZFSパッチを使うのでその日のソースを取得する。

cp /usr/share/examples/cvsup/standard-supfile mysup101212
vi mysup101212

mysup101212の編集内容
1行置き換える
*default host=CHANGE_THIS.jp.FreeBSD.org

*default host=cvsup.jp.FreeBSD.org

1行を適当な箇所に追加
*default date=2010.12.12.00.00.00

csup mysup101212

# 時間がかかる

・zpool v28を有効にするパッチを当てる(現時点で9-CURRENTのデフォはv15)

cd /usr/src
fetch http://people.freebsd.org/~pjd/patches/zfs_20101212.patch.bz2
bzip2 -d zfs_20101212.patch.bz2
patch -E -p0 < zfs_20101212.patch

・ベースシステムの構築(4コア64bitなのでこんなオプション)

make -j8 buildworld TARGET_ARCH=amd64 

# めっちゃ時間がかかる

・カーネルの構築

cd /usr/src/sys/amd64/conf
mkdir /root/mykernels
cp GENERIC /root/mykernels/ZFSV28
ln -s /root/mykernels/ZFSV28
vi ZFSV28

以下のオプションを含むようにする。

options 	KDB
options 	DDB
options 	INVARIANTS
options 	INVARIANT_SUPPORT
options 	WITNESS
options 	WITNESS_SKIPSPIN
options 	DEBUG_LOCKS
options 	DEBUG_VFS_LOCKS

最後の2つ以外はすでに入ってるはず。

cd /usr/src
make -j8 buildkernel TARGET_ARCH=amd64 KERNCONF=ZFSV28

# まぁまぁ時間がかかる

・カーネルのインストール

make installkernel TARGET_ARCH=amd64 KERNCONF=ZFSV28

・再起動してシングルユーザーモードで起動した後。

fsck -p
mount -u /
mount -a -t ufs
swapon -a

・新しいシステムバイナリのインストール

cd /usr/src
make installworld TARGET_ARCH=amd64 KERNCONF=ZFSV28

# ちょっと時間がかかる

・設定ファイルなどのマージ

cp -Rp /etc /etc.old
mergemaster

基本的にi応答(新しい設定を反映する)でいいと思う。

・再起動

shutdown -r now

・zpoolバージョンの確認

zpool upgrade -v
This system is currently running ZFS pool version 28.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
1   Initial ZFS version
2   Ditto blocks (replicated metadata)
3   Hot spares and double parity RAID-Z
4   zpool history
5   Compression using the gzip algorithm
6   bootfs pool property
7   Separate intent log devices
8   Delegated administration
9   refquota and refreservation properties
10  Cache devices
11  Improved scrub performance
12  Snapshot properties
13  snapused property
14  passthrough-x aclinherit
15  user/group space accounting
16  stmf property support
17  Triple-parity RAID-Z
18  Snapshot user holds
19  Log device removal
20  Compression using zle (zero-length encoding)
21  Deduplication
22  Received properties
23  Slim ZIL
24  System attributes
25  Improved scrub stats
26  Improved snapshot deletion performance
27  Improved snapshot creation performance
28  Multiple vdev replacements

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.

・deduplicationのテスト(そもそもコレが目的)

mkdir /usr/zfstest

# デフォのままインストールしたら/usrが一番容量が大きかったため/usrにテストデータを置く。

cd /usr/zfstest

1GBのディスクイメージを4つ用意する

dd if=/dev/zero of=disk1.img bs=1m count=1k
dd if=/dev/zero of=disk2.img bs=1m count=1k
dd if=/dev/zero of=disk3.img bs=1m count=1k
dd if=/dev/zero of=disk4.img bs=1m count=1k

raidz2のプールを作成

zpool create mypool raidz2 /usr/zfstest/disk1.img /usr/zfstest/disk2.img /usr/zfstest/disk3.img /usr/zfstest/disk4.img
zfs set dedup=on mypool
zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   128K  1.95G  44.8K  /mypool

ファイルを置いてみる

dd if=/dev/urandom of=/mypool/test.dat bs=1k count=100k

# 遅い物理ディスク上にイメージ4つものせてるから激遅(汗
# 256KB/sぐらい。やべぇw

zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   101M  1.85G  99.9M  /mypool
cp /mypool/test.dat /mypool/test.dat.copy
zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   201M  1.84G   200M  /mypool
cp /mypool/test.dat /mypool/test.dat.copy2
zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool   301M  1.84G   300M  /mypool

AVAILが減らない キタ━(゚∀゚)━!

もしdedupがなかったら「ディスク容量が足りなくなっちゃう!」ってところまでやってみよう

cp /mypool/test.dat /mypool/test.dat.copy3
(略)
cp /mypool/test.dat /mypool/test.dat.copy21
zfs list
NAME     USED  AVAIL  REFER  MOUNTPOINT
mypool  2.15G  1.81G  2.15G  /mypool

元々のAVAILが1.85G、そして現在のUSEDが2.15G・・・
ムフフw

dedup onとoffの性能差も調べたいが、やるなら実運用で使えるようなハードウェアを手に入れてからだな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です



※画像をクリックして別の画像を表示

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください