テックブログ

inodeについて

はじめに

こんにちは、n.tです。
今回はinodeについて記事を
書いていきたいと思います。

inodeとは?

inode(アイノード)は、ファイルシステムの重要な概念です。

それぞれのファイルやディレクトリに関する重要な情報を保持しており
ファイルの所有者、ファイルのサイズ、アクセス権限、作成日時、更新日時などの情報が含まれています。

inodeは、ファイルシステム上で個々のファイルやディレクトリごとに作成されます。
そして、ファイルシステムの種類や設定によって作成できるinodeの数が決まっています。
これには、ファイルシステムのディスク容量やディスクのinodeテーブルのサイズなどが関係しています。

inodeの枯渇について

ファイルシステムがinodeを使い果たしてしまうと、新しいファイルやディレクトリを作成できなくなる可能性があります。この状態はinodeの枯渇と呼ばれ、ファイルシステムの正常な機能に影響を与える
可能性があります。inodeの枯渇はファイルシステムを設計する際に考慮すべき重要な要素の一つなのです。

ディスク容量に空きがあるように見える場合でも、inodeが枯渇している場合はファイルやディレクトリを作成できなくなる場合があります。

▽inodeの使用状況は「df -i」コマンドを使用して確認することができます。

・以下がコマンドの出力結果となります。

-------------------------------------------------------------------
# df -i

Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        118921   312  118609    1% /dev
tmpfs           121572     1  121571    1% /dev/shm
tmpfs           819200   570  818630    1% /run
/dev/xvda1     7858112 48019 7810093    1% /
tmpfs          1048576  4205 1044371    1% /tmp
tmpfs            24314    14   24300    1% /run/user/1001
-------------------------------------------------------------------

inodeを枯渇させてみる

▽ここからは検証環境を使用して、実際にinodeを枯渇させてみたいと思います。(Amazon Linux 2023)

・検証用に新しく領域を作成し、その領域内のinodeを枯渇させます。

-------------------------------------------------------------------
# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        118921   286  118635    1% /dev
tmpfs           121572     1  121571    1% /dev/shm
tmpfs           819200   518  818682    1% /run
/dev/xvda1     7858112 48003 7810109    1% /
tmpfs          1048576    19 1048557    1% /tmp
tmpfs            24314    14   24300    1% /run/user/1001
-------------------------------------------------------------------
↓
-------------------------------------------------------------------
# df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        118921   312  118609    1% /dev
tmpfs           121572     1  121571    1% /dev/shm
tmpfs           819200   569  818631    1% /run
/dev/xvda1     7858112 48004 7810108    1% /
tmpfs          1048576    20 1048556    1% /tmp
tmpfs            24314    14   24300    1% /run/user/1001
/dev/loop0       25584    11   25573    1% /mnt/new_disk      ←検証用に新規作成
-------------------------------------------------------------------

・下記のコマンドを使用して1秒ごとに10個ずつファイルを作成していきます。
 中身が空のファイルのみを作成するのでディスク容量自体は増えません。

-----------------------------------------------------------------------
while true; do touch /mnt/new_disk/$(date +%s)_{1..10}; sleep 1; done
-----------------------------------------------------------------------

枯渇させてみる

▽inode が減っていく過程は “$ watch -n 1 df -i ” コマンドを使用して確認することができます。

・大体15分程で対象領域のinode使用率が100%になりました。

------------------------
# watch -n 1 df -i
------------------------
------------------------------------------------------------------------------------------------------------------------
Every 1.0s: df -i                                             tech-test: Sun Mar 17 20:52:53 2024

Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        118921   312  118609    1% /dev
tmpfs           121572     1  121571    1% /dev/shm
tmpfs           819200   570  818630    1% /run
/dev/xvda1     7858112 48018 7810094    1% /
tmpfs          1048576  4205 1044371    1% /tmp
tmpfs            24314    14   24300    1% /run/user/1001
/dev/loop0       25584  8776   16808   35% /mnt/new_disk
------------------------------------------------------------------------------------------------------------------------
↓
------------------------------------------------------------------------------------------------------------------------
Every 1.0s: df -i                                             tech-test: Sun Mar 17 21:02:53 2024

Filesystem      Inodes IUsed   IFree IUse% Mounted on
devtmpfs        118921   312  118609    1% /dev
tmpfs           121572     1  121571    1% /dev/shm
tmpfs           819200   570  818630    1% /run
/dev/xvda1     7858112 48018 7810094    1% /
tmpfs          1048576  4205 1044371    1% /tmp
tmpfs            24314    14   24300    1% /run/user/1001
/dev/loop0       25584 25584       0  100% /mnt/new_disk
------------------------------------------------------------------------------------------------------------------------

・inodeの使用率が100%になった時点で、以下の通り新規ファイルが作成できなくなりました。

-------------------------------------------------------------------------------------------------
# while true; do touch /mnt/new_disk/$(date +%s)_{1..50}; sleep 1; done
touch: cannot touch '/mnt/new_disk/1710676968_45': No space left on device
touch: cannot touch '/mnt/new_disk/1710676968_46': No space left on device
-------------------------------------------------------------------------------------------------

・inodeの使用率が100%になった時点で対象領域のディスクスペースを確認しますが
 使用率1%となっており、ディスクスペースは消費されていないことがわかります。

-------------------------------------------------------------------------------------------------
# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           475M     0  475M   0% /dev/shm
tmpfs           190M  2.9M  188M   2% /run
/dev/xvda1       15G  2.4G   13G  16% /
tmpfs           475M   12M  464M   3% /tmp
tmpfs            95M     0   95M   0% /run/user/1001
/dev/loop0       89M  766K   81M   1% /mnt/new_disk
-------------------------------------------------------------------------------------------------

・手動での新規ファイル作成もできなくなっています。

-------------------------------------------------------------------------------------------------
# touch /mnt/new_disk/new_file
touch: cannot touch '/mnt/new_disk/new_file': No space left on device
-------------------------------------------------------------------------------------------------

おわりに

inodeの枯渇はファイルシステムの正常な機能に大きな影響を与えることがわかりました。

ディスクスペースが空いているように見えてもinodeが枯渇していれば新規でファイルが作成
できなくなりますので、ディスクスペースのみならずinodeにも目を向けてもらえればと思います。

以上となります。それではまた。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください