ファイルシステム上のファイルを区別する

Distinguishing file on the filesystem


質問 written by Some Name @2019-01-15 11:58:45Z

: 0 : 2 : 46

私は次の要件でファイルシステム上のファイルを区別しようとしています(すべてのファイルが同じファイルシステム内にあると仮定します):

  1. ファイルAがファイルBに名前が変更された場合、同じように見えるはずです
  2. ファイルAが削除されてから作成された場合、異なるファイルのように見えるはずです

すべてのファイルが同じファイルシステム内にあるとinode_numberため、そのためにinode_numberを使用する傾向がありました。 しかし、それはポイント2.満たしていません。 実際:

root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test
root@spc:~/test# rm test
root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test

そのため、2つの異なるファイルは同じiノード番号を持つように見えました。 linux/ext4これを行う方法はありますか? ファイルシステム固有のapiを使用して、メタuidを保存できますか?

コメント 1

(st_dev、st_ino、st_gen)タプルで十分ですが、残念ながらst_gen(inode世代番号)はカーネルによってエクスポートされません。statx()呼び出しでは考慮されていましたが、それを考慮していないようです。

written by 公称動物 @2019-01-15 13:53:00Z

コメント 2

つまり、 statx()提供される(st_dev、st_ino、st_btime statx()は機能する可能性があります。<sys/syscall.h> syscall()を使用し、カーネルinclude / linux / uapi / stat.h:struct statxからstruct statxをコピーする必要がありsyscall()

written by 公称動物 @2019-01-15 13:57:37Z

回答 1 written by Ctx @2019-01-15 12:28:35Z
1

拡張ファイルシステム属性を設定できます(サポートされている場合、つまり、オプションuser_xattrマウントされたext4をuser_xattr )。

#include <sys/types.h>
#include <attr/xattr.h>

int main (void) {
    setxattr("test", "user.fileguid", "someuniqueguid", 15, 0);
}

そしてそれを読み返します

and read it back with

この属性を特権プロセスによってのみ変更する必要がある場合、 user代わりにsecurity名前空間を使用できuser (つまり、attribute-name security.fileguid )。 この場合、ファイル所有者自身が属性を変更することはできません。 user名前空間を使用しない場合、マウントオプションuser_xattrは必要ありません。

ただし、これらの属性はファイルの作成直後には設定されません。 ただし、ツールでファイルにアクセスするとき(つまり、GUIDがまだ設定されていないとき)に、ランダムなGUIDを最初に設定するだけで十分です。

これらのファイル属性はiノードとともに保存されるため、ファイルの名前を変更するか、ファイルを(ハード)リンクすると、属性が保持されます。 ただし、削除して新しく作成することはできません。

回答 2 written by ジャンバプティストユネス @2019-01-15 12:07:13Z
1

残念ながら、それは不可能です。

  1. ユーザーの制御下にあるすべてのデータ/メタデータ(拡張属性などを含む)について、それらの値/コンテンツを「元の」ファイルとまったく同じ値に設定することができます。

  2. iノード番号については、カーネルでのファイルシステムのサポートに依存しており、それらの多く(FS)はiノード番号をリサイクルします。

コメント 1

ユーザーが設定できるメタデータの例をいくつか教えてください。

written by 一部の名前 @2019-01-15 12:10:16Z

コメント 2

@SomeNameのタイムスタンプ、ファイルの長さ(間接的)、ID、リンク数など

written by Jean-BaptisteYunès1 @2019-01-15 12:13:38Z