この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
君なんだか使用量おかしくない?
こんにちは、のんピ(@non____97)です。
まずはこれを見てください。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0e896ca62e3b55b5f.fs-0c6a3b2f825a9c21b.fsx.us-east-1.amazonaws.com:/nfs 2.0T 1.1T 844G 57% /mnt/fsx
これは以下記事でAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)のボリュームを作成をNFSでEC2インスタンスにマウントした時のdf
コマンドの実行結果です。
こちらの記事をご覧になった方は気づくと思います。
「何も書き込んでいないのにUsedが1.1TBだ」
と
こちらはFSx for ONTAPファイルシステムに設定したストレージキャパシティ以上のサイズのボリュームを作成した際に発生しました。
もしかしたら、こちらが影響しているかも知れませんね。
実際は1.1TBも使っていないのに1.1TB消費していると判断されると、どの程度書き込んで良いか判断が付かず困りますね。
今回はこちらの事象について色々検証してみたので、紹介します。
いきなりまとめ
- ボリュームの空き容量がプライマリストレージの空き容量以上である場合、デフォルトではクライアントから確認できるボリュームの空き容量はプライマリストレージの空き容量
- キャパシティプールストレージを含むボリュームの論理的な空き容量ではない
- プライマリストレージとキャパシティプールストレージの使用量を加味した空き容量、使用量を表示するには、
Logical Space Reporting
を有効化する必要がある Logical Space Reporting
を有効化すると、Storage Efficiencyによって圧縮、重複排除されたサイズを無視して表示されるので注意が必要- 10GBのデータを圧縮して物理的には1GBしか使用していないくても、クライアントからは10GB使用したように見えるようになる
Logical Space Reporting
を有効化すると、空き容量が論理的なサイズになるため、空きがあるからといって大量に書き込みをすると、プライマリストレージの空き容量不足になる可能性がある- プライマリストレージの空き容量は常に気を配る必要がある
検証環境
検証環境は以下の通りです。
ボリュームのサイズを変更すると、NFSのクライアントのEC2インスタンスからは使用量や空き容量がどのように表示されるのか確認していきます。
リソースは全てAWS CDKでデプロイします。リポジトリはこちらです。
現在の使用量を確認する
それでは、現在の使用量を確認します。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 95G 256K 95G 1% /mnt/fsx
$ ls -la /mnt/fsx
total 4
drwxr-xr-x 2 nobody nobody 4096 Sep 26 06:17 .
drwxr-xr-x 3 root root 17 Sep 26 06:17 ..
$ ls -la /mnt/fsx/.snapshot
total 8
drwxrwxrwx 2 nobody nobody 4096 Sep 26 06:17 .
drwxr-xr-x 2 nobody nobody 4096 Sep 26 06:17 ..
何も書き込んでいないので、256KBでした。
試しに10GB程度のファイルを書き込んでみて、その後の使用量を確認してみましょう。
$ sudo dd if=/dev/urandom of=/mnt/fsx/testfile_1 bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 81.4856 s, 132 MB/s
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 95G 11G 85G 11% /mnt/fsx
$ ls -la /mnt/fsx
total 10527056
drwxr-xr-x 2 nobody nobody 4096 Sep 26 06:22 .
drwxr-xr-x 3 root root 17 Sep 26 06:17 ..
-rw-r--r-- 1 nobody nobody 10737418240 Sep 26 06:23 testfile_1
11GB書き込んだので、使用量(Used
)は11GBになっていますね。
FSx for ONTAPファイルシステムにSSHで接続して、ONTAP CLIからも確認してみます。
$ ssh fsxadmin@management.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com
The authenticity of host 'management.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com (10.0.1.47)' can't be established.
ECDSA key fingerprint is SHA256:2cpT8Wh7c5HRqVJqUJpspsY1Tn+XS255D3NHUwe3hcQ.
ECDSA key fingerprint is MD5:de:4b:79:7d:e4:1b:91:e7:96:c5:07:3f:5d:70:d4:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'management.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com,10.0.1.47' (ECDSA) to the list of known hosts.
Password:
This is your first recorded login.
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx-for-ontap-svm
fsx_for_ontap_volume
aggr1 online RW 100GB 84.86GB 10%
100GBの10%使用されたと記載されているので、こちらも10GB使用していると認識されていますね。
なお、階層化ポリシーはAUTO
でボリュームを作成したので、全てプライマリストレージに書き込まれています。
FsxId0c1219addee1f505e::> volume show-footprint -volume fsx_for_ontap_volume
Vserver : fsx-for-ontap-svm
Volume : fsx_for_ontap_volume
Feature Used Used%
-------------------------------- ---------- -----
Volume Data Footprint 10.14GB 1%
Footprint in Performance Tier
10.15GB 100%
Footprint in FSxFabricpoolObjectStore
0B 0%
Volume Guarantee 0B 0%
Flexible Volume Metadata 107.5MB 0%
Delayed Frees 8.25MB 0%
Total Footprint 10.25GB 1%
ボリュームサイズを5TBに変えた時の使用量を確認してみる
次にボリュームサイズを100GBから5TBに変更してみて、その時の使用量を確認してみます。
ボリュームサイズの変更もAWS CDKから行います。
./lib/fsx-for-ontap-stack.ts
// FSX for ONTAP volume
const volumeName = "fsx_for_ontap_volume";
const junctionPath = "/volume";
new fsx.CfnVolume(this, "Volume", {
name: volumeName,
ontapConfiguration: {
junctionPath,
sizeInMegabytes: "5242880",
storageEfficiencyEnabled: "true",
storageVirtualMachineId: svm.ref,
securityStyle: "UNIX",
tieringPolicy: {
coolingPeriod: 31,
name: "AUTO",
},
},
tags: [
{
key: "Name",
value: volumeName,
},
],
volumeType: "ONTAP",
});
デプロイ後、EC2インスタンスからdf
コマンドを叩いて、ボリュームの使用量を確認してみます。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 4.8T 4.0T 851G 83% /mnt/fsx
$ du -sh /mnt/fsx
11G /mnt/fsx
使用量が4.0TBになってしまいました。なお、マウントポイント配下の使用量は変わらず11GBです。
これは謎ですね。
ONTAP CLIから確認すると、以下のようにUsedが80%みたいなことにはなっていませんでした。
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx-for-ontap-svm
fsx_for_ontap_volume
aggr1 online RW 5TB 850.5GB 0%
FsxId0c1219addee1f505e::> volume show-footprint -volume fsx_for_ontap_volume
Vserver : fsx-for-ontap-svm
Volume : fsx_for_ontap_volume
Feature Used Used%
-------------------------------- ---------- -----
Volume Data Footprint 10.14GB 1%
Footprint in Performance Tier
10.15GB 100%
Footprint in FSxFabricpoolObjectStore
0B 0%
Volume Guarantee 0B 0%
Flexible Volume Metadata 107.5MB 0%
Delayed Frees 8.56MB 0%
Total Footprint 10.25GB 1%
再度10GB程度のファイルを書き込んでみて使用量の推移を確認してみます。
$ sudo dd if=/dev/urandom of=/mnt/fsx/testfile_2 bs=1M count=10240
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 81.3091 s, 132 MB/s
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 4.8T 4.0T 841G 83% /mnt/fsx
$ du -sh /mnt/fsx
21G /mnt/fsx
書き込んだ分、空き容量(Avail
)が851GBから841GBに減りました。
ボリュームサイズを2TBに変えた時の使用量を確認してみる
もう少し試してみましょう5TBのボリュームを2TBに減らしてみます。
./lib/fsx-for-ontap-stack.ts
// FSX for ONTAP volume
const volumeName = "fsx_for_ontap_volume";
const junctionPath = "/volume";
new fsx.CfnVolume(this, "Volume", {
name: volumeName,
ontapConfiguration: {
junctionPath,
sizeInMegabytes: "2097152",
storageEfficiencyEnabled: "true",
storageVirtualMachineId: svm.ref,
securityStyle: "UNIX",
tieringPolicy: {
coolingPeriod: 31,
name: "AUTO",
},
},
tags: [
{
key: "Name",
value: volumeName,
},
],
volumeType: "ONTAP",
});
デプロイ後、EC2インスタンスからdf
コマンドを叩いて、ボリュームの使用量を確認してみます。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 2.0T 1.1T 841G 57% /mnt/fsx
$ du -sh /mnt/fsx
21G /mnt/fsx
使用量が4.0から1.1TBに変わりましたね。
ONTAP CLIから確認すると、使用量は特に変わりありませんでした。
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx-for-ontap-svm
fsx_for_ontap_volume
aggr1 online RW 2TB 840.2GB 1%
FsxId0c1219addee1f505e::> volume show-footprint -volume fsx_for_ontap_volume
Vserver : fsx-for-ontap-svm
Volume : fsx_for_ontap_volume
Feature Used Used%
-------------------------------- ---------- -----
Volume Data Footprint 20.28GB 2%
Footprint in Performance Tier
20.30GB 100%
Footprint in FSxFabricpoolObjectStore
0B 0%
Volume Guarantee 0B 0%
Flexible Volume Metadata 214.9MB 0%
Delayed Frees 16.28MB 0%
Total Footprint 20.51GB 2%
ボリュームの階層化ポリシーをALLに変えた時の使用量を確認してみる
ボリュームの階層化ポリシーをALL
に変えて、データをキャパシティプールに移動させた時の使用量を確認してみましょう。
AWS CDKから階層化ポリシーをAUTO
からALL
に変更します。
./lib/fsx-for-ontap-stack.ts
// FSX for ONTAP volume
const volumeName = "fsx_for_ontap_volume";
const junctionPath = "/volume";
new fsx.CfnVolume(this, "Volume", {
name: volumeName,
ontapConfiguration: {
junctionPath,
sizeInMegabytes: "2097152",
storageEfficiencyEnabled: "true",
storageVirtualMachineId: svm.ref,
securityStyle: "UNIX",
tieringPolicy: {
name: "ALL",
},
},
tags: [
{
key: "Name",
value: volumeName,
},
],
volumeType: "ONTAP",
});
デプロイ後、EC2インスタンスからdf
コマンドを叩いて、ボリュームの使用量を確認してみます。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 2.0T 1.1T 861G 56% /mnt/fsx
$ du -sh /mnt/fsx
21G /mnt/fsx
空き容量(Avail
)が841GBから861GBに減りました。
ONTAP CLIから確認すると、以下のように20GBがキャパシティプールストレージに移動されています。
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume
Vserver Volume Aggregate State Type Size Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
fsx-for-ontap-svm
fsx_for_ontap_volume
aggr1 online RW 2TB 860.1GB 1%
FsxId0c1219addee1f505e::> volume show-footprint -volume fsx_for_ontap_volume
Vserver : fsx-for-ontap-svm
Volume : fsx_for_ontap_volume
Feature Used Used%
-------------------------------- ---------- -----
Volume Data Footprint 20.28GB 2%
Footprint in Performance Tier
317.4MB 2%
Footprint in FSxFabricpoolObjectStore
20GB 98%
Volume Guarantee 0B 0%
Flexible Volume Metadata 214.9MB 0%
Delayed Frees 27.27MB 0%
Total Footprint 20.52GB 2%
以上のことからクライアントから認識できる空き容量はプライマリストレージの空き容量のようですね。使用量(Used
)はプライマリストレージの空き容量(Avail
)になるようには計算されていそうです。
論理スペースを表示するよう設定変更する
プライマリストレージの空き容量が見えるのはそれはそれで便利ですが、実際にそのボリュームにどの程度書き込んだのかが分からないのは不便です。
プライマリストレージとキャパシティプールストレージの合算した空き容量、使用量がクライアントからも認識されるようにしたいです。
キャパシティプールストレージにプライマリストレージの空き容量以上のデータを書き込もうとする場合は、OS、コマンド、ツールによっては空き容量不足で書き込めませんと表示する可能性があります。
そのような場合は、Logical Space Reporting
を有効化します。
Logical Space Reporting
を有効にすると、LinuxとWindowsクライアントから論理的な使用量と空き容量を確認することができます。
When you enable logical space reporting on a volume, your system can display the amount of logical used and available space in addition to the total space in a volume. In addition, users on Linux and Windows client systems can see logical used and available space instead of physical used and physical available space.
Logical Space Reporting
はデフォルトでは無効化されています。
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume -fields is-space-reporting-logical, is-space-enforcement-logical
vserver volume is-space-reporting-logical
----------------- -------------------- --------------------------
fsx-for-ontap-svm fsx_for_ontap_volume false
それでは、Logical Space Reporting
を有効化してみます。
FsxId0c1219addee1f505e::> volume modify -volume fsx_for_ontap_volume -is-space-reporting-logical true
Volume modify successful on volume fsx_for_ontap_volume of Vserver fsx-for-ontap-svm.
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume -fields is-space-reporting-logical, is-space-enforcement-logical
vserver volume is-space-reporting-logical
----------------- -------------------- --------------------------
fsx-for-ontap-svm fsx_for_ontap_volume true
この状態でEC2インスタンスからdf
コマンドを叩いてみます。
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 2.0T 21G 1.9T 2% /mnt/fsx
使用量(Used
)が21GBで、空き容量(Avail
)が1.9TBになりましたね。論理的なサイズが表示されるようになりました。
なお、Logical Space Reporting
を有効化すると、論理的な使用量を表示するようになるので重複排除や圧縮されたデータサイズを無視して表示されるようになります。
試しに10GBのゼロデータのバイナリファイルを書き込んでみます。
$ sudo dd if=/dev/zero of=/mnt/fsx/zero_block_file bs=1M count=10240
10240+0 records in
10240+0 records out
$ df -ht nfs4
Filesystem Size Used Avail Use% Mounted on
svm-0ff2a18a60db90a67.fs-0c1219addee1f505e.fsx.us-east-1.amazonaws.com:/volume 2.0T 31G 1.9T 2% /mnt/fsx
10GB書き込んだので、使用量(Used
)が21GBから31GBに増えていますね。
ただ、ONTAP CLIから重複排除されたデータサイズを確認すると、確かに10GB削減されたことが分かります。
FsxId0c1219addee1f505e::> volume show -volume fsx_for_ontap_volume -fields total, used, available, percent-used, sis-space-saved, sis-space-saved-percent, dedupe-space-saved, dedupe-space-saved-percent, dedupe-space-shared, compression-space-saved, compression-space-saved-percent
vserver volume available total used percent-used sis-space-saved sis-space-saved-percent dedupe-space-saved dedupe-space-saved-percent dedupe-space-shared compression-space-saved compression-space-saved-percent
----------------- -------------------- --------- ------ ------- ------------ --------------- ----------------------- ------------------ -------------------------- ------------------- ----------------------- -------------------------------
fsx-for-ontap-svm fsx_for_ontap_volume 860.0GB 1.90TB 20.32GB 1% 10GB 33% 10GB 33% 0B 0B 0%
そのため、Logical Space Reporting
を有効化すると、クライアントから物理的な空き容量が分からなくなるので注意が必要です。
注意点を理解した上でLogical Space Reportingを有効化しよう
Amazon FSx for NetApp ONTAPのストレージキャパシティ以上のサイズのボリュームを作成すると、実際の使用量よりも大きく見えてしまう事象を紹介しました。
Logical Space Reporting
を有効化することで、プライマリストレージとキャパシティプールストレージの使用量を加味した空き容量、使用量を表示するようになります。
ただし、有効化する際は以下のポイントに注意したいですね。
- Storage Efficiencyによって圧縮、重複排除されたサイズを無視して表示されるようになる
- プライマリストレージの空き容量がわからなくなるので、空きがあるからといって大量に書き込みをすると、プライマリストレージの空き容量不足になる可能性がある
- プライマリストレージの空き容量は常に気を配る必要がある
ちなみにLogical Space Reporting
はSVM単位で有効化することも可能です。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!