Linuxのiノード(inode)とは?仕組みと確認方法をわかりやすく解説
Linuxを使い続けていると、「iノード(inode)」という用語を目にすることがあります。日常的な作業にはあまり影響しないため、深く考えたことがない方も多いかもしれません。この記事では、iノードとは何か、そしてどのように機能するのかをわかりやすく解説します。
iノードとは何か?
図書館では、すべての本がジャンル、著者名、対象読者の年齢層ごとに整理されています。たとえば「Bobby Daniels」のスリラー小説を探したい場合、スリラーコーナーへ直接向かい、「B」で始まる著者名を探せばよいわけです。Linuxシステムも図書館と同じように、すべてのファイルが効率的な検索と利用のために整理されています。iノードは、Linuxシステム内でファイルを整理・管理するための中心的な役割を担うデータ構造です。
ファイルメタデータとは?
例として、「hello」というデータを含む「sample.txt」というファイルがあるとしましょう。
このファイルには、ファイルサイズ、パーミッション、ユーザーおよびグループの所有権、作成・アクセス・更新のタイムスタンプ、リンク数など、ファイルに関連するさまざまな情報が存在します。これらの情報を総称して「ファイルメタデータ」と呼びます。
ファイルシステムとは?
ハードディスクなどのストレージデバイス上のパーティションは、ファイルの保存に使用する前に、ファイルシステムとしてフォーマットされます。ファイルシステムとは、ハードディスクにとっての「司書」のような存在です。正式には、パーティション上にファイルを体系的に格納するために連携して動作する、一連のデータ構造とアルゴリズムのことを指します。
Linuxシステムのパーティションは、EXT4でフォーマットされることが一般的です。そのほかにも、Btrfs(B-Tree File System)、ReiserFS、ZFSなどのファイルシステムが利用できます。
すべてをつなぐ:iノードの役割
iノードは、Ext4におけるデータ構造の一つで、ファイルに関するすべてのメタデータを保持します。
もちろん、ファイルシステム上には多数のファイルが存在します。お察しのとおり、すべてのファイルにはそれぞれ固有のiノードが割り当てられます。また、各iノードを一意に識別できるよう、番号が振られています。
iノード番号はどのように付けられる?
ファイルシステム上のiノード番号は1から始まります。最初の10個のiノードはシステム用に予約されており、ユーザーファイルのメタデータは11番目のiノードから格納されていきます。すべてのiノードは「iノードテーブル」に整然と配置されています。
iノードテーブルの1エントリのサイズは256バイトです。Linuxは、1つのファイルのメタデータをこの256バイトの中に賢く収めています。さらに、ファイルのiノードには、そのファイルのデータがファイルシステム上のどこに位置するかという情報も含まれています。重要なのは、iノードに格納されるのはあくまでファイルの「メタデータ」のみであり、データ本体ではないという点です。
ファイルシステム内のiノードの総数は、利用可能な容量や、パーティションに保存できるファイル数によって決まります。
iノードはどのように割り当て・解放される?
新しくフォーマットされたファイルシステムにユーザーがファイルを追加すると、11番から順にiノードが割り当てられ、ファイルのメタデータが格納されていきます。
iノードの割り当て状況を追跡するために、「iノードビットマップ」と呼ばれる別のデータ構造が使われます。これはビットの集合体で、いわば割り当て状況の地図のような役割を果たします。
例として、iノードビットマップの8ビットが、下の表のようにiノード11〜18の割り当て状態を表しているとします。ビットマップの値が1の場合、そのiノードは割り当て済み(つまり、あるファイルのメタデータを保持中)であることを意味し、0の場合は現在使用されていないことを意味します。この例では、iノード17が使用中であることがわかります。
iノード17にメタデータを持つファイルが削除されると、対応するビットマップの値は0に変わり、そのiノードが他のファイルで再利用可能になったことを示します。
ファイルのiノード番号を確認する方法
確認方法は主に2つあります。
1つ目は、lsコマンドに-iオプションを付けて、ファイル名を指定する方法です。出力の最初のフィールドが、「sample.txt」のメタデータを保持するiノード番号です。
同じ情報は、statコマンドにファイル名を続けて実行することでも取得できます。
パーティションで利用可能なiノードの総数を確認したい場合は、dfコマンドに-iオプションを付けて実行します。
たとえば「/dev/sda4」パーティションでは、404,754,480個のiノードが利用可能で、そのうち実際に使用されているのは359,044個だけです。
まとめ
iノードテーブルは、すべてのファイルのメタデータをiノード単位で丁寧に整理して格納するとともに、ファイルデータの格納場所に関する情報も併せて保持しています。ここで解説した内容は、Linuxのiノードに関するほんの入り口にすぎません。内部動作についてさらに詳しく知りたい方は、公式ドキュメントや関連資料を参照してみてください。
-
LinuxでZsyncを使ってファイルの差分だけをダウンロード・更新する方法
ISOイメージのような大容量ファイルのダウンロードは、本当にストレスがたまる作業です。インターネット回線の速度によってはダウンロードに長時間かかり、ハードディスクの容量も大量に消費します。さらに厄介なのは、更新版が必要になったときに、同じダウンロード作業を最初からやり直さなければならない点です。 しかし、そんな悩みを解決してくれるツールがあります。それがZsyncです。ZsyncはLinux向けのファイル同期ツールで、ファイル全体を再ダウンロードすることなく、変更された部分だけを更新できるのが最大の特徴です。 Zsyncは、ファイルやディレクトリの同期でおなじみの人気ツールrsyncをベース
-
Linuxでファイルを完全に削除する方法|復元不能にする5つのテクニック
Linuxオペレーティングシステムでは、削除したファイルはまずゴミ箱へ移動します。ゴミ箱を空にすると、ファイルはシステムから削除されたように見えます。しかし、データ復元ソフトの需要が高まる昨今、ゴミ箱から削除したファイルでも、ある程度まで復元できてしまうのが実情です。つまり、ゴミ箱から取り除かれたファイルは完全に消去されたわけではなく、単に見えなくなっただけなのです。ファイルはハードディスクのどこかに残り続け、不要な領域を占有します。新しいファイルが作成され、同じセクターに上書き保存されて初めて、物理的には完全に消去されることになります。貴重なディスク容量を回収し、ファイル破損を防ぐためにも、