ホームページ  >  記事  >  運用・保守  >  Linux iノードとは何ですか

Linux iノードとは何ですか

藏色散人
藏色散人オリジナル
2023-04-20 10:18:212657ブラウズ

Linux i ノードは、オペレーティング システムでファイルを識別するために使用される特性記述です。Linux システムは各ファイルに i ノード番号を割り当て、この番号はファイルに関連するメタ情報を記録します。ファイルを一意に識別するために使用できます。

Linux iノードとは何ですか

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux i ノードとは何ですか?

Linux オペレーティング システムの i ノードを理解する前に、まず Linux オペレーティング システム上のファイルについて話しましょう。 Linux オペレーティング システムの場合、[すべてがファイルです]。ファイルはストレージ メディア (ここでは物理ディスク、メモリ、フラッシュ メモリなどを指します) から独立して存在することはできません。すべてのオペレーティング システム上のファイルは常にストレージ メディアを扱います。

たとえば、ファイルを読み取る場合、ファイルをディスクからメモリにロードする必要があり、ファイル操作が完了すると、ファイルはディスクに保存されます。ファイルはディスクに保存され、ディスクには容量制限があるため、ディスクに保存できる物理ファイルの数は制限されます。

この観点を理解できたなら、おめでとうございます。i ノードが何をするかは大体わかっているはずです。

はい、inode はオペレーティング システムを識別するために使用されるファイルの特徴的な記述であり、オペレーティング システム上の i ノードは無限ではありません。通常、システム上の i ノードの数は、オペレーティング システムがダウンしています (ただし、inode の数は動的に変更できます)。

sysctl -a を使用して、システム上の i ノードの数をクエリできます。

[root@server ~]# sysctl -a | grep inode
fs.inode-nr = 70212 21785

上記のように、fs.inode-nr の 70212 は現在のオペレーティング システムによって割り当てられた i ノードの数を示し、21785 は以前のオペレーティング システムの残りの空き i ノードの数を表します

As I i ノードはファイルを識別するために使用される機能だと言いましたが、これはなぜでしょうか?

Linux システムは、各ファイルに i ノード番号を割り当てます。この番号には、ファイルに関連するメタ情報が記録されます。このメタ情報は、ファイルを一意に識別するために使用できます。

ls -i を使用してファイルの i ノード番号を表示できます。

[root@server ~]# ls -i logrotate.man
8986710 logrotate.man

ファイルのメタ情報を表示するには、stat {filename}

[root@server ~]# stat logrotate.man
  文件:"logrotate.man"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-11-25 03:20:39.497330998 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-11-24 04:38:17.797398907 -0500
创建时间:-

を使用する必要があります。上記の通り、ファイルのinode情報です。これには以下が含まれます:

  • サイズ: 18033: ファイル内のバイト数。このファイルが占有するディスク容量は 18033 バイトです。

  • ブロック: 40: 使用済みブロック (データ ブロック)。このファイルは 40 個の物理ブロックを使用します

  • 権限: (0644/-rw-r--r--) Uid: (0/ root) Gid: (0/ root): ファイル権限そしてグループ情報。このファイルは、アクセス許可 0644 を持つ通常のファイルです。ユーザーとグループは両方とも root

  • 最終アクセス: 2021-11-25 03:20:39.497330998 -0500: つまり、atime (前回ファイルがアクセスされた時刻)

  • 最新の変更: 2021-11-24 04:38:17.781399647 -0500: つまり、mtime (ファイルがアクセスされた時刻)最終更新日)

  • 最新の変更: 2021-11-24 04:38:17.797398907 -0500: つまり、ctime (ファイル (権限、グループ) が最後に変更された時刻)

実際、渡されたばかりの stat logrotate.man には、次のフィールド ハード リンクも含まれています。

ハード リンクが i ノード情報に表示されるのはなぜですか?

一般に、1 つのファイルはオペレーティング システムの 1 つの i ノードに対応しますが、この規則はハード リンク ファイルには適用されません。 Linux オペレーティング システムでは、複数のファイルが同じ i ノード番号を指すことが許可されているためです。

ハード リンク シナリオでは、異なるファイル名を使用して同じファイルのコンテンツにアクセスでき、ファイルのコンテンツや属性などへの変更は他のファイルに転送されます。ただし、リンクされたファイルを削除しても、他のファイルへのアクセスには影響しません。

たとえば、logrotate.man

[root@server ~]# ln logrotate.man logrotate.man.1
[root@server ~]# ls -i logrotate.man*
8986710 logrotate.man  8986710 logrotate.man.1
# 可以看到,建立了硬链接的文件共用了同一个 inode 编号
[root@server ~]# stat logrotate.man
  文件:"logrotate.man"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:2
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-11-25 03:20:39.497330998 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-12-05 01:22:05.716611059 -0500
创建时间:-

というハードリンクファイルを作成します。ハードリンク確立後、stat を見るとハードリンクの数が 2 になっていることがわかります。

この時点では、元のリンク ファイルを削除し、リンク ファイルのコンテンツを表示します。

[root@server ~]# rm -rf logrotate.man
[root@server ~]# tail -n 1 logrotate.man.1
Linux                                 Wed Nov 5 2002                                                                                                                 LOGROTATE(8)
[root@server ~]# stat logrotate.man.1
  文件:"logrotate.man.1"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-12-05 01:25:50.701384256 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-12-05 01:25:41.544800473 -0500
创建时间:-

ハード リンクの元のファイルを削除した後、リンク ファイルのコンテンツを正常に読み取ることができます。このとき、ハードリンクのリンク数は再び1になります。

この状況が発生する理由は、ハード リンクが実際にファイルにインデックスを追加し、このインデックスがファイルの i ノード番号を指しているためです。ハード リンクの数が 1 より大きい場合、ファイルにはそれ自体に加えて複数のハード リンクがあることを意味します。ハード リンクの数が 0 に等しい場合、オペレーティング システムには i ノードを指すファイルがなくなり、オペレーティング システムは i ノードをリサイクルします。

実際には、ファイルが削除されるたびに、そのファイルへのハード リンクの数が 1 つずつ減ります。ファイル内のハード リンクの数が 0 に達すると、ファイルはオペレーティング システムによって完全にクリアされます。

最後に、通常の状況では、オペレーティング システムによって割り当てられた i ノードの数は完全に十分ですが、プログラムによっては、または人為的な事故により、オペレーティング システムの i ノード オーバーフローが発生する可能性があります。df -ih を通じてシステムを確認できます。パーティション内の i ノードの数を使用して、タイムリーな応答対策を講じることができます。

[root@server ~]# df -ih
文件系统                Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs                 121K     390    121K       1% /dev
tmpfs                    124K       1    124K       1% /dev/shm
tmpfs                    124K     522    124K       1% /run
tmpfs                    124K      16    124K       1% /sys/fs/cgroup
/dev/mapper/centos-root  4.0M    129K    3.9M       4% /
/dev/vda1                512K     332    512K       1% /boot
tmpfs                    124K       1    124K       1% /run/user/0

推奨学習: 「Linux ビデオ チュートリアル

以上がLinux iノードとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。