今回は ZFS ファイルシステムではなく,ボリュームとして切り出して利用したり,ボリュームを iSCSI として提供したりしてみます.
- ZFS に関するお話
- FreeBSD で ZFS を利用する – ZFS 概要
- FreeBSD で ZFS を利用する – ZFS プールの作成 (パーティション切らない編)
- FreeBSD で ZFS を利用する – ZFS プールの機能について理解する
- FreeBSD で ZFS を利用する – ファイルシステムを管理する
- FreeBSD で ZFS を利用する – send/recv を使い倒す
- FreeBSD で ZFS を利用する – RAWボリュームを切り出す & iSCSI として提供する
- FreeBSD で ZFS を利用する – ファイルシステムの圧縮を利用する・比較する
- FreeBSD で ZFS を利用する – ZFS のキャッシュの仕組みを理解する
- FreeBSD で ZFS を利用する – キャッシュを構成・設定する
- FreeBSD で ZFS を利用する – 重複排除を利用する・確認する
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (1)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (2)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (3)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (4)
ブロックデバイスとして切り出す
ZFS のストレージプールからブロックデバイスとして切り出すことが可能です.
ZFS の中にボリュームを切り出して UFS フォーマットで利用する (またはその他のファイルシステムフォーマットを行う) ことや,iSCSI や GEOM GATE で他ホストへ共有を行うことができます.
ボリュームの作成も zfs create で行います.
# zfs create -V 10G pool0/zvol0 # zfs list NAME USED AVAIL REFER MOUNTPOINT pool0 10.3G 86.1G 24K /pool0 pool0/data-backup 26.5K 86.1G 26.5K /pool0/data-backup pool0/zvol0 10.3G 96.4G 12K -
この場合,zvol0 を 10GB で切り出しています.MOUNTPOINT が何もなく,マウントされていないことが分かります.
それ以外は ZFS の機能は利用可能です.スナップショットやクローン,圧縮・重複排除などをボリュームに対して適用できます.
ですので,このように zfs の設定は通常の ZFS ファイルシステムと大きく違いはありません.
# zfs get all pool0/zvol0 NAME PROPERTY VALUE SOURCE pool0/zvol0 type volume - pool0/zvol0 creation Thu Dec 21 20:38 2023 - pool0/zvol0 used 10.3G - pool0/zvol0 available 96.4G - pool0/zvol0 referenced 12K - pool0/zvol0 compressratio 1.00x - pool0/zvol0 reservation none default pool0/zvol0 volsize 10G local pool0/zvol0 volblocksize 8K default pool0/zvol0 checksum on default pool0/zvol0 compression off default pool0/zvol0 readonly off default pool0/zvol0 createtxg 24146 - pool0/zvol0 copies 1 default pool0/zvol0 refreservation 10.3G local pool0/zvol0 guid 6841428395991112135 - pool0/zvol0 primarycache all default pool0/zvol0 secondarycache all default pool0/zvol0 usedbysnapshots 0B - pool0/zvol0 usedbydataset 12K - pool0/zvol0 usedbychildren 0B - pool0/zvol0 usedbyrefreservation 10.3G - pool0/zvol0 logbias latency default pool0/zvol0 objsetid 334 - pool0/zvol0 dedup off default pool0/zvol0 mlslabel none default pool0/zvol0 sync standard default pool0/zvol0 refcompressratio 1.00x - pool0/zvol0 written 12K - pool0/zvol0 logicalused 6K - pool0/zvol0 logicalreferenced 6K - pool0/zvol0 volmode default default pool0/zvol0 snapshot_limit none default pool0/zvol0 snapshot_count none default pool0/zvol0 snapdev hidden default pool0/zvol0 context none default pool0/zvol0 fscontext none default pool0/zvol0 defcontext none default pool0/zvol0 rootcontext none default pool0/zvol0 redundant_metadata all default pool0/zvol0 encryption off default pool0/zvol0 keylocation none default pool0/zvol0 keyformat none default pool0/zvol0 pbkdf2iters 0 default
自ホスト内で UFS フォーマットしてみる
作成されたボリュームにアクセスするには /dev/zvol/[プール名]/[ボリューム名] でアクセスが可能です.
ファイルシステムを作成してマウントをしてみます.
# newfs /dev/zvol/pool0/zvol0 /dev/zvol/pool0/zvol0: 10240.0MB (20971520 sectors) block size 32768, fragment size 4096 using 17 cylinder groups of 625.22MB, 20007 blks, 80128 inodes. super-block backups (for fsck_ffs -b #) at: 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360 # mount /dev/zvol/pool0/zvol0 /mnt # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2223580 15513340 13% / devfs 1 1 0 100% /dev /dev/da2 101561756 10600 93426216 0% /mnt pool0 90273061 24 90273037 0% /pool0 pool0/data-backup 90273064 26 90273037 0% /pool0/data-backup /dev/zvol/pool0/zvol0 10144028 8 9332500 0% /mnt
通常このような使い方を行うことはないと思いますが,こういったこともできますという例になります.
ボリュームを拡張してみる
ZFS で作成したボリュームは簡単に拡張・縮小が可能です.縮小は上位のファイルシステムも対応している必要があります.
今回はボリュームを拡張し,ファイルシステムも拡張してみる.ということを実施します.
# zfs set volsize=20G pool0/zvol0 # zfs list NAME USED AVAIL REFER MOUNTPOINT pool0 20.6G 75.8G 24K /pool0 pool0/data-backup 26.5K 75.8G 26.5K /pool0/data-backup pool0/zvol0 20.6G 96.4G 1.84M - # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2223580 15513340 13% / devfs 1 1 0 100% /dev /dev/da2 101561756 10600 93426216 0% /mnt pool0 79458977 24 79458953 0% /pool0 pool0/data-backup 79458979 26 79458953 0% /pool0/data-backup /dev/zvol/pool0/zvol0 10144028 8 9332500 0% /mnt # growfs /dev/zvol/pool0/zvol0 Device is mounted read-write; resizing will result in temporary write suspension for /mnt. It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/zvol/pool0/zvol0, mounted on /mnt, from 10GB to 20GB? [yes/no] yes super-block backups (for fsck_ffs -b #) at: 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944, 32011392, 33291840, 34572288, 35852736, 37133184, 38413632, 39694080, 40974528 # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2223580 15513340 13% / devfs 1 1 0 100% /dev /dev/da2 101561756 10600 93426216 0% /mnt pool0 79458969 24 79458945 0% /pool0 pool0/data-backup 79458972 26 79458945 0% /pool0/data-backup /dev/zvol/pool0/zvol0 20308252 8 18683584 0% /mnt
このように簡単に拡張することができます.
iSCSI で提供する
まず,FreeBSD の iSCSI については以下で記事にしていますのでこちらも合わせてご覧ください.
- FreeBSD で iSCSI を利用する (サーバー/ターゲット編)
- FreeBSD で iSCSI を利用する (クライアント/イニシエーター編)
- GEOM MULTIPATH でマルチパスを構成する (1)
- GEOM MULTIPATH でマルチパスを構成する (2)
その上で,サーバー (ターゲット) から提供する.という所に絞って説明を行います.
もちろん,ZFS ボリュームを切り出すのではなく,ZFS ファイルシステム内のボリュームファイルを提供することも可能です.
ターゲットを設定する
先ほど作成したボリューム vol0 を iSCSI ターゲットに載せてみます.以下設定ファイルは前回のものを流用しています.詳細は上部にリンクを張った記事をご覧ください.
違いは lun0 で指定しているデバイスファイルのパス,lun 1 で指定しているパスだけになります.
# cat /etc/ctl.conf auth-group ag0 { chap-mutual "iscsi-user1" "Password-user1" "mutual-user" "Password-mutual" initiator-portal 172.16.255.0/24 initiator-portal 172.17.255.0/24 } portal-group pg0 { discovery-auth-group no-authentication listen 172.16.255.254:3260 listen 172.17.255.254:3260 } target iqn.2023-12.iscsi.org.seichan:target0 { alias "target0" auth-group ag0 portal-group pg0 lun 0 { path /dev/zvol/pool0/zvol0 option vendor "FreeBSD" } lun 1 { path /pool0/lun1.img option vendor "FreeBSD" blocksize 4096 size 10G } }
この設定ファイルを用いて ctld を起動します.
# cat /etc/rc.conf ctld_enable="YES" zfs_enable="YES" # /etc/rc.d/ctld start Starting ctld. # ctladm devlist -v LUN Backend Size (Blocks) BS Serial Number Device ID 0 block 41943040 512 MYSERIAL0000 MYDEVID0000 lun_type=0 num_threads=32 vendor=FreeBSD file=/dev/zvol/pool0/zvol0 ctld_name=iqn.2023-12.iscsi.org.seichan:target0,lun,0 scsiname=iqn.2023-12.iscsi.org.seichan:target0,lun,0 1 block 2621440 4096 MYSERIAL0001 MYDEVID0001 lun_type=0 num_threads=32 vendor=FreeBSD file=/pool0/lun1.img ctld_name=iqn.2023-12.iscsi.org.seichan:target0,lun,1 scsiname=iqn.2023-12.iscsi.org.seichan:target0,lun,1
iSCSI 用のボリュームを ZFS で作成する利点は上でも書いていますが,ZFS の機能を利用できる事です.
スナップショットの作成,クローン,send / recv によるレプリケーションはもちろん,圧縮や重複排除が利用できます.
もちろん,ボリュームを作成して iSCSI で.ではなく,ZFS ファイルシステムを NFS で提供ということも可能ですし,こちらも同様の利点があります.
最終的には利用するシステムがどちらの方が都合がよいのか (パフォーマンスの観点,扱いやすさの観点など色々とあると思います) で選択で良いでしょう.
自分の場合は ZFS ファイルサーバー側でファイルが読み書きできる方を重要視しているので iSCSI の利用ではなく NFS での利用を行っていますが,MSFC の検証などでは iSCSI を利用しています.
以上,ブロックデバイスとして切り出す紹介を終わります.次回は圧縮と重複排除について触れていこうと思います.
コメント