NTFSは他のリンクタイプを計算するためにハードリンクと同じカウンタを使用しますか?それとも、NTFSファイルシステムのハードリンク数を計算するときに、Linuxに他のリンクタイプが含まれますか?
WindowsおよびLinux(fedora)で使用される外付けハードドライブにNTFSファイルシステムがあります。
一部のファイルのハードリンク数は2です。 「ls」と「stat」の出力例:
$ ls -li | grep samplefile.jpg
1002 -rwxrwxrwx. 2 charlie charlie 29496 Apr 18 2019 samplefile.jpg
$ stat samplefile.jpg
File: samplefile.jpg
Size: 29496 Blocks: 64 IO Block: 4096 regular file
Device: 811h/2065d Inode: 1002 Links: 2
ただし、ファイルシステムには、ファイルシステムのルートで始まる「ls」と「find」からわかるように、同じinode番号(NTFSのファイルID)または同じ長さを参照する他のディレクトリエントリは含まれていません。
$ ls -Rli . | grep '1002\|29496'
1002 -rwxrwxrwx. 2 charlie charlie 29496 Apr 18 2019 samplefile.jpg
$ find . -samefile path-to-file/samplefile.jpg
./path-to-file/samplefile.jpg
私が知る限り、CanonのDPP4ソフトウェア(Digital Photo Professional)はファイルを修正し、save as
ハードリンク数= 2のファイルを生成しますexport
。変更したファイルを同じ名前で保存しても、(save)
ハードリンクの数は増えません。したがって、DPP4はソースファイルへの参照を保存し、NTFS(またはLinux)はその参照をハードリンクと見なします。しかし、これがハードリンクの数とどのような関係があるのか、DPPが使用するNTFSメカニズムが何であるか、またはハードリンクの数を計算するときにLinux(ヒューズ)に他のリンクタイプが含まれているのか、私が間違ったツリーを探しているのかを理解するできません。
Q:WindowsでもLinuxでもSamplefile.jpgを削除すると、使用回数が0ではないため、ファイルのデータは削除されませんか?回答:Linuxでは、ファイルデータは正しく削除されます。 (Windowsについてはわかりません。)証拠:Linuxでディレクトリエントリを削除し、削除されたrm filename
ファイルのサイズを減らすためにスペースを使用しました。
注:以下の質問では、答えはls -l
出力のハードリンクフィールドの意味を説明します。項目の種類によってはいくつかの意味がありますが、NTFSを明示的にターゲットにする答えはないことを指摘しています。
これはMicrosoft NTFSのドキュメントです。古いですが、基本はまだ維持する必要があります。
答え1
歴史的にサポートされているNTFSファイルシステム8.3 ファイル名。
この機能が有効になっている場合、Windowsでファイルを生成するプロセスは次のとおりです。
- ファイル名が8.3パターンに従う場合、ファイル名は1つだけです。
- そうでない場合(あなたのような
samplefile.jpg
)追加の「隠された」8.3の名前(あなたのものと同じ)を取得し、SAMPLE~1.JPG
実際にはハードリンクです。
WindowsとLinuxでは、2つの名前でファイルを参照できますが、8.3の名前はリストに隠されています。したがってls
、表示されていませんが、具体的SAMPLE~1.JPG
にls SAMPLE~1.JPG
表示されました。
これがLinuxがハードリンク数を2と表示する理由です。名前を指定するとsample.jpg
1が表示されます。
興味深いことに、LinuxでこのNTFSに長い名前のファイルを作成すると、8.3の名前は得られません。 Windowsでは、まだ長い名前で表示されます。
最後に、すべてのNTFSシステムがこの機能を有効にするわけではなく、一部のユーザーはWindowsのみを使用してもこの機能を無効にすることを好みます。