RedHat Enterprise Linux 7 になってから、デフォルトのファイルシステムがxfsになりました。
1. xfs ってinode を気にしなくていいんでしょ?
昔の ext4 とかのように inode を気にしなくても足りなくなることがなくなり、放置でOKと思っていました。「まさか足りなくなる」なんて夢にも思っておりませんでした。
また、xfs は inode自動拡張だとかいう記事も読んだ気がしたもんだからすっかり安心しきっておりました。
しかし、やってしまいましたよ。inode 枯渇...
2. xfsでもinode枯渇します
# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 52427584 18726941 33700643 36% /
devtmpfs 8219371 360 8219011 1% /dev
tmpfs 8191502 1 8191501 1% /dev/shm
tmpfs 8191502 376 8191126 1% /run
tmpfs 8191502 16 8191486 1% /sys/fs/cgroup
tmpfs 8191502 1 8191501 1% /run/user/1000
/dev/xvdf1 629145472 629145472 0 100% /home/data2
一番下の行を見てください。inodeが全く0です。
こうなると、ファイルは当然書き込みできません。以下のようになります。
[root@ip-172-x-x-xxx data2]# touch test.txt
touch: cannot touch ‘test.txt’: No space left on device
「またまた~。ご冗談を」と思っていたらホントでした。
[root@ip-172-x-x-xxx data2]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 100G 83G 18G 83% /
devtmpfs 32G 0 32G 0% /dev
tmpfs 32G 0 32G 0% /dev/shm
tmpfs 32G 17M 32G 1% /run
tmpfs 32G 0 32G 0% /sys/fs/cgroup
tmpfs 6.3G 0 6.3G 0% /run/user/1000
/dev/xvdf1 5.9T 2.7T 3.2T 46% /home/data2
Disk はこんなに余っています。
3. 調査
あまりググってもそれらしい情報がなかったのですが、
Inodes on XFS – timor's site
https://gagor.pl/2013/11/inodes-on-xfs/
を見つけました。
これによると、xfsのinodeはフォーマット時に容量の何パーセントを使うか決めるんだそうです。現在、それが何パーセントかは、xfs_info コマンドで調べることが出来ます。xfsのデフォルトは、25%をinodeに割りあてるのがデフォルトだが、ディストビューションにより、5%もしくは、10%に減らされていることが多いんだそうです。
私の使っているのは、CentOS-7です。どれどれ見てみましょう。
[root@ip-172-x-x-xxx data2]# xfs_info /dev/xvdf1
meta-data=/dev/xvdf1 isize=512 agcount=6, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1572863739, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
該当項目は、上から5行目のimaxpct です。
data = bsize=4096 blocks=1572863739, imaxpct=5
5%ですね。。。。
4. xfs の inode を拡張する
増やし方も上記のサイトに書いてありました。
xfs_growfs -m XX にするんだそうです。ちょっと多めで15%に割りあてましょう。
# xfs_growfs -m 15 /dev/xvdf1
さてどうでしょう。
[root@ip-172-x-x-xxx data2]# xfs_info /dev/xvdf1
meta-data=/dev/xvdf1 isize=512 agcount=6, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=1572863739, imaxpct=15
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data = bsize=4096 blocks=1572863739, imaxpct=15
15%になりました。
inodeはどうでしょうか。
[root@ip-172-x-x-xxx data2]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 52427584 18726941 33700643 36% /
devtmpfs 8219371 360 8219011 1% /dev
tmpfs 8191502 1 8191501 1% /dev/shm
tmpfs 8191502 385 8191117 1% /run
tmpfs 8191502 16 8191486 1% /sys/fs/cgroup
tmpfs 8191502 1 8191501 1% /run/user/1000
/dev/xvdf1 1887436480 629145857 1258290623 34% /home/data2
ガッツリ増えましたね。
ファイルも作成出来ました。
フォーマット時には、
mkfs.xfs -imaxpct=XX
でパーセントを決めるそうです。
5. まとめ
- xfsでもinodeは枯渇する!
-
xfs_growfs -m <割り当てパーセント> <デバイス>
でinodeの領域を増やせ!