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