宮崎悟氏の「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/