私は最近、Unix の inode とその目的について学びました。特に、.inode はファイルシステム全体で一意であることを知りました。
私の質問は、ユーザーが Micro SD カードを Android デバイスに挿入した場合、そのカードは既存のファイル システムの一部になりますか、それとも別のファイル システムになりますか?
別の言い方をすれば、内部ストレージと外部ストレージ間で inode を複製できますか?
どうもありがとう、P
私は最近、Unix の inode とその目的について学びました。特に、.inode はファイルシステム全体で一意であることを知りました。
私の質問は、ユーザーが Micro SD カードを Android デバイスに挿入した場合、そのカードは既存のファイル システムの一部になりますか、それとも別のファイル システムになりますか?
別の言い方をすれば、内部ストレージと外部ストレージ間で inode を複製できますか?
どうもありがとう、P
それは別のファイルシステムです。そうです、内部ストレージ上のファイルは、外部ストレージ上のファイルと同じ inode 番号を持つことができます。それらは別個のファイルであってもです。
本当の質問がファイルを一意に識別する方法である場合は、inode 番号とデバイス ID 番号の両方が必要です。両方とも、*stat() ファミリーのシステムコール、具体的には stat 構造体の st_dev および st_ino フィールドで取得できます。
マイクロ SD カードは通常、inode を保存しないファイル システムである FAT32 を使用します。Linux カーネルは、新しいファイルがアクセスされると、他のものとは異なるランダムな inode 番号を作成しています。
FAT32 ファイル システムでは、パス名だけでファイルを一意に識別できますが、他のファイル システムとは異なり、ファイルはパス名をいくつでも持つことができ、まったくパス名を持たないこともあります。
これらの FAT32 偽の inode 番号は削除されます。
FAT32 上のファイルを確実に識別する方法が必要な場合は、inode を使用しないでください。
衝突を確実に回避したい場合は、パス名のハッシュとサイズを組み合わせて使用することをお勧めします。