Loading [MathJax]/extensions/tex2jax.js

Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Linux

Linuxでinodeが枯渇した時の対処方法について

投稿日:2021年12月28日 更新日:

 

<目次>

(1) Linuxでinodeが枯渇した時の対処方法について
 (1-1) エラーメッセージ
 (1-2) 原因
 (1-3) 対策

(1) Linuxでinodeが枯渇した時の対処方法について

(1-1) エラーメッセージ

「df -i」コマンドの出力結果で「IUse」の値が100%になっており、Oracle DBでSQL*Plusにログイン出来ない状況。
 
(図111)
 
(例)
  1. [oracle@tk2-216-17994 bin]$ df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/vda3 6414336 6414336 0 100% /
  4. tmpfs 240224 3 240221 1% /dev/shm
  5. /dev/vda1 64000 50 63950 1% /boot
 

(1-2) 原因

ディスク自体に空きはあるものの、ファイル数が膨大な事が原因で「inode」が逼迫し、上限値に抵触したのが原因と推定されます。
 
「inode」はファイル単位で付与されるため、微小な(例:1バイト)のファイルが大量にあった場合、ディスク容量が枯渇するよりも先に「inode」の使用量が上限に達する可能性があります。
 
「inode」の概念や上限値の決定方法について知りたい方は下記も併せてご確認頂けたらと思います。
 

(1-3) 対策

●①原因フォルダの段階的な特定

次は「inode」枯渇の原因となるファイル(があるディレクトリ)を特定します。特定には以下のコマンドを使います(root権限で実行)。
 
(構文)指定ディレクトリ配下の各フォルダのファイル数をチェック
  1. # for i in [対象ディレクトリ]/*; do echo $i; find $i |wc -l; done
 
(例)root直下の各フォルダのファイル数をチェック
  1. # for i in /*; do echo $i; find $i |wc -l; done
 
 
(コマンドの補足説明)=========================
・前半部分で、ルート(/)配下のフォルダを順番にループしています。
  1. for i in /*; do echo $i; done
 
(図121)

・後半部分で、ルート(/)配下の各フォルダについて、「find」でフォルダ内の一覧を出力し、「wc」でその数(行数)を数えています。これが結果として、配下のファイルの数になります。

  1. find $i |wc -l
(図122)
 
=======================================
 
まずはこのチェックをroot直下(/*)から始めて、徐々に範囲を絞っていきます。つまり、実行結果でファイル数が多かった箇所を、次のコマンド実行の[対象ディレクトリ]に指定して、どんどんアタリを付けていきます。
 
以下の例は、まず「/*」→「/tmp/*」と範囲を絞っていき、「/tmp/orbit-oracle」配下が原因と特定した例です。
 
(例)1回目は「/*」に対して実行
  1. [root@tk2-216-17994 admin]# for i in /*; do echo $i; find $i |wc -l; done
  2. /bin
  3. 113
  4. ~~~~中略~~~~
  5. /tmp
  6. 6254315
  7. ~~~~中略~~~~
  8. (例)2回目は「/tmp/*」に対して実行
  9. [root@tk2-216-17994 tmp]# for i in /tmp/*; do echo $i; find $i |wc -l; done
  10. /tmp/gconfd-oracle
  11. 1
  12. ~~~~中略~~~~
  13. /tmp/orbit-oracle
  14. 6254226
  15. ~~~~中略~~~~
(図123)

●②原因ファイルの削除

今回の例では「/tmp/orbit-oracle」配下に600万以上の不要な微小ファイルが生成されていたため、そちらを全て削除した結果、inodeの使用率が3%程度まで減少しました。
 
(図124)

(例)
  1. # オーソドックスな削除(「/tmp/orbit-oracle」配下)
  2. $ rm -rf /tmp/orbit-oracle/*
  3. # 削除対象が膨大で削除できない場合
  4. $ echo /tmp/orbit-oracle/* | xargs rm -f

(例)実行すると、inodeの使用率が徐々に減っていく
  1. [admin@tk2-216-17994 ~]$ df -i
  2. Filesystem Inodes IUsed IFree IUse% Mounted on
  3. /dev/vda3 6414336 6162282 252054 97% /
  4. tmpfs 240224 1 240223 1% /dev/shm
  5. /dev/vda1 64000 50 63950 1% /boot
  6. ~~~~中略~~~~
  7. [oracle@tk2-216-17994 admin]$ df -i
  8. Filesystem Inodes IUsed IFree IUse% Mounted on
  9. /dev/vda3 6414336 159875 6254461 3% /
  10. tmpfs 240224 1 240223 1% /dev/shm
  11. /dev/vda1 64000 50 63950 1% /boot
(図125)

Adsense審査用広告コード


Adsense審査用広告コード


-Linux

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

CentOS6で「Cannot find a valid baseurl for repo」が発生した時の対処方法について

<目次> (1) CentOS6で「Cannot find a valid baseurl for repo」が発生した時の対処方法について  (1-1) 発生状況・エラーメッセージ  (1-2) 原 …

GNOMEのランチャー設定手順をEclipseを例にご紹介

<目次> (1) GNOMEのランチャー設定手順をEclipseを例にご紹介  (1-1) EclipseのGNOME用ランチャー作成手順  (1-2) 備考:上記対応で追加されない場合 GNOMEの …

さくらVPS入門!CentOSを初期設定する手順の例をご紹介

<目次> (1) さくらVPS入門!CentOSを初期設定する手順の例をご紹介  (1-1) 設定の概要  (1-2) 【OS設定#1】一般ユーザの作成(rootでないユーザ)  (1-3) 【OS設 …

Linux系OSのパッケージ管理システム(rpmやyum)及びリポジトリ(epel)について

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) rpm(パッケージ管理システム)  (2-1) rpmとは?  (2-2) rpmコマンド(追加・更新・削除) …

パイプ通信とは?概要やサンプルプログラムをご紹介

  <目次> (1) パイプ通信とは?概要やサンプルプログラムをご紹介  (1-1) パイプ通信の概要  (1-2) パイプ通信の構文  (1-3) パイプ通信のサンプルプログラム①(単一プ …

  • English (United States)
  • 日本語
S