2017年8月10日木曜日

Ubuntu16.04 で zfs を使ってみた

概要

Ubuntu16.04 で zfs を試してみました
セットアップの方法から zpool を使った簡単な操作方法まで紹介します

環境

  • Ubuntu 16.04 (kernel 4.4.0-89-generic)
  • zfsutils-linux 0.6.5.6

事前準備

100 GB の HDD を別途追加しておきます
fdisk -l で /dev/sdb が見えている状態を想定しています

有効化

Ubuntu 16.04 では zfs のモジュールがすでにインストールはされていますが有効化されていません
なので、有効化するだけで使えるようになります

  • modprobe zfs

で有効化できます

  • lsmod | grep zfs
  • find /lib -name “zfs.ko”

でモジュールが有効化されていることを確認します

  • echo “zfs” >> /etc/modules

で再起動時にも zfs モジュールが有効になるようにしておきます
zfs を操作するには zpool というコマンドが必要になるのでインストールします

  • apt update && apt install zfsutils-linux

これで有効化は完了です

パーティション作成

追加した HDD のパーティションを行います

  • fdisk /dev/sdb

で全領域を使って新規パーティションを作成しましょう (/dev/sdb1)

zfs プールの作成

zfs は複数のディスク領域をプールとして登録することで操作することができます
今回は 1 HDD のみですが複数パーティションを作成すれば複数パーティションを 1 つのプールとして登録することもできます
今回は pool1 というプールを作成します

  • zpool create pool1 /dev/sdb1
  • zpool status
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool1  99.5G    50K  99.5G         -     0%     0%  1.00x  ONLINE  -
root@ubuntu:~# zpool status
  pool: pool1
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool1       ONLINE       0     0     0
          sdb1      ONLINE       0     0     0

errors: No known data errors  
  • zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool1  99.5G  62.5K  99.5G         -     0%     0%  1.00x  ONLINE  -
  • zpool export pool1
  • zpool import pool1
  • df -h

一度 export することでプールをマウントできる状態にします
そして import することでマウントすることができます
再度 export するとアンマウントすることができます
export したプールは再度 import 可能な状態になります
再度 import 可能なプールは list や status コマンドでは表示されません
再度 import 可能なプールを表示する場合は import コマンドを引数なしで使用します

ちなみに zfs の場合一度 import してしまえば再起動しても自動で import してくれます
/etc/fstab などにマウント情報を記載しなくても OK です

zfs プールを削除する

  • zpool destroy pool1

で可能です
マウントした状態でも実行できます (たぶんデバイスが busy の状態だとできないと思います)

destroy 後にやっぱりもう一度使いたいという場合は「-D」オプションを指定して import します

  • zpool import -D
  • zpool import -D pool1

ディスク上にあるデータも元通り復元されます
destroy 後に再度 create するとディスクのデータもクリアされて再度プールが作成されます

ディスクを追加してみる

サーバを停止して /dev/sdc に更に 100GB のディスクを追加します
このディスクをすでに作成済みに pool1 に追加してプール領域を拡張してみます

  • fdisk /dev/sdc
  • zpool add pool1 /dev/sdc1

これだけです
これで容量を確認すると先程の 100GB が 200GB に拡張されているのがわかると思います

  • df -h /pool1
Filesystem      Size  Used Avail Use% Mounted on
pool1           193G     0  193G   0% /pool1

逆に領域を削除したい場合は remove を使います
が、100GB 以上すでに使用している場合や書き込み中の場合にどうなるかは検証していないので不明です
(たぶん busy でできないか、できてもデータが破損しそうな気がします)

最後に

Ubuntu16.04 で zfs を試してみました
インストール等も不要で簡単に使えました

同じようなことをするのに LVM という仕組みがありますが
LVM よりかは単純な操作で使えるような印象です

あとは性能比較などもしてみないと何とも言えないところはあります

Tips

プールの情報を取得する

  • zpool get all

参考サイト

0 件のコメント:

コメントを投稿