xfsのファイルシステムにて、利用されるinode数を変更する

xfsのファイルシステムでは、利用可能なinode数が可変になっています。これ、知りませんでした。ファイルシステムクラスターサイズ(アロケーションユニットサイズ)内で、inode領域として確保されるサイズ・領域を変更することが可能となっており、これにより、利用可能なinode数を変更できます。

その方法を、AWSのEC2にて、RHEL7のOSで試しています。実行ユーザは全てrootとなります。

新規EBS Volumeのアタッチ

新しくEBSのVolumeを作成して、対象のEC2インスタンスにアタッチします。詳しくは以下の公式マニュアルにて。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-attaching-volume.html

アタッチしたVolumeのマウント

lsbk コマンドにて、アタッチされたデバイスを確認します。今回は xvdf という名前のデバイスがそれになります。

# lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  10G  0 disk
tqxvda1 202:1    0   1M  0 part
mqxvda2 202:2    0  10G  0 part /
xvdf    202:80   0  10G  0 disk

file コマンドにて、フォーマットされていないことを確認。

# file -s /dev/xvdf
/dev/xvdf: data

mkfs コマンドにて、xfsファイルシステムにフォーマット。この時出力される imaxpct という値が、inode領域で利用できる割合です。25%となっていますね。

# mkfs -t xfs /dev/xvdf
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

尚、このファイルシステムのフォーマット時に、以下のように-iオプションを付与して実行してあげると、inode領域をデフォルトから変更してフォーマットできます。

# mkfs -t xfs -i maxpct=30 /dev/xvdf

mkfsのMANのページはこちら。

https://www.systutorials.com/docs/linux/man/8-mkfs.xfs/

今回は、フォーマット後に変更する方法について下記に記載しています。

もう1回 file コマンドを打って、フォーマットされていることを確認して、

# file -s /dev/xvdf
/dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

マウントします。

# mount /dev/xvdf /data/tmp1

で、fstabにも設定を入れたいから、ディスクのUUIDを確認します。今回は c4933054-90d1-408e-ac56-a4ac37180000 という値ですね。

# ls -al /dev/disk/by-uuid/
total 0
drwxr-xr-x. 2 root root 80 Sep  4 01:41 .
drwxr-xr-x. 4 root root 80 Sep  4 01:22 ..
lrwxrwxrwx. 1 root root 11 Sep  4 01:22 50a9826b-3a50-44d0-ad12-28f2056e9927 -> ../../xvda2
lrwxrwxrwx. 1 root root 10 Sep  4 01:41 c4933054-90d1-408e-ac56-a4ac37180000 -> ../../xvdf

fstabに設定情報を入れてあげます。こんな感じ。

UUID=50a9826b-3a50-44d0-ad12-28f2056e9927 /                       xfs     defaults        0 0
UUID=c4933054-90d1-408e-ac56-a4ac37180000      /data/tmp1              xfs     defaults        0 0

OSを再起動してみて、ちゃんとマウントされたままであることを確認します。

inode領域の拡張

続いてinode領域を拡張します。まずは現在のinode数の確認。

# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/xvda2     6290176 27866 6262310    1% /
devtmpfs        121187   284  120903    1% /dev
tmpfs           126737     1  126736    1% /dev/shm
tmpfs           126737   375  126362    1% /run
tmpfs           126737    16  126721    1% /sys/fs/cgroup
/dev/xvdf      5242880     3 5242877    1% /data/tmp1
tmpfs           126737     1  126736    1% /run/user/1000

df コマンドの他、 xfs_info コマンドでも確認できます。imaxpctの値がinode領域となります。

# xfs_info /data/tmp1/
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

xfs_growfs コマンドに-mオプションを利用することで、inode領域を変更することができます。

# xfs_growfs -m 30 /data/tmp1/
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, 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 30

実行後の確認です。inode数が増えていますね。

# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/xvda2     6290176 27866 6262310    1% /
devtmpfs        121187   284  120903    1% /dev
tmpfs           126737     1  126736    1% /dev/shm
tmpfs           126737   392  126345    1% /run
tmpfs           126737    16  126721    1% /sys/fs/cgroup
/dev/xvdf      6291456     3 6291453    1% /data/tmp1
tmpfs           126737     1  126736    1% /run/user/1000
tmpfs           126737     1  126736    1% /run/user/0
#
# xfs_info /data/tmp1
meta-data=/dev/xvdf              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2621440, imaxpct=30
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0