1. HOME
  2. Blog
  3. コラム
  4. 宮崎悟氏の「UbuntuでZFSを使ってみよう」第5回 「ZFSのファイルシステムとボリューム」

更新情報

NEWS

コラム

宮崎悟氏の「UbuntuでZFSを使ってみよう」第5回 「ZFSのファイルシステムとボリューム」

前回ではZFSのストレージプールについて説明しました。今回は、ZFSのストレージプールから作成される、ファイルシステムとボリュームについて説明したいと思います。

ZFSのファイルシステム

ZFSはその名の通り、Ubuntuを始めとするOSからファイルシステムとして認識されます。zpoolコマンドでストレージプールを作成すると、デフォルトで作成されたストレージプールと同じ名前のファイルシステムが作成され、rootファイルシステム以下にマウントされます。これがZFSのファイルシステムとなります。

# zpool create tank /tmp/disk01
# zpool status tank
  pool: tank
 state: ONLINE
  scan: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        tank           ONLINE       0     0     0
          /tmp/disk01  ONLINE       0     0     0

errors: No known data errors
# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
rpool              1.02G  8.61G    96K  /
rpool/ROOT         1.01G  8.61G    96K  none
rpool/ROOT/ubuntu  1.01G  8.61G  1.01G  /
tank                 81K   864M    24K  /tank
# zfs list tank
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank    81K   864M    24K  /tank
# ls -ld /tank/
drwxr-xr-x 2 root root 2 Feb 10 02:52 /tank/
# df -h /tank
Filesystem      Size  Used Avail Use% Mounted on
tank            864M     0  864M   0% /tank

zfs create コマンドを使用して、既存のファイルシステムの下にファイルシステムを階層的に作成することも可能です。zfsでは、この様に作成したファイルシステム毎にいろいろな管理を行います。

# zfs create tank/abc
# zfs list -r tank
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank       108K   864M    24K  /tank
tank/abc    24K   864M    24K  /tank/abc

zfsでは、ファイルシステム毎に attribute と呼ばれる属性が設定できます。mountpointもその属性の一つです。試しに、tank/abcのmountpointを変更します。

# zfs set mountpoint=/abc tank/abc
# zfs list tank/abc
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank/abc    24K   864M    24K  /abc

この様に、ファイルシステム毎に自動的にマウントポイントは作成されますが、手動で変更することも可能です。また、zfs作成時に、オプション指定により設定変更した状態でファイルシステムを作成することも可能です。

# zfs create -o mountpoint=/def tank/def
# zfs list -r tank
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank       171K   864M    24K  /tank
tank/abc    24K   864M    24K  /abc
tank/def    24K   864M    24K  /def

zfs listで表示されるUSEDとAVAILが、現在の使用しているディスクサイズと使用可能なディスクサイズなります。tank/abc に100MBのファイルを作成すると、tank/abcだけでなく、tankの使用量も増えます。子ファイルディスク全体の使用量および容量が、全ストレージプールで共用することになることに注意しましょう。

# dd if=/dev/zero of=/abc/disk01 bs=$((1024*1024)) count=100
# ls -lh /abc
total 69M
-rw-r--r-- 1 root root 100M Feb 10 03:33 disk01
# zfs list -r tank
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank       100M   764M    24K  /tank
tank/abc   100M   764M   100M  /abc
tank/def    24K   764M    24K  /def

ZFSボリューム

ZFSは、ファイルシステムだけではなく、ボリュームという仮想ディスクとして扱うことが出来るデバイスを作成することも可能です。zfs create -V サイズ ボリューム名 を実行すると、どこにもマウントされないZFSボリュームが作成されます。

# zfs create -V 200m tank/vol
# zfs list -r tank
NAME       USED  AVAIL  REFER  MOUNTPOINT
tank       208M   656M    24K  /tank
tank/abc    24K   656M    24K  /abc
tank/def    24K   656M    24K  /def
tank/vol   208M   864M    12K  -

このZFSボリュームは、/dev/zvol 以下のデバイスファイルとして作成されます。

# ls -l /dev/zvol/tank/vol
lrwxrwxrwx 1 root root 9 Feb 10 03:05 /dev/zvol/tank/vol -> ../../zd0
ls -l /dev/zd0
brw-rw---- 1 root disk 230, 0 Feb 10 03:05 /dev/zd0

ディスクデバイスとして、fdiskやgdiskで確認可能です。下記のように、フォーマットされていない200MBのディスクデバイスとして認識されます。

# fdisk -l /dev/zd0
Disk /dev/zd0: 200 MiB, 209715200 bytes, 409600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 8192 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
# gdisk -l /dev/zd0
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.
Disk /dev/zd0: 409600 sectors, 200.0 MiB
Sector size (logical/physical): 512/8192 bytes
Disk identifier (GUID): DDB54097-7078-4ECD-909C-563AC38477F7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 409566
Partitions will be aligned on 2048-sector boundaries
Total free space is 409533 sectors (200.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name

この領域は、フォーマットしてxfsなどのファイルシステムをその上に構築したり、swap領域に使用したりできます。Solaris11では、ZFSボリュームがswapとして標準的に使用されたり、iSCSI/FC/FCoE/Infinibandで共有されるボリュームとして使用されることがあります。UbuntuでもiSCSIターゲットにすることは可能なようです。

今回は、ファイルシステムとボリュームについて話しましたが、次回はボリュームのちょっと変わった使い方について述べようと思いますので、お楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス
https://kusanagi.dht-jpn.co.jp/solutions/dht-oss-consulting/

Related posts