Linux インデックスノード inode の詳細な説明

Linux インデックスノード inode の詳細な説明

1. inodeの紹介

inode を理解するには、まずファイル ストレージから始める必要があります。ファイルはハードディスクに保存され、ハードディスクの最小の保存単位は「セクター」と呼ばれます。各セクターには 512 バイト (0.5 KB に相当) が格納されます。オペレーティング システムがハード ディスクを読み取るとき、セクターごとに読み取るのではなく (これは非常に非効率的です)、一度に複数のセクターを連続して読み取ります。つまり、一度に 1 つの「ブロック」を読み取ります。複数のセクターで構成されるこの「ブロック」は、ファイル アクセスの最小単位です。最も一般的な「ブロック」サイズは 4KB です。つまり、8 つの連続したセクターがブロックを形成します。ファイル データは「ブロック」に保存されるため、ファイルの作成者、ファイルの作成日、ファイルのサイズなどのファイルのメタデータを保存する場所も見つける必要があります。ファイルのメタデータを保存するこの領域は inode と呼ばれ、中国語では「インデックス ノード」と翻訳されます。

2. Inodeにコンテンツが含まれている

Linux のディレクトリのデータ ブロック内の各項目には、ファイル名とそれに対応する inode が含まれています。 inode には、ファイルの属性と、ファイルの実際の保存場所、つまりデータ ブロック番号が記録されます。各ブロック (共通サイズは 4KB) は、inode を通じてファイルの場所を特定するために使用できます。 inode は Linux にあり、vnode は Unix にあります。基本的に、inode には少なくとも次の情報が含まれています。

(1)ファイルの種類 (2)ファイルのアクセス権
(3)ファイルの所有者とグループ
(4)ファイルサイズ
(5)リンク数、つまり、inodeを指しているファイル名の総数。
(6)ファイルのステータス変更時刻(ctime)、最終アクセス時刻(atime)、最終修正時刻(mtime)。
(7)ファイルの特殊属性:SUID、SGID、SBIT
(8)ファイルの内容への実際のポインタ。

stat コマンドを使用して、ファイルの inode 情報を表示できます。

3. iノードの特性

ディスクをフォーマットすると、inode の数とサイズが固定されます。inode の特性は次のとおりです。

(1)各inodeのサイズは128Bに固定されている。 dumpe2fs コマンドを使用して、ext2/ext3/ext4 ファイル システム情報を表示できます。

$ dumpe2fs -h /dev/sda1 | grep "Inode サイズ"
dumpe2fs 1.41.12 (2010 年 5 月 17 日)
iノードサイズ: 128

(2)各ファイルは1つのinodeのみを占有する。したがって、ファイル システムが作成できるファイルの数は、i ノードの数に関係します。システムがファイルを読み取るとき、まず inode を見つけて、inode に記録されている権限がユーザーの権限と一致するかどうかを分析する必要があります。それらが一致する場合にのみ、ブロックの内容の読み取りを実際に開始できます。

4. オペレーティングシステムがディスクファイルを読み取るプロセス

オペレーティング システムがディスク ファイルを読み取るプロセスは次のとおりです。

(1)指定されたファイルが配置されているディレクトリに従って、ディレクトリのデータ実体を取得し、データ実体内のデータ項目に従って対応するファイルのinodeを見つける。
(2)ファイルのinodeに基づいてinodeTableを検索する。
(3)inodeTable内の対応関係に従って対応するブロックを検索する。
(4)ファイルを読む。

ディスク ファイルを読み取るシステムの概略図は次のとおりです。

たとえば、/etc/passwd ファイルを読み取る場合、読み取りプロセスは次のようになります。

(1)ルートディレクトリ/のinodeを取得します。マウント ポイント情報から、ルート ディレクトリの inode 番号が 2 であることがわかります。

ll-di /
2 dr-xr-xr-x 19 ルート ルート 4096 2月14日 09:32 /

(2)ルートディレクトリのinodeに基づいて、ファイルからinode番号へのマッピングテーブルとして理解できるルートディレクトリのデータ実体ブロックを見つけ、ディレクトリのinode番号などを見つけます。

ll -di /etc
786433 drwxr-xr-x 98 ルート ルート 12288 2月13日 17:18 /etc

(3)ディレクトリ等のinode番号に従って、ディレクトリ等のデータ実体ブロックを読み取り、ファイルpasswdのinode番号を見つける。

ll -i /etc/passwd
787795 -rw-r--r-- 1 ルート ルート 1552 1月4日 14:56 /etc/passwd

(4)/etc/passwdファイルのinode番号に基づいて、/etc/passwdファイルのデータ実体ブロックを取得し、ファイルの読み取りを完了することができる。

5. inodeの多くの利点

(1)削除できないファイルについては、inodeノードを削除することで削除できます。
(2)ファイルの移動や名前の変更は、ファイル名からディレクトリ内のiノードへのマッピングを変更するだけで、ハードディスク上での実際の操作は必要ありません。
(3)ファイルを削除するときは、inode を削除するだけで済みます。ハードディスクを実際にクリアする必要はありません。次に書き込むときに上書きするだけで済みます(これが、削除されたデータを回復できる理由の 1 つです)。
(4)ファイルを開いた後は、inodeを通じてファイルを識別するだけで済みます。

上記は Linux インデックス ノード inode の詳細な説明です。Linux インデックス ノード inode の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します
  • Linux ネットワーク設定の詳細
  • MyCat を使用して Linux で MySQL マスター/スレーブの読み取り/書き込み分離を実装する方法
  • Unix/Linuxフォークの隠れたオーバーヘッド
  • Linux での UDP について学ぶ
  • Linux スワップ パーティション (詳細説明)
  • Linux での C++ ネットワーク プログラミング、epoll テクノロジ、Windows での IOCP モデル
  • Linux サーバーは最大いくつのポートを開くことができますか?
  • Linux ファイル記述子、ファイルポインタ、および inode の詳細

<<:  MySQL パフォーマンス最適化のヒント

>>:  Vueはツリーテーブルを実装する

推薦する

Reactコンポーネントのライフサイクル機能についての簡単な説明

React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...

hrefを使用すると、リンクをクリックするだけでページ上の特定の場所にジャンプできます。

ページ内の a タグをクリックした後、ページ内の対応する場所にジャンプするようにします。方法は非常に...

フローチャートとUIフローの違い

UI デザインにおける多くの概念は言葉で言えば似ているように見えるかもしれませんが、実際には大きく異...

Linux ディスクデバイスと LVM 管理コマンドの詳細な例

序文Linux オペレーティング システムでは、デバイス ファイルは特別なタイプのファイルです。これ...

Vue で ToDo アプリケーションを実装する例

背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...

jsを使用してサーバーに写真をアップロードする

この記事の例では、参考のために画像をサーバーにアップロードするためのjsの具体的なコードを共有してい...

Mysql 自己結合クエリ例の詳細な説明

この記事では、Mysql の自己結合クエリについて説明します。ご参考までに、詳細は以下の通りです。自...

モバイルの赤い封筒の雨機能ページを実装するための JavaScript HTML

この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...

CentOS7 systemdにカスタムシステムサービスを追加する方法

システムド: CentOS 7のサービスsystemctlスクリプトは、/usr/lib/syste...

Docker のホスト間コンテナ通信オーバーレイ実装プロセスの詳細な説明

サーバーも 2 つあります。準備:コンテナのホスト名を設定する consul: kv タイプのストレ...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

よくある MySQL テーブル設計エラーの概要

目次間違い1: データの列が多すぎる誤解2: 共同クエリが多すぎる誤解3: ENUMの代わりにSET...

Vue で wangeditor リッチテキスト編集を使用する際の問題

wangEditor は、JavaScript と CSS に基づいて開発された Web リッチ テ...

全文検索とキーワードスコアリング方式のMySQL実装例

1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...

Docker に ElasticSearch をインストールする方法を 1 つの記事で解説

目次序文1. Dockerをインストールする2. ElasticSearchをインストールする3. ...