====== 29 TGT で thin provision ====== 下記はティスクで作成している解説 [[01_linux:01_net:32_centosでiscsi環境構築]] TGTでシンプロビジョニングを利用する場合、TGTのバックエンドはディスクではなく、ファイルである必要があります。 Not all filesystems support FALLOC_FL_PUNCH_HOLE; if a filesystem doesn't support the operation, an error is returned. The operation is supported on at least the following filesystems: * XFS (since Linux 2.6.38) * ext4 (since Linux 3.0) * Btrfs (since Linux 3.7) * tmpfs(5) (since Linux 3.5) * gfs2(5) (since Linux 4.16) [[https://blog.csdn.net/bobpen/article/details/79445104|参考URL]] ===== 1. Sparseファイル作成 ===== これで500G のSparseファイル作成 # dd if=/dev/zero of=/mnt/disk.tgt bs=1 count=0 seek=500G 見た目上500Gだが、実使用量は0になります。 # du -h --apparent-size /mnt/disk.tgt 500G /mnt/disk.tgt # du -h /mnt/disk.tgt 0 /mnt/disk.tgt ===== 2.SpaseディスクをLUNとして追加 ===== # tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 --backing-store /mnt/disk.tgt ===== 3.シンプロビジョニングを有効にする ===== # tgtadm --lld iscsi --mode logicalunit --op update --tid 1 --lun 1 --params thin_provisioning=1 ===== 4.設定ファイルの場合 ===== 「params thin_provisioning=1」で指定する。 default-driver iscsi backing-store /mnt/disk.tgt write-cache on params thin_provisioning=1 ===== 5. シンプロビジョニングの確認 ===== 「Thin-provisioning: Yes」となっていればOK # tgt-admin -s LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 536871 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: Yes Backing store type: rdwr Backing store path: /mnt/disk.tgt Backing store flags: ==== クライアントから接続確認 ==== [[01_linux:01_net:31_iscsid]]で接続 今回はsdcで接続している状況で説明 # ll /dev/disk/by-path/| grep sdc lrwxrwxrwx. 1 root root 9 Mar 24 00:40 ip-192.168.10.16:3260-iscsi-iqn.2014-03.storage-server:disk1-lun-1 -> ../../sdc ==== discard_granularityを確認 ==== thin provisionが有効になっていると、「/sys/block/{BLOCK}/queue/discard_granularity」が0以外になっている # cat /sys/block/sdc/queue/discard_granularity 512 下記でUNMAPが有効になっている事が分かる。 # sg_vpd -p 0xb2 /dev/sdc Logical block provisioning VPD page (SBC): Unmap command supported (LBPU): 1 Write same (16) with unmap bit supported (LBWS): 1 Write same (10) with unmap bit supported (LBWS10): 1 Logical block provisioning read zeros (LBPRZ): 1 Anchored LBAs supported (ANC_SUP): 0 Threshold exponent: 0 Descriptor present (DP): 0 Provisioning type: 2 ===== クライアント側と、サーバ側で交互に確認 ===== -o discard でマウントしおくと、下記を自動で行ってくれる LVMの場合は、issue_discards=1 にしておくとOK ==== クライアントで確認 ==== === 1.マウントするとちゃんと500Gのディスクとしてマウントしている === # mkfs.xfs /dev/sdc # mount /dev/sdc /mnt/ # df -h | grep mnt /dev/sdc 500G 33M 500G 1% /mnt === 3.1Gフィアルを10個作成 === 当然容量は増える # for i in `seq -w 0 10`; do dd if=/dev/zero of=/mnt/$i bs=1M count=1024 ; done # df -h | grep mnt /dev/sdc 500G 12G 489G 3% /mnt === 5.ファイルを削除 === ファイル削除で容量は減る # rm -rvf /mnt/* # df -h | grep mnt /dev/sdc 500G 33M 500G 1% /mnt === 7.fstrim === # fstrim /mnt ==== サーバ側で確認 ==== === 2.mkfsで少し容量増えるけど、ほとんど利用されてない状態 === # du -h /mnt/disk.tgt 251M /mnt/disk.tgt === 4.サーバ側でも増えている === # du -h /mnt/disk.tgt 12G /mnt/disk.tgt === 6.サーバ側は減っていない === # du -h /mnt/disk.tgt 12G /mnt/disk.tgt === 8.クライアントでfstrim後はサーバ側でも減っている === # du -h /mnt/disk.tgt 251M /mnt/disk.tgt {{tag>iscsi tgt}}