(無償) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

投げ銭

★投げ銭をしてくださるなら、下記のPayPal専用リンクからできます。m(_ _)m ★

2012年5月14日月曜日

【Linux CentOS6.2 64bit版】ZFS(FUSE)のインストールと設定、そして簡単な実験

CentOS 6.2 64bit版に、ZFS(FUSE)をインストールしたときのメモ

更新:2016年11月10日(ストレージプールのサイズについて)

※警告※
(1)ZFSを使用するPCはECC対応メモリーを実装したものを使うべきらしい。
さもなければ、保存データを壊してしまう危険があるらしい。(†1)

(2)スクリプトを組んでchownやchmodで頻繁にファイルの所有者や権限を変更する必要がある場合、
以下の手順で導入するZFS-FUSEは使用するべきではない
頻繁ではないもののZFS-FUSEが落ちてしまうことがある。すると当然、ファイルシステムにアクセスできなくなる。(†2)

毎日、数分おきに合計200回程度で、所有者と権限の変更を行っていたところ、
半年に1度の頻度で、ZFS-FUSEが落ちてしまった。
そうではない環境では、ZFS-FUSEは安定に動作しつづけた。

(この回復のためには、service zfs-fuse stop して、ある程度じっくり待ってから、service start zfs-fuseする。)



□注意□
ネイティブZFSとは異なり、ZFS-FUSEでは、ACLを使うことができないようだ。
実際に、setfaclコマンドで試してみたが、”サポートされていない操作です”とエラーになった。
(参考)
・#130 — Lack of (Posix) ACL support cripples zfs-fuse < http://zfs-fuse.net/issues/130 > 2012年6月7日
・Compressed fs with acl (posix) support? < http://www.linuxquestions.org/questions/linux-server-73/compressed-fs-with-acl-posix-support-938090/ > 2012年6月7日


以下、ZFS-FUSEの導入の手順メモ

使用したCentOS 6.2 64bit版は、インストーラーから「Desktop用途」を選択してインストールしたものである。

■パッケージ zfs-fuse のインストール

ZFSの導入は、専用のパッケージをYUMでインストールするだけだった。


1、epelリポジトリを使用できるようにした

必要なパッケージがepelリポジトリに存在しているため、epelを利用できるようにする。
[root@FileServer-01 ~]# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-6.noarch.rpm
http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-6.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.nitPMD: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@FileServer-01 ~]#


2、 zfs-fuseのインストールをyumを使って行った

インフォメーションを表示させる
[root@FileServer-01 ~]# yum info zfs-fuse
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
epel/metalink                                                            | 4.1 kB     00:00    
 * base: ftp.jaist.ac.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
epel                                                                     | 4.0 kB     00:00    
epel/primary_db                                                          | 4.4 MB     00:00    
Available Packages
Name        : zfs-fuse
Arch        : x86_64
Version     : 0.6.9
Release     : 6.20100709git.el6
Size        : 1.4 M
Repo        : epel
Summary     : ZFS ported to Linux FUSE
URL         : http://zfs-fuse.net/
License     : CDDL
Description : ZFS is an advanced modern general-purpose filesystem from Sun
            : Microsystems, originally designed for Solaris/OpenSolaris.
            :
            : This project is a port of ZFS to the FUSE framework for the Linux
            : operating system.
            :
            : Project home page is at http://zfs-fuse.net/

インストールを行う
[root@FileServer-01 ~]# yum install zfs-fuse
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * epel: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package zfs-fuse.x86_64 0:0.6.9-6.20100709git.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================
 Package             Arch              Version                            Repository       Size
================================================================================================
Installing:
 zfs-fuse            x86_64            0.6.9-6.20100709git.el6            epel            1.4 M

Transaction Summary
================================================================================================
Install       1 Package(s)

Total download size: 1.4 M
Installed size: 4.1 M

Installed:
  zfs-fuse.x86_64 0:0.6.9-6.20100709git.el6                                                    

Complete!
 
再起動時にもzfs設定関係のコマンドが実行できるようにしておく
[root@FileServer-01 ~]# chkconfig zfs-fuse on

下記、ZFS-FUSEの設定に備えて、サービスを起動しておく
[root@FileServer-01 ~]# service zfs-fuse start



■ストレージプールと、ZFSファイルシステムを作成し、マウントポイントを指定した

ZFSに対応したファイルシステムを使うには、最初にストレージプールを作成する。
今回は空HDDを丸ごと使ってストレージプールを作成した。
(領域確保したパーティションを指定することもできる。)

ストレージプール上にZFSファイルシステムを作成する。

作成したZFSファイルシステムは任意のディレクトリにマウントできた。


1、ストレージプールを作成した
[root@FileServer-01 ~]# zpool create zfsstrpool /dev/sdx

zfsstrpool ・・・ 定義を行うストレージプール名 (任意に名づけられる)
/dev/sdx ・・・ このストレージプールに参加させる空HDDのデバイス名

ルートディレクトリに作成したストレージプールなどが現れることを確認
[root@FileServer-01 ~]# ls -all -h / | grep zfs
drwxr-xr-x.   2 root root    0  1月  1 09:00 1970 zfs-kstat
drwxr-xr-x.   2 root root    2  5月 14 12:57 2012 zfsstrpool

○ところで、parted で調べたパーティションの容量よりもストレージプールは小さくなっていた。
(ストレージプールとして確保された容量は、zpool list コマンドで調べられる。)

ストレージプールに当てるパーティションのサイズを変化させて調べたら、以下のようになった。

約 188GB のパーティションの場合、ストレージプールでは約 13GB 少なくなった。175GBになった。
約 183GB のパーティションの場合、ストレージプールでは約 13GB 少なくなった。170GBになった。
約 238GB のパーティションの場合、ストレージプールでは約 18GB 少なくなって、220GBとなった。

ストレージプールに割り当てたパーティションのサイズが増えると減少量は増加するのではないか。

ZFSは、ブロックごとにハッシュデータを持っていて、エラーを検出できるようになっているようだ。(†1)
このハッシュデータの保存場所確保のためにストレージプールで使用できるサイズが減少するのではないか。


2、作成したストレージプールに、ZFSファイルシステムを生成した

[root@FileServer-01 ~]# zfs create zfsstrpool/fs01-zfs

zfsstrpool ・・・ 対象のストレージプール名
fs01-zfs ・・・ 生成するファイルシステムの名(任意に名づけられる)

生成したZFSファイルシステムは、次の位置に自動的にマウントされた
[root@FileServer-01 ~]# zfs mount
zfsstrpool                      /zfsstrpool
zfsstrpool/fs01-zfs             /zfsstrpool/fs01-zfs

ZFSファイルシステムのマウント位置は、ファイルシステム名と同じ名前のディレクトリになっていた
[root@FileServer-01 ~]# ls -all -h / | grep zfs
drwxr-xr-x.   2 root root    0  1月  1 09:00 1970 zfs-kstat
drwxr-xr-x.   3 root root    3  5月 14 13:09 2012 zfsstrpool
[root@FileServer-01 ~]# cd /zfsstrpool/
[root@FileServer-01 zfsstrpool]# ls
fs01-zfs


3、マウントポイント位置を変更した

マウントポイントにするディレクトリを作成した
[root@FileServer-01 ~]# mkdir /home/files

ZFSファイルシステムのマウントポイントをセットしなおした
[root@FileServer-01 ~]# zfs set mountpoint=/home/files zfsstrpool/fs01-zfs

ZFSファイルシステムのマウント状態を確認した
[root@FileServer-01 ~]# zfs mount
zfsstrpool                      /zfsstrpool
zfsstrpool/fs01-zfs             /home/files



■生成したZFSファイルシステムで、圧縮機能や、重複排除機能を有効化した

ZFSファイルシステムの機能である「圧縮」や「重複排除」を利用するには、次のようにパラメーターをセットし、各機能を有効化する必要がある。


圧縮機能を有効化した
[root@FileServer-01 ~]# zfs set compression=gzip-9 zfsstrpool/fs01-zfs

gzip-9・・・gzip-1からgzip-9まで選べる(gzip-9で圧縮率が最高になる)

重複排除機能を有効化した
[root@FileServer-01 ~]# zfs set dedup=verify zfsstrpool/fs01-zfs



■設定を確認した

以上の設定の後で、ストレージプールとZFSファイルシステムの設定を表示させた。

[root@FileServer-01 ~]# zfs get all
NAME                 PROPERTY              VALUE                    SOURCE
zfsstrpool           type                  filesystem               -
zfsstrpool           creation              月  5月 14 12:57 2012  -
zfsstrpool           used                  111K                     -
zfsstrpool           available             488G                     -
zfsstrpool           referenced            21K                      -
zfsstrpool           compressratio         1.00x                    -
zfsstrpool           mounted               yes                      -
zfsstrpool           quota                 none                     default
zfsstrpool           reservation           none                     default
zfsstrpool           recordsize            128K                     default
zfsstrpool           mountpoint            /zfsstrpool              default
zfsstrpool           sharenfs              off                      default
zfsstrpool           checksum              on                       default
zfsstrpool           compression           off                      default
zfsstrpool           atime                 on                       default
zfsstrpool           devices               on                       default
zfsstrpool           exec                  on                       default
zfsstrpool           setuid                on                       default
zfsstrpool           readonly              off                      default
zfsstrpool           zoned                 off                      default
zfsstrpool           snapdir               hidden                   default
zfsstrpool           aclmode               groupmask                default
zfsstrpool           aclinherit            restricted               default
zfsstrpool           canmount              on                       default
zfsstrpool           xattr                 on                       default
zfsstrpool           copies                1                        default
zfsstrpool           version               4                        -
zfsstrpool           utf8only              off                      -
zfsstrpool           normalization         none                     -
zfsstrpool           casesensitivity       sensitive                -
zfsstrpool           vscan                 off                      default
zfsstrpool           nbmand                off                      default
zfsstrpool           sharesmb              off                      default
zfsstrpool           refquota              none                     default
zfsstrpool           refreservation        none                     default
zfsstrpool           primarycache          all                      default
zfsstrpool           secondarycache        all                      default
zfsstrpool           usedbysnapshots       0                        -
zfsstrpool           usedbydataset         21K                      -
zfsstrpool           usedbychildren        90K                      -
zfsstrpool           usedbyrefreservation  0                        -
zfsstrpool           logbias               latency                  default
zfsstrpool           dedup                 off                      default
zfsstrpool           mlslabel              off                      -
zfsstrpool/fs01-zfs  type                  filesystem               -
zfsstrpool/fs01-zfs  creation              月  5月 14 13:09 2012  -
zfsstrpool/fs01-zfs  used                  21K                      -
zfsstrpool/fs01-zfs  available             488G                     -
zfsstrpool/fs01-zfs  referenced            21K                      -
zfsstrpool/fs01-zfs  compressratio         1.00x                    -
zfsstrpool/fs01-zfs  mounted               yes                      -
zfsstrpool/fs01-zfs  quota                 none                     default
zfsstrpool/fs01-zfs  reservation           none                     default
zfsstrpool/fs01-zfs  recordsize            128K                     default
zfsstrpool/fs01-zfs  mountpoint            /home/files              local
zfsstrpool/fs01-zfs  sharenfs              off                      default
zfsstrpool/fs01-zfs  checksum              on                       default
zfsstrpool/fs01-zfs  compression           gzip-9                   local
zfsstrpool/fs01-zfs  atime                 on                       default
zfsstrpool/fs01-zfs  devices               on                       default
zfsstrpool/fs01-zfs  exec                  on                       default
zfsstrpool/fs01-zfs  setuid                on                       default
zfsstrpool/fs01-zfs  readonly              off                      default
zfsstrpool/fs01-zfs  zoned                 off                      default
zfsstrpool/fs01-zfs  snapdir               hidden                   default
zfsstrpool/fs01-zfs  aclmode               groupmask                default
zfsstrpool/fs01-zfs  aclinherit            restricted               default
zfsstrpool/fs01-zfs  canmount              on                       default
zfsstrpool/fs01-zfs  xattr                 on                       default
zfsstrpool/fs01-zfs  copies                1                        default
zfsstrpool/fs01-zfs  version               4                        -
zfsstrpool/fs01-zfs  utf8only              off                      -
zfsstrpool/fs01-zfs  normalization         none                     -
zfsstrpool/fs01-zfs  casesensitivity       sensitive                -
zfsstrpool/fs01-zfs  vscan                 off                      default
zfsstrpool/fs01-zfs  nbmand                off                      default
zfsstrpool/fs01-zfs  sharesmb              off                      default
zfsstrpool/fs01-zfs  refquota              none                     default
zfsstrpool/fs01-zfs  refreservation        none                     default
zfsstrpool/fs01-zfs  primarycache          all                      default
zfsstrpool/fs01-zfs  secondarycache        all                      default
zfsstrpool/fs01-zfs  usedbysnapshots       0                        -
zfsstrpool/fs01-zfs  usedbydataset         21K                      -
zfsstrpool/fs01-zfs  usedbychildren        0                        -
zfsstrpool/fs01-zfs  usedbyrefreservation  0                        -
zfsstrpool/fs01-zfs  logbias               latency                  default
zfsstrpool/fs01-zfs  dedup                 verify                   local
zfsstrpool/fs01-zfs  mlslabel              verify                   -


■動作テスト

総計で約22Gバイトほどの多数のファイルをZFSファイルシステムに書き込み、圧縮や重複排除の機能の効果を確認した。

ファイル数は約11万で、odsやxls等のファイルが主である。
数種類のテンプレートから作成されたもので、プログラムで自動生成したものではない。
平均すれば一ファイルあたり200Kバイトほど。
その中には無圧縮のbmp画像を含んだ500kバイトを超えるものもある。


ファイルは、rsyncコマンドでリモートホストから転送した。


<結果>
# zfs get all | grep compressratio
書込み前
zfsstrpool           compressratio         1.00x                    -
zfsstrpool/fs01-zfs  compressratio         1.00x                    -

書込み後
zfsstrpool           compressratio         1.33x                    -
zfsstrpool/fs01-zfs  compressratio         1.33x                    -

# zpool list
書込み前
NAME         SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zfsstrpool   496G   116K   496G     0%  1.00x  ONLINE  -

書込み後
NAME         SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zfsstrpool   496G  8.39G   488G     1%  2.13x  ONLINE  -

# zfs list
書込み前
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zfsstrpool            111K   488G    21K  /zfsstrpool
zfsstrpool/fs01-zfs    21K   488G    21K  /home/files

書込み後
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zfsstrpool           17.7G   480G    21K  /zfsstrpool
zfsstrpool/fs01-zfs  17.7G   480G  17.7G  /home/files

# df -h
書込み前
Filesystem            Size  Used Avail Use% マウント位置
zfsstrpool            489G   21K  489G   1% /zfsstrpool
zfsstrpool/fs01-zfs   489G   21K  489G   1% /home/files

書込み後
Filesystem            Size  Used Avail Use% マウント位置
zfsstrpool            480G   21K  480G   1% /zfsstrpool
zfsstrpool/fs01-zfs   498G   18G  480G   4% /home/files

# df -m
書込み前
Filesystem           1M-ブロック    使用   使用可 使用% マウント位置
zfsstrpool              499965         1    499965   1% /zfsstrpool
zfsstrpool/fs01-zfs     499965         1    499965   1% /home/files

書込み後
Filesystem           1M-ブロック    使用   使用可 使用% マウント位置
zfsstrpool              491227         1    491227   1% /zfsstrpool
zfsstrpool/fs01-zfs     509339     18112    491227   4% /home/files


■メンテナンス

プール名(zfsstrpool)を指定して、データの完全性をチェックする。
# zpool scrub zfsstrpool

これによって、チェックプロセス(スクラブ)がバックグラウンドで動作する。

次のコマンドで、チェックプロセスの進捗状況をチェックする。
# zpool status
 pool: zfsstrpool
 state: ONLINE
 scrub: scrub in progress for 0h0m, 0.57% done, 0h14m to go
config:

        NAME        STATE     READ WRITE CKSUM
        zfspool-skr0  ONLINE       0     0     0
          vda3      ONLINE       0     0     0

errors: No known data errors

■ZFSファイルシステムをアンマウントして削除する。

1、まず、確認のためプールを含めたZFSファイルシステムの一覧を表示させた。
# zfs list
NAME                       USED  AVAIL  REFER  MOUNTPOINT
zfsstrpool         124K   167G    21K  /zfsstrpool
zfsstrpool/fs01-zfs    21K   167G    21K  /home/files
2、削除するZFSファイルシステムを指定し、削除を行った。
下記コマンドで、いきなり削除されるので注意する。
# zfs destroy zfsstrpool/fs01-zfs

一覧を表示させた。(削除されていることを確認できた。)
# zfs list
NAME              USED  AVAIL  REFER  MOUNTPOINT
zfsstrpool  88.5K   167G    21K  /zfsstrpool
(注意)下記コマンドは、プールを削除するものであるため、この場合には無効である。
# zpool destroy zfsstrpool/fs01-zfs
cannot open 'zfsstrpool/fs01-zfs': invalid character '/' in pool name
use 'zfs destroy' to destroy a dataset

■その他

アンマウントしてZFS-FUSEを停止する。
# service zfs-fuse stop
Syncing disks                                              [  OK  ]
Unmounting ZFS filesystems                                 [  OK  ]
Stopping zfs-fuse:                                         [  OK  ]
Syncing disks again                                        [  OK  ]
ストレージがアンマウントされるので、当然アクセスができなくなる。

ZFS-FUSEをスタートしてマウントを行う。
# service zfs-fuse start
Starting zfs-fuse:                                         [  OK  ]
Immunizing zfs-fuse against OOM kills                      [  OK  ]
Mounting zfs partitions:                                   [  OK  ]
ストレージがマウントされて、アクセスが可能になる。

ZFS-FUSEの再起動を行う。
(異常が生じた場合などにこの操作を行う必要があった。)
# service zfs-fuse restart
Syncing disks                                              [  OK  ]
Unmounting ZFS filesystems                                 [  OK  ]
Stopping zfs-fuse:                                         [  OK  ]
Syncing disks again                                        [  OK  ]
Starting zfs-fuse:                                         [  OK  ]
Immunizing zfs-fuse against OOM kills                      [  OK  ]
Mounting zfs partitions:                                   [  OK  ]


<参考>
(1)  Will ZFS and non-ECC RAM kill your data?
< http://jrs-s.net/2015/02/03/will-zfs-and-non-ecc-ram-kill-your-data/ > 2016年11月10日

(2) Bug 924012 - zfs-fuse crashes during chmod
< https://bugzilla.redhat.com/show_bug.cgi?id=924012 > 2017年7月2日

ZFS ファイルシステムの整合性をチェックする
< https://docs.oracle.com/cd/E56342_01/html/E53916/gbbwa.html > 2016年11月22日

Destroying a ZFS File System
< http://docs.oracle.com/cd/E19253-01/819-5461/gammq/index.html > 2016年11月24日

Creating and Destroying ZFS Storage Pools
< https://docs.oracle.com/cd/E23824_01/html/821-1448/gaypw.html > 2017年4月4月

Recovering Destroyed ZFS Storage Pools
< http://docs.oracle.com/cd/E19253-01/819-5461/gcfhw/index.html > 2017年4月4月

投げ銭

★投げ銭をしてくださるなら、下記のPayPal専用リンクからできます。m(_ _)m ★