ZFSの基本的な使い方とZFSとEXT4のベンチマーク比較

ZFSの基本的な使い方と、ZFSEXT4ベンチマーク比較をまとめた。
 

ZFSの使い方

初期

一番最初は何もない。

[root@kvm ~]# zpool list
no pools available
[root@kvm ~]# zfs list
no datasets available

 

ストレージプール作成

ストレージプール、tankを作成。

# zpool create tank /dev/sdd

 

プール確認
[root@kvm ~]# zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank  2.72T  91.5K  2.72T     0%  1.00x  ONLINE  -
[root@kvm ~]# zpool status
  pool: tank
 state: ONLINE
 scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	tank        ONLINE       0     0     0
	  sdd       ONLINE       0     0     0

errors: No known data errors

 

FS作成

FS、homeを作成。

# zfs create tank/home

 

FS確認
[root@kvm ~]# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank        130K  2.68T    31K  /tank
tank/home    30K  2.68T    30K  /tank/home

 

ファイル作成
[root@kvm ~]# dd if=/dev/urandom of=/tank/home/tmpfile1 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.246428 s, 4.3 MB/s
[root@kvm ~]# 
[root@kvm ~]# ll /tank/home/
合計 1029
-rw-r--r--. 1 root root 1048576  7月 17 01:29 2012 tmpfile1
[root@kvm ~]# 
[root@kvm ~]# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank       1.13M  2.68T    31K  /tank
tank/home  1.03M  2.68T  1.03M  /tank/home

 

スナップショット作成

tank/homeのスナップショットを取る。
スナップショットの名前はss1とする。

[root@kvm ~]# zfs snapshot tank/home@ss1
[root@kvm ~]# 
[root@kvm ~]# zfs list -t all
NAME            USED  AVAIL  REFER  MOUNTPOINT
tank           1.13M  2.68T    31K  /tank
tank/home      1.03M  2.68T  1.03M  /tank/home
tank/home@ss1      0      -  1.03M  -

 

スナップショット差分チェック

スナップショットを取ってからFSのサイズをチェック。
tank/homeは、追加した1MB分が増加。
tank/home@ss1は、tank/homeとの差分が1MB増加。

[root@kvm ~]# dd if=/dev/urandom of=/tank/home/tmpfile2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.242763 s, 4.3 MB/s
[root@kvm ~]# 
[root@kvm ~]# ll /tank/home/
合計 2055
-rw-r--r--. 1 root root 1048576  7月 17 01:29 2012 tmpfile1
-rw-r--r--. 1 root root 1048576  7月 17 01:36 2012 tmpfile2
[root@kvm ~]# 
[root@kvm ~]# zfs list -t all
NAME            USED  AVAIL  REFER  MOUNTPOINT
tank           2.33M  2.68T    31K  /tank
tank/home      2.05M  2.68T  2.04M  /tank/home
tank/home@ss1    19K      -  1.03M  -

 

FSのクローンを作る

tank/home@ss1のクローン、tank/home_cloneを作る。

[root@kvm ~]# zfs clone tank/home@ss1 tank/home_clone
[root@kvm ~]# 
[root@kvm ~]# zfs list -t all
NAME              USED  AVAIL  REFER  MOUNTPOINT
tank             2.20M  2.68T    32K  /tank
tank/home        2.05M  2.68T  2.04M  /tank/home
tank/home@ss1      19K      -  1.03M  -
tank/home_clone     1K  2.68T  1.03M  /tank/home_clone
[root@kvm ~]# 
[root@kvm ~]# ll /tank/home_clone/
合計 1029
-rw-r--r--. 1 root root 1048576  7月 17 01:29 2012 tmpfile1

 
クローン元のスナップショットは削除出来ないらしい。
オプションに-Rをつけるとクローン先も含めて全て削除される。

[root@kvm ~]# zfs destroy tank/home@ss1
cannot destroy 'tank/home@ss1': snapshot has dependent clones
use '-R' to destroy the following datasets:
tank/home_clone

 

FSをコピーする

クローンだとクローン元が消せなくてちょっと不便。
だから別物としてコピーを作る。
tank/home@ss1をコピーしてtank/home_copyを作る。
コピー元をスナップショットとすると、スナップショットを取った直後の状態がコピーされるらしい。

[root@kvm ~]# zfs send tank/home@ss1 | zfs receive tank/home_copy
[root@kvm ~]# 
[root@kvm ~]# zfs list -t all
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank                3.40M  2.68T    32K  /tank
tank/home           2.05M  2.68T  2.04M  /tank/home
tank/home@ss1         19K      -  1.03M  -
tank/home_clone        1K  2.68T  1.03M  /tank/home_clone
tank/home_copy      1.03M  2.68T  1.03M  /tank/home_copy
tank/home_copy@ss1      0      -  1.03M  -
[root@kvm ~]# 
[root@kvm ~]# ll /tank/home_copy/
合計 1027
-rw-r--r--. 1 root root 1048576  7月 17 01:29 2012 tmpfile1

 

クローン/コピー元を削除

オプション-Rをつけてクローン先も全部削除。
クローンしたFSは削除されるが、コピーしたFSは削除されていない。

[root@kvm ~]# zfs destroy -R tank/home@ss1
[root@kvm ~]# 
[root@kvm ~]# zfs list -t all
NAME                 USED  AVAIL  REFER  MOUNTPOINT
tank                3.35M  2.68T    32K  /tank
tank/home           2.04M  2.68T  2.04M  /tank/home
tank/home_copy      1.03M  2.68T  1.03M  /tank/home_copy
tank/home_copy@ss1      0      -  1.03M  -

 

ベンチマーク

ZFSext4を比較。
どうやらext4の方がread/write共に速いようだ。
 

ZFS

write

[root@kvm ~]# for i in {1..3}
> do
> time (dd if=/dev/zero of=/tank/home/ddfile bs=1M count=1024 > /dev/null 2>&1)
> done

real	0m10.880s
user	0m0.004s
sys	0m1.192s

real	0m12.575s
user	0m0.002s
sys	0m1.302s

real	0m12.329s
user	0m0.003s
sys	0m1.157s

 
read

[root@kvm ~]# for i in {1..3}
> do
> time (cat /tank/home/ddfile > /dev/null)
> done

real	0m0.417s
user	0m0.004s
sys	0m0.413s

real	0m0.414s
user	0m0.004s
sys	0m0.409s

real	0m0.413s
user	0m0.001s
sys	0m0.411s

 

ext4

write

[root@kvm ~]# for i in {1..3}
> do
> time (dd if=/dev/zero of=/mnt/ddfile bs=1M count=1024 > /dev/null 2>&1)
> done

real	0m2.068s
user	0m0.001s
sys	0m1.997s

real	0m8.711s
user	0m0.000s
sys	0m2.659s

real	0m8.333s
user	0m0.003s
sys	0m2.653s

 
read

[root@kvm ~]# for i in {1..3}
> do
> time (cat /mnt/ddfile > /dev/null)
> done

real	0m0.585s
user	0m0.003s
sys	0m0.461s

real	0m0.385s
user	0m0.008s
sys	0m0.377s

real	0m0.385s
user	0m0.004s
sys	0m0.381s