====== 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}}