ls -iのinode番号はディスクのinodeとどのように関連していますか?

ls -iのinode番号はディスクのinodeとどのように関連していますか?

ls -iext4パーティションでinode番号付け(表示されている)がどのように機能するかを理解したいと思います。

私はそれがLinuxカーネルの構成であり、ディスクのinodeにマップされているのか、それとも実際であるのかを理解しようとしています。はいディスクに同じ番号が保存されています。

質問:

  1. コンピュータを再起動した後、inode番号が変わりますか?
  2. 2つのパーティションがマウントされると、ls -i2つの異なるファイルが異なるパーティションにある限り、同じinode番号が生成される可能性があります。
  3. パーティションを再起動または再マウントせずにinode番号を回復できますか?

私はなぜ尋ねるのですか...

1.5TBのデータと約2000万個のファイル(ファイル名)を含むUSBハードドライブにセカンダリインデックスを作成したいと思います。ファイルサイズは10バイトから100GBまでです。これらの多くは複数回ハードリンクされているため、単一のファイル(ディスク上のブロブ)には最大200のファイル名があります。

私の使命は、重複を検出し、それをより多くのハードリンクに置き換えることでディスク容量を節約することです。

これで、練習でディスク上のshasum、権限などの各ファイルのデータベースを作成できると思いました。一度構築したら、重複した項目を検索するのは簡単ではありません。正しい一意のキーを使用していることを確認してください。既存のハードリンクが多く、ファイル名が不適切です。 inode番号が使えたらと思います。

私が知りたいのは、次にマシンを再起動したときにinode番号が変わるかどうかです。それとももっと不安定な場合(データベースを構築すると変更されますか?)

私が読んだすべての文書には、カーネルが提供するinode番号とディスクのinode番号の違いがあいまいに表示されています。私が読んだ記事によると、それが同じかどうかはわかりません。

答え1

私はinode番号(ls -iで示されています)がext4パーティションでどのように機能するかを理解しようとしています。

/etc/passwdデフォルトでは、inodeはファイルシステム(!)への参照であり、ディスク上の実際のデータ(ビットとバイト)とそのデータに関連付けられている名前(たとえば、ファイル名はディレクトリで構成されます。ここで、ディレクトリエントリはそのinodeを含むファイル名です。 。

inodeには、実際の情報(権限、ディスクが占めるブロック、所有者、グループなど)が含まれます。UNIXファイルシステムにディレクトリ構造を格納する方法、ファイルとinodeの関係をよりよく説明する非常にクールな図があります。

ここに画像の説明を入力してください。

同じ inode 番号を指すファイルが別のディレクトリにある場合は、ハードリンクということがあります。

現在、inodeはファイルシステム固有の参照であることを強調しました。これが理由です。注:

特定のファイルのinode番号はファイルシステムに固有ですが、特定のホストにインストールされているすべてのファイルシステムに一意である必要はありません。複数のファイルシステムがある場合、ファイルシステム間に重複したinode番号が表示されます。これは通常の現象です。

これは以下に関連しています。装備/varファイルシステムなど、同じデバイスに複数のファイルシステムがある可能性がありますが、/それらは同じドライブにあります。

これでinode番号を変更できますか?一種の。ファイルシステムはinodeの管理を担当するため、ファイルシステムに根本的な問題がない限り、inode番号を変更しないでください。いくつかのトリッキーな状況では、次のようになります。vimテキストエディタ

古いファイルの名前を変更し、元の名前で新しいファイルを作成します(元のファイルのプロパティを再作成できると思う場合)。既存のinodeを再利用するには(データが失われる可能性がある場合、またはバックアップコピーの作成に時間がかかります)、.vimrcにset backupcopy yesを追加します。

覚えておくべき重要な点は、データがユーザーに同じように表示されることがありますが、実際にはディスク上の新しい場所に書き込まれるため、inode番号が変更されることです。

簡単に言うと:

  1. コンピュータを再起動した後、inode番号が変わりますか?

再起動後にファイルシステムに問題がない限り、

2. 2つのパーティションをマウントすると、ls -iは2つの異なるファイルが異なるパーティションにある限り、同じinode番号を生成できます。

はい、2つの異なるパーティションは異なるファイルシステムを持つためです。よくわかりません。左心室容積ls -ただし、このタイプのストレージ管理では、2つの物理ボリュームを1つの論理ボリュームにまとめることができ、理論的推測によると、ファイルごとに1つのinodeが作成されることがあります。

  1. パーティションを再起動または再マウントせずにinode番号を回復できますか?

ファイルシステムは、ファイルが削除されたとき(つまり、すべてのリンクファイルが削除され、対応するinodeを指すものは何もありません)。


私の使命は、重複を検出し、それをより多くのハードリンクに置き換えることでディスク容量を節約することです。

まあ、冗長検索はmd5sum他のチェックサムコマンドで行うことができます。この場合、ディスクの別の inode の下に配置することも、配置しない可能性がある実際のデータを調べます。例は次のとおりです。ヒムメルが答えた:

find . ! -empty -type f -exec md5sum {} + | sort | uniq -w32 -dD

答え2

  1. ext4いいえ、コンピュータを再起動してもinode番号は変わりません。少なくともinodeがディスクに保存されているPOSIXファイルシステム(例:)の場合は変更されません。

  2. はい、異なるパーティションにある2つの異なるファイルが同じinode番号を持つことができます。バラより2つの別々のファイルシステムにある2つのファイルが同じinode番号を共有できますか?そして/home、/usr、/varなどのディレクトリがすべて同じinode番号(2)を持つのはなぜですか?もっと学ぶ。 (特定のシステムで唯一のものはデバイス番号とinodeのペアです。)

  3. はい、ファイルを削除すると、再起動や再マウントを行わずにそのinodeを再利用できます。

関連情報