[No space left on device] inode 枯渇したときの対処方法

2021.03.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

テクニカルサポート部の 丸屋 正志(まるちゃん)です。

ファイルを作成しようとしたら No space left on device が標準出力され、ターミナルで df -i を実行したけれども十分なスペースがあるのに作成出来なかったことはないですか?

1. そもそも inodeとは?

inode 【iノード】

inodeとは、UNIX系OSの一部のファイルシステムで用いられる、ファイルやディレクトリについての情報を記録した管理データのこと。

inodeは一つ一つのファイルやディレクトリごとに作成され、各inodeには装置内で固有(一意)の整数値(inode番号)が割り当てられる。ファイルやディレクトリはシステム上ではこのinode番号で識別される。

2. inode 使用状況確認手順

ターミナル上で df -i と入力して実行することで確認が出来ます。

[ec2-user ~]$ df -i
ファイルシス   Iノード  I使用   I残り I使用% マウント位置
... (省略) ...
/dev/xvda1  256019 256019 0    100%   /
... (省略) ...

2.1. 各項目について

項目 説明
Inodes / Iノード 該当 device で利用出来る inode の限界値
IUsed / I使用 inode 使用量
IFree / I残り inode 空き容量
IUse% / I使用% inode 使用率

3. inode のサイズ拡張手順

今から inode のサイズ拡張をしていきます・・・の前にまずはバックアップを取得しましょう。

下記サイトを参考にバックアップをしてください。

本番環境で実施している場合は、必ずバックアップを取得しましょう。(大事なことなので2回!)

公式ドキュメントが大変わかりやすいので一部抜粋して記載していきます!

この例では、T2 インスタンスなどのインスタンスのブートボリュームのサイズを 8 GB から 16 GB に変更し、追加ボリュームを 8 GB から 30 GB に変更したとします。サイズを変更したボリュームのファイルシステムを拡張するには、以下の手順を使用します。

3.1. ファイルシステムの確認

各ボリュームで使用中のファイルシステムを確認するには、df -hT コマンドを実行することで確認が出来ます。

[ec2-user ~]$ df -hT
Filesystem      Type  Size  Used Avail Use% Mounted on
/dev/xvda1      ext4  8.0G  1.9G  6.2G  24% /
/dev/xvdf1      xfs   8.0G   45M  8.0G   1% /data

3.2. ボリュームサイズの確認

ボリュームに拡張が必要なパーティションがあるかどうかを確認するには、lsblk コマンドを実行して、インスタンスにアタッチされているブロックデバイスに関する情報一覧を確認します。

[ec2-user ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  16G  0 disk
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  30G  0 disk
└─xvdf1 202:81   0   8G  0 part /data

この出力例は以下のことを示しています。

  • ルートボリュームである /dev/xvda には、パーティション /dev/xvda1 があります。
    • ボリュームのサイズが 16 GB の場合、パーティションのサイズは 8 GB のままになるため、拡張する必要があります。
  • ボリューム /dev/xvdf には、パーティション /dev/xvdf1 があります。
    • ボリュームのサイズが 30 GB の場合、パーティションのサイズは 8 GB のままになるため、拡張する必要があります。

3.3. パーティションの拡張

[3.2. ボリュームサイズの確認]の手順で示したボリュームやパーティションを持つボリュームの場合は、growpart コマンドを実行してパーティションを拡張します。

注意点としては、デバイス名パーティション番号の間にスペース(半角空白)がある点に注意してください。

[ec2-user ~]$ sudo growpart /dev/xvda 1
[ec2-user ~]$ sudo growpart /dev/xvdf 1

3.4. パーティション変更の確認

増加したボリュームサイズがパーティションに反映されていることを確認するには、再度 lsblk を実行することで確認が出来ます。

[ec2-user ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 16G 0 disk
└─xvda1 202:1 0 16G 0 part /
xvdf 202:80 0 30G 0 disk
└─xvdf1 202:81 0 30G 0 part /data

3.5. ボリュームサイズの確認

各ボリュームのファイルシステムのサイズを確認するには、df -h を実行することで確認が出来ます。

[ec2-user ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 8.0G 1.9G 6.2G 24% /
/dev/xvdf1 8.0G 45M 8.0G 1% /data
...

4. 最後に

ディスク容量だけではなく、inode についても日頃から確認をすることは非常に大事なことなため、是非とも確認をしてあげてください!

4.1. 参照元