[アップデート] Amazon FSx for NetApp ONTAPがONTAP 9.12.1に対応したことにより300TiBのボリュームを作成できるようになりました

便利だけどあまりにも大きいFlexVolumeの利用は注意しよう
2023.08.20

100TiBよりも大きいボリュームを作成したいな

こんにちは、のんピ(@non____97)です。

皆さんはAmazon FSx for NetApp ONTAP(以降FSxN)で100TiBよりも大きいボリュームを作成したいなと思ったことはありますか? 私はあります。

FlexVolumeの場合、1つのボリュームの最大サイズは100TiBでした。これ以上のサイズのボリュームを作成する場合はFlexGroupを使う必要がありました。FlexGroupについては以下記事をご覧ください。

FlexGroupの場合、FSxNのボリュームバックアップに対応していなかったり、SnapMirrorの推奨間隔がFlexVolumeよりも長かったり注意事項がいくつかあります。

そんな折、2023年6月末から徐々にFSxNでONTAP 9.12.1が使えるようになりました。これによりONTAP 9.12.1のアップデートである300TiBのFlexVolumeを作成できるようになりました。

実際に試してみたので紹介します。

いきなりまとめ

  • FlexVolumeでも300TiBのボリュームを作成できるようになった
  • 128TiBのLUNやファイルも作成可能
  • ただし、無闇やたらに単一のボリュームで賄おうとすると辛くなる
    1. バックアップからのリストアに時間がかかる & リストア時にSSDを圧迫しやすい
    2. マルチFlexVolumeよりもパフォーマンスが出にくい
    3. ボリューム単位での設定項目や作業の調整が大変
  • 適切なサイズや分類でボリュームを分割しよう

ONTAP 9.12.1のアップデート

FSxNに関係ありそうなONTAP 9.12.1のアップデート内容は以下の通りです。

  • Support for larger FlexVol volumes
  • Support for larger file and LUN sizes
  • Enhanced consistency group functionality
  • SnapLock for SnapVault support for FlexGroup volumes
  • SnapLock option to set minimum retention time "unspecified" absolute retention time
  • Tamperproof Snapshot copies
  • System Manager support for SnapLock
  • NFS extended attributes
  • Disable weak encryption types for Kerberos communication
  • S3 client access to NAS data
  • Additional support for S3 actions
  • Increase in usable aggregate space
  • FlexGroup rebalancing
  • SnapLock for SnapVault support for FlexGroup volumes

詳細はONTAPのリリースノートをご覧ください。

また、ネットワールドさんの記事も参考になります。

個人的にはSupport for larger file and LUN sizesIncrease in usable aggregate spaceFlexGroup rebalancingも嬉しいです。

Support for larger file and LUN sizesは元々16TiBまでだったLUNや1ファイルのサイズが128TiBになったというものです。

The maximum file and LUN size supported in SnapMirror Synchronous configurations has increased from 16 TB to 128 TB. Both the source and destination clusters must be running ONTAP 9.12.1 P2 or later.

これによりゲノムデータやVMDKといった大容量のデータファイルが扱いやすくなります。

16TiB以上のファイルを作成する場合は、以下KBにも記載にあるとおりFlexVolumeのis-large-size-enabledtrueになっている必要があります。

Increase in usable aggregate spaceはアグリゲートでリザーブド領域が30TB以上の場合10%から5%に減るというものです。

For All Flash FAS (AFF) and the FAS500f platforms, the WAFL reserve for aggregates greater than 30TB is reduced from 10% to 5%, resulting in increased usable space in the aggregate.

AFFとFAS500fが対象のようなのでFSxNが対象かどうかは怪しいところですが、対象の場合最低でも1.5TBは容量を削減することができるためコスト的にかなり嬉しいです。

FlexGroup rebalancingはFlexGroupのメンバーボリューム間でファイルを無停止で移動させる機能です。特定のメンバーボリュームの偏りを解消することができます。詳細は以下NetApp公式ドキュメントをご覧ください。

やってみた

実際に試してみます。

以下のように20MiBのボリュームを用意しました。

FSxNのボリューム

ONTAP CLIからも確認してみます。

# FSxNファイルシステムのONTAPのバージョンがONTAP 9.12.1であることを確認
::> version
NetApp Release 9.12.1P4: Tue Jun 06 20:41:34 UTC 2023

# ボリュームサイズの確認
::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
svm       svm_root     aggr1        online     RW          1GB    972.4MB    0%
svm       vol1         aggr1        online     RW         20MB    18.75MB    1%
2 entries were displayed.

ボリュームサイズを拡張した際にメタデータなどで使用量が変化するか確認したいので、フットプリントやaggregateサイズなども確認しておきます。

::> volume show-footprint -volume vol1


      Vserver : svm
      Volume  : vol1

      Feature                                         Used       Used%
      --------------------------------             ----------    -----
      Volume Data Footprint                             252KB       0%
             Footprint in Performance Tier              376KB     100%
             Footprint in FSxFabricpoolObjectStore         0B       0%
      Volume Guarantee                                     0B       0%
      Flexible Volume Metadata                          208KB       0%
      Delayed Frees                                     124KB       0%

      Total Footprint                                   584KB       0%

::> aggr show-space

      Aggregate : aggr1
      Performance Tier
      Feature                                          Used      Used%
      --------------------------------           ----------     ------
      Volume Footprints                              1.01GB         0%
      Aggregate Metadata                            18.39MB         0%
      Snapshot Reserve                              47.88GB         5%
      Total Used                                    48.90GB         5%

      Total Physical Used                           229.8MB         0%


      Total Provisioned Space                        1.02GB         0%


      Aggregate : aggr1
      Object Store: FSxFabricpoolObjectStore
      Feature                                          Used      Used%
      --------------------------------           ----------     ------
      Logical Used                                       0B          -
      Logical Referenced Capacity                        0B          -
      Logical Unreferenced Capacity                      0B          -

      Total Physical Used                                0B          -



2 entries were displayed.

::> vserver show-aggregates
                                       Available
Vserver        Aggregate      State         Size Type    SnapLock Type
-------------- -------------- ------- ---------- ------- --------------
svm            aggr1          online     908.6GB ssd     non-snaplock

NFSクライアントからもマウントしてみましょう。

$ sudo mkdir -p /mnt/fsxn

$ sudo mount -t nfs4 svm-082e4c3914fc50e98.fs-0a3fea624cfa58381.fsx.us-east-1.amazonaws.com:/vol1 /mnt/fsxn
$ df -hT
Filesystem                                                                   Type      Size  Used Avail Use% Mounted on
devtmpfs                                                                     devtmpfs  462M     0  462M   0% /dev
tmpfs                                                                        tmpfs     470M     0  470M   0% /dev/shm
tmpfs                                                                        tmpfs     470M  352K  470M   1% /run
tmpfs                                                                        tmpfs     470M     0  470M   0% /sys/fs/cgroup
/dev/nvme0n1p1                                                               xfs       8.0G  1.7G  6.4G  21% /
svm-082e4c3914fc50e98.fs-0a3fea624cfa58381.fsx.us-east-1.amazonaws.com:/vol1 nfs4       19M  192K   19M   1% /mnt/fsxn

19MBで認識されました。20MBではないのはSnapshot Reserve分が目減りしているためです。

それでは20MiBのボリュームを300TiBまで拡張させます。

ボリュームサイズに314,572,800を指定して更新します。

314,572,800に拡張

更新後のボリュームサイズを確認すると確かに300TiBになっていました。

拡張後のボリューム

ONTAP CLIからも確認します。

::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
svm       svm_root     aggr1        online     RW          1GB    972.4MB    0%
svm       vol1         aggr1        online     RW        300TB    908.5GB    0%
2 entries were displayed.

::> volume show-footprint -volume vol1


      Vserver : svm
      Volume  : vol1

      Feature                                         Used       Used%
      --------------------------------             ----------    -----
      Volume Data Footprint                             264KB       0%
             Footprint in Performance Tier              388KB     100%
             Footprint in FSxFabricpoolObjectStore         0B       0%
      Volume Guarantee                                     0B       0%
      Flexible Volume Metadata                        107.7MB       0%
      Delayed Frees                                     124KB       0%

      Total Footprint                                 108.1MB       0%

::> aggr show-space

      Aggregate : aggr1
      Performance Tier
      Feature                                          Used      Used%
      --------------------------------           ----------     ------
      Volume Footprints                              1.12GB         0%
      Aggregate Metadata                            18.95MB         0%
      Snapshot Reserve                              47.88GB         5%
      Total Used                                    49.01GB         5%

      Total Physical Used                           238.0MB         0%


      Total Provisioned Space                       300.0TB
                                                                32083%


      Aggregate : aggr1
      Object Store: FSxFabricpoolObjectStore
      Feature                                          Used      Used%
      --------------------------------           ----------     ------
      Logical Used                                       0B          -
      Logical Referenced Capacity                        0B          -
      Logical Unreferenced Capacity                      0B          -

      Total Physical Used                                0B          -



2 entries were displayed.

::> vserver show-aggregates
                                       Available
Vserver        Aggregate      State         Size Type    SnapLock Type
-------------- -------------- ------- ---------- ------- --------------
svm            aggr1          online     908.5GB ssd     non-snaplock

Flexible Volume Metadataが208KBから107.7MBと増えていますね。その分Volume Footprintsも増加しています。

NFSクライアントからも確認してみましょう。

$ df -hT -t nfs4
Filesystem                                                                   Type  Size  Used Avail Use% Mounted on
svm-082e4c3914fc50e98.fs-0a3fea624cfa58381.fsx.us-east-1.amazonaws.com:/vol1 nfs4  285T  285T  909G 100% /mnt/fsxn

300TiB × (1 - Snapshot Reserve 5%) = 285TiBとして認識されていますね。

128TiBのLUNの作成

ついでにONTAP 9.12.1で128TiBのLUNも作成できるようになったので、試してみます。

# 128TiBのLUNの作成
::> lun create -path /vol/vol1/lun -size 128TB -ostype linux -space-allocation enabled

Created a LUN of size 128t (140737488355328)

# 128TiB以上のLUNを作成しようとしてみる
::> lun create -path /vol/vol1/lun -size 129TB -ostype linux -space-allocation enabled

Error: command failed: Requested LUN size is too large. Maximum size: 128t (140737488355328)

# 128TiBのLUNが作成できたことを確認
::> lun show
Vserver   Path                            State   Mapped   Type        Size
--------- ------------------------------- ------- -------- -------- --------
svm       /vol/vol1/lun                   online  unmapped linux       128TB

::> lun show -instance

                  Vserver Name: svm
                      LUN Path: /vol/vol1/lun
                   Volume Name: vol1
                    Qtree Name: ""
                      LUN Name: lun
                      LUN Size: 128TB
                       OS Type: linux
             Space Reservation: enabled
                 Serial Number: lWB0S?VCDUk-
           Serial Number (Hex): 6c574230533f564344556b2d
                       Comment:
    Space Reservations Honored: false
              Space Allocation: enabled
                         State: online
                      LUN UUID: 3450215e-bda5-4a8e-bf0a-747ce9aaa6dd
                        Mapped: unmapped
Physical Size of Logical Block: 512B
              Device Legacy ID: -
              Device Binary ID: -
                Device Text ID: -
                     Read Only: false
         Fenced Due to Restore: false
                     Used Size: 0
           Maximum Resize Size: 128TB
                 Creation Time: 8/20/2023 00:42:54
                         Class: regular
          Node Hosting the LUN: FsxId0a3fea624cfa58381-01
              QoS Policy Group: -
     QoS Adaptive Policy Group: -
           Caching Policy Name: -
                         Clone: false
      Clone Autodelete Enabled: false
           Inconsistent Import: false
                   Application: -
         ZRTO Volume consensus: -

128TiBのLUNは作成できて、129TiBのLUNは作成できませんでした。

128TiBのファイルを作成できるように設定

さらについでに、128TiBのファイルを作成できるように設定してみましょう。

まず、現在のボリュームの設定を確認してみます。

::> volume show -fields is-large-size-enabled
vserver volume   is-large-size-enabled
------- -------- ---------------------
svm     svm_root false
svm     vol1     true
2 entries were displayed.

デフォルトでis-large-size-enabledtrueでした。

面白くないので一度falseにして、再度trueにします。

::> volume modify ?
  [ -vserver <vserver name> ]                                                                                    Vserver Name (default: svm)
   [-volume] <volume name>                                                                                       Volume Name
  [ -size {<integer>[KB|MB|GB|TB|PB]} ]                                                                          Volume Size
  [ -state {online|restricted|offline|force-online|force-offline|mixed} ]                                        Volume State
  [ -policy <text> ]                                                                                             Export Policy
  [ -user <user name> ]                                                                                          User ID
  [ -group <group name> ]                                                                                        Group ID
  [ -security-style <security style> ]                                                                           Security Style
  [ -unix-permissions <unix perm> ]                                                                              UNIX Permissions
  [ -comment <text (size 0..1023)> ]                                                                             Comment
  [ -space-nearly-full-threshold-percent <percent> ]                                                             Volume Nearly Full Threshold Percent
  [ -space-full-threshold-percent <percent> ]                                                                    Volume Full Threshold Percent
  { [ -max-autosize {<integer>[KB|MB|GB|TB|PB]} ]                                                                Maximum Autosize
    [ -min-autosize {<integer>[KB|MB|GB|TB|PB]} ]                                                                Minimum Autosize
    [ -autosize-grow-threshold-percent <percent> ]                                                               Autosize Grow Threshold Percentage
    [ -autosize-shrink-threshold-percent <percent> ]                                                             Autosize Shrink Threshold Percentage
    [ -autosize-mode {off|grow|grow_shrink} ]                                                                    Autosize Mode
  | [ -autosize-reset [true] ] }                                                                                 Autosize Reset
  [ -files <integer> ]                                                                                           Total Files (for user-visible data)
  { [ -space-slo {none|thick|semi-thick} ]                                                                       Space SLO
  | [ -space-guarantee|-s {none|volume} ]                                                                        Space Guarantee Style
    [ -fractional-reserve <percent> ]                                                                            Fractional Reserve
  [ -snapdir-access {true|false} ]                                                                               Snapshot Directory Access Enabled
  [ -percent-snapshot-space <percent> ]                                                                          Space Reserved for Snapshot Copies
  [ -snapshot-policy <snapshot policy> ]                                                                         Snapshot Policy
  [ -language <language_code> ]                                                                                  Language
  [ -foreground {true|false} ]                                                                                   Foreground Process
  [ -nvfail {on|off} ]                                                                                           NVFAIL Option
  [ -dr-force-nvfail {on|off} ]                                                                                  Force NVFAIL on MetroCluster Switchover
  [ -filesys-size-fixed {true|false} ]                                                                           Is File System Size Fixed
  [ -extent-enabled {off|on|space-optimized} ]                                                                   (DEPRECATED)-Extent Option
  [ -space-mgmt-try-first {volume_grow|snap_delete} ]                                                            Primary Space Management Strategy
  [ -read-realloc {off|on|space-optimized} ]                                                                     Read Reallocation Option
  [ -sched-snap-name {create-time|ordinal} ]                                                                     Naming Scheme for Automatic Snapshot Copies
  { [ -qos-policy-group <text> ]                                                                                 QoS Policy Group Name
  | [ -qos-adaptive-policy-group <text> ] }                                                                      QoS Adaptive Policy Group Name
  [ -caching-policy <text> ]                                                                                     Caching Policy Name
  [ -vserver-dr-protection {protected|unprotected} ]                                                             Vserver DR Protection
  [ -is-space-reporting-logical {true|false} ]                                                                   Logical Space Reporting
  [ -is-space-enforcement-logical {true|false} ]                                                                 Logical Space Enforcement
  [ -tiering-policy <Tiering Policy> ]                                                                           Volume Tiering Policy
  [ -tiering-object-tags <text>, ... ]                                                                           Tags to be Associated with Objects Stored on a FabricPool
  [ -anti-ransomware-state {disabled|enabled|dry-run|paused|dry-run-paused|enable-paused|disable-in-progress} ]  Anti-ransomware State
  [ -granular-data {disabled|enabled} ]                                                                          Granular data
  [ -snapshot-locking-enabled {true|false} ]                                                                     Enable Snapshot Copy Locking
  [ -is-large-size-enabled {true|false} ]                                                                        Are Large Size Volumes and Files Enabled

::> volume modify -volume vol1 -is-large-size-enabled false

Error: command failed: Disabling large volume size is not supported because the volume contains files larger than 16TB or the volume size is larger than 100TB.

ボリュームサイズが100TB以上であるため無効にできないと怒られました。

ということであるなら、一度100TiB未満に変更してfalseできるか確認します。

# LUNの削除
::> lun delete -path /vol/vol1/lun

Warning: LUN "/vol/vol1/lun" in Vserver "svm" is not mapped, but it might still contain data.
         Are you sure you want to delete it? {y|n}: y

# LUNが削除されたことを確認
::> lun show
This table is currently empty.

# ボリュームサイズを99TBに変更
::> volume modify -volume vol1 -size 99TB
Volume modify successful on volume vol1 of Vserver svm.

# is-large-size-enabled を false に変更
::> volume modify -volume vol1 -is-large-size-enabled false

Error: command failed: Disabling large volume size is not supported because the volume contains files larger than 16TB or the volume size is larger than 100TB.

100TB未満かつ16TB以上のファイルは存在しないはずですが、エラーになりました。

しょうがないので、新しくボリュームを作成してis-large-size-enabledtrueにします。

# ボリュームの作成
::> volume create -volume vol2 -aggregate aggr1 -size 100GB -state online -policy default -tiering-policy none
[Job 50] Job succeeded: Successful

# ボリュームが作成されたことを確認
::> volume show
Vserver   Volume       Aggregate    State      Type       Size  Available Used%
--------- ------------ ------------ ---------- ---- ---------- ---------- -----
svm       svm_root     aggr1        online     RW          1GB    972.1MB    0%
svm       vol1         aggr1        online     RW        300TB    908.3GB    0%
svm       vol2         aggr1        online     RW        100GB    95.00GB    0%
3 entries were displayed.

# is-large-size-enabled の確認
::> volume show -fields is-large-size-enabled
vserver volume   is-large-size-enabled
------- -------- ---------------------
svm     svm_root false
svm     vol1     true
svm     vol2     false
3 entries were displayed.

# 作成したボリュームの is-large-size-enabled を true に変更
::> volume modify -volume vol2 -is-large-size-enabled true

Warning: Either the specified volume size or maximum autosize is larger than 100 TB or you are setting is-large-size-enabled flag to true. This will result in the volume
         supporting larger size limits. The new limit on the size of the volume will be 300TB. The limit on the size of a file or LUN will be 128TB. If this volume will become
         the source of a SnapMirror relationship, creation of SnapMirror or FlexCache relationships is only supported with volumes that reside in clusters with an effective
         cluster version of 9.12.1 or later, because of incompatible size limits. Revert of the cluster to an earlier version is not supported when a volume supports larger size
         limits. All volumes must be 100 TB or less, have all files be 16TB or less, and have larger size limit support disabled prior to revert.
Do you want to continue? {y|n}: y
Volume modify successful on volume vol2 of Vserver svm.

# 作成したボリュームの is-large-size-enabled を true に変更されたことを確認
::> volume show -fields is-large-size-enabled
vserver volume   is-large-size-enabled
------- -------- ---------------------
svm     svm_root false
svm     vol1     true
svm     vol2     true
3 entries were displayed.

デフォルトではis-large-size-enabledfalseのようですね。

is-large-size-enabledtrueにすることができました。

また、Either the specified volume size or maximum autosize is larger than 100 TB or you are setting is-large-size-enabled flag to true.というメッセージから自動拡張の最大ボリュームサイズが100TBより大きい場合にも自動でis-large-size-enabledtrueになりそうです。

実際に試してみましょう。

# ボリュームの is-large-size-enabled を false に変更
::> volume modify -volume vol2 -is-large-size-enabled false
Volume modify successful on volume vol2 of Vserver svm.

# ボリュームの is-large-size-enabled を false に変更されたことを確認
::> volume show -volume vol2 -fields is-large-size-enabled
vserver volume is-large-size-enabled
------- ------ ---------------------
svm     vol2   false

# 現在のボリュームの自動拡張の最大サイズを確認
::> volume show -volume vol2 -fields max-autosize
vserver volume max-autosize
------- ------ ------------
svm     vol2   120GB

# 自動拡張の最大サイズを100TBに設定
::> volume autosize -volume vol2 -maximum-size 100TB
vol autosize: Volume "svm:vol2" autosize settings updated.

# 自動拡張の最大サイズを100TBに設定されたことを確認
::> volume show -volume vol2 -fields max-autosize
vserver volume max-autosize
------- ------ ------------
svm     vol2   100TB

# ボリュームの is-large-size-enabled の確認
::> volume show -volume vol2 -fields is-large-size-enabled
vserver volume is-large-size-enabled
------- ------ ---------------------
svm     vol2   false

# 自動拡張の最大サイズを101TBに設定
::> volume autosize -volume vol2 -maximum-size 101TB

Warning: Either the specified volume size or maximum autosize is larger than 100 TB or you are setting is-large-size-enabled flag to true. This will result in the volume
         supporting larger size limits. The new limit on the size of the volume will be 300TB. The limit on the size of a file or LUN will be 128TB. If this volume will become
         the source of a SnapMirror relationship, creation of SnapMirror or FlexCache relationships is only supported with volumes that reside in clusters with an effective
         cluster version of 9.12.1 or later, because of incompatible size limits. Revert of the cluster to an earlier version is not supported when a volume supports larger size
         limits. All volumes must be 100 TB or less, have all files be 16TB or less, and have larger size limit support disabled prior to revert.
Do you want to continue? {y|n}: y
vol autosize: Volume "svm:vol2" autosize settings updated.

# ボリュームの is-large-size-enabled の確認
::> volume show -volume vol2 -fields is-large-size-enabled
vserver volume is-large-size-enabled
------- ------ ---------------------
svm     vol2   true

最大ボリュームサイズが100TB超の場合にis-large-size-enabledtrueになることを確認できました。

便利だけどあまりにも大きいFlexVolumeの利用は注意しよう

Amazon FSx for NetApp ONTAPがONTAP 9.12.1に対応したことにより300TiBのボリュームを作成できるようになったアップデートを紹介しました。

100TiB超の単一領域を見せたい場合に、FlexGroupを使わずにFlexVolumeを使えるようになりました。

ただし、無闇やたらに単一のボリュームで賄おうとすると辛くなります。個人的に単一ボリュームで対応するのをオススメしない理由は以下3点です

  1. バックアップからのリストアに時間がかかる & リストア時にSSDを圧迫しやすい
  2. マルチFlexVolumeよりもパフォーマンスが出にくい
  3. ボリューム単位での設定項目や作業の調整が大変

どうしても巨大なボリュームとなるとリストアにも時間がかかります。ある程度のまとまりでボリュームを分割すれば、リストアが完了したボリュームから使用することが可能です。また、FSxNのバックアップからリストアする場合必ずSSDに書き込まれます。加えて、SnapMirrorと異なりQoSをかけることもできません。そのため、どうしてもリストア時にSSDを圧迫しやすいです。

2つ目の理由は先述のFlexGroupの記事内でも記載していますが、FlexVolumeはシリアル処理です。そのため、複数のFlexVolumeに分散させた方がパフォーマンスが出やすいです。こちらはNetAppの方がQiitaに投稿されているので併せてご覧ください。

1つのボリュームとなると影響範囲が大きくなることも見逃せません。例えば、複数業務や部署のデータを1つのボリュームで管理している場合、ボリューム単位で設定するパラメーターは全て同じである必要がありますし、Snapshotからボリュームごとリストアしたい場合は調整が大変です。適度なサイズで分割することをお勧めします。

また、300TiBのボリュームを用意する場合、重複排除やアクセス頻度にもよりますが、Tiering PolicyをAllにしても1TiB以上のSSDのプロビジョニングは必要かと思います。SSDのサイジングは以下記事をご覧ください。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!