Tech Horse Club

技術ブログ×競馬予測

【Linux】XFSのinodeの限界値に関する仕様を検証する

前回の記事で、ファイルシステムの限界値に関する仕様を検証する為に、ループバックデバイスという機能を用いて、ファイルシステムの仕様を検証する環境を用意しました。 今回は、この環境を利用して、XFSのinodeの限界に関する仕様を検証していきます。

XFSのinodeに関する仕様

XFSに関するinode数の上限について調べていた所、下記のサイトにてinode数の上限拡張に関する内容がまとめられていたので、紹介させて頂きます。

Inodes on XFS

  • XFSにて、inodeを使い尽くす問題が起きる事は極めてまれである。
  • XFSは、他のファイルシステムで知られているようなinodeの限界値を持たない。
  • ファイルシステム全体における割合をinodeの限界として使用しており、殆どのディストリビューションでは25%になる。
  • しかし、いくつかのディストリビューションでは、5〜10%に下げられている。
  • xfs_infoの実行結果における、imaxpctの値を見る事でチェック出来る。
  • 動的に値を変更する為には、xfs_growfs -m XXを使う。

検証

上記の仕様を元に、inode数の上限について検証していきます。

$ df -iT | grep mnt
/dev/loop0              ext4       64000     11   63989     1% /mnt/ext4
/dev/loop1              xfs       512000      3  511997     1% /mnt/xfs

$ xfs_info /mnt/xfs
meta-data=/dev/loop1             isize=512    agcount=4, agsize=64000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=256000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

ディストリビューションによって、「imaxpct」の値が変わるとのことでしたが、CentOS7の場合は、25%となっています。(この場合、だいたいファイルシステム全体が1000MBなので、250MBまでinode領域を割り当てる事が出来る、という意味になります。)

これを見るだけでは面白くないので、思い切って1%に変更してみます。

$ sudo xfs_growfs -m 1 /mnt/xfs/
meta-data=/dev/loop1             isize=512    agcount=4, agsize=64000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=256000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
inode max percent changed from 25 to 1

xfs_growfsコマンドを使って、「imaxpct」の値を25から1に変更しています。

$ xfs_info /mnt/xfs
meta-data=/dev/loop1             isize=512    agcount=4, agsize=64000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=256000, imaxpct=1
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
$ df -iT | grep mnt
/dev/loop0              ext4       64000     11   63989     1% /mnt/ext4
/dev/loop1              xfs        20480      3   20477     1% /mnt/xfs

「imaxpct」の値が25%から1%に変化すると共に、df -iで確認したinode数の最大値が一気に減りましたね。

CentOS7でデフォルトで使用されるファイルシステムがXFSに変わりました。inode数の上限に逼迫するほど大量のファイルを作成する事は通常の運用では少ないかもしれませんが、発生する可能性があるという知識を持っておくと、障害発生時の初動が変わると思いますので、知っておいて損はないかと思います。