web-dev-qa-db-ja.com

Windows 7 mklink-ハードリンクの属性(予想される!)+コンテンツはリンクされたファイルに影響を与えません

ドロップボックスディレクトリ内のファイルを指すハードリンクを作成しました-リンクは、編集に使用するプログラムからアクセスするためにこのファイルが必要なフォルダー内に作成されました-

mklink /h path_to_hard_link C:\dropbox\git\repo\existing_file

私は大丈夫ハードリンクで働き始めました。ある時点で、変更がリポジトリ内のファイルに反映されないことに気付きました-ファイルサイズ、変更日、何も-内容さえも。

私は何が間違っているのですか?

編集:プログラムに依存することは可能ですか?つまり、これらのファイルに使用するエディターは実際にそれらを編集しますが、編集するだけですハードリンク。リンクされているファイルは変更されていません。さらに、このエディタはシンボリックリンクをたどることができないようです

EDIT2:surfasbによってリンクされた記事によると:

ハードリンクはファイルのディレクトリエントリであるため、アプリケーションはそのハードリンクのいずれかを使用してファイルを変更できます。他のハードリンクを使用するアプリケーションは、変更を検出できます。

つまり、元のファイルには、ハードリンク経由だけでなく、適切なエディターで直接開いたときに変更が含まれている必要があります。

ただし、ハードリンクのディレクトリエントリは、ユーザーがハードリンクを使用してファイルにアクセスした場合にのみ更新されます。たとえば、ユーザーがハードリンクを使用してファイルを開いて変更し、元のファイルのサイズが変更された場合、ファイルへのアクセスに使用されるハードリンクにも新しいサイズが表示されます。

この嘆かわしい英語の見本を正しく理解していれば、同じファイルに69個のハードリンク(実際には最大1023個)を表示できることを意味します異なるサイズ同じファイルに対して?!

編集3:surfasbによると、私はこれを正しく理解しています-ファイルシステムの制限です。とにかく-奇妙なこと-これは常にそうであるとは限らない-属性の変更がすぐに元のファイルに表示されることがあります-変​​更がある場合-今の私の本当の懸念私が使用している少なくとも1つのプログラムは、リンクされているファイルを編集していないようで、ハードリンクのみを編集しているようです。可能ですか? dir /aハードリンクについてはあまり明らかにされていません-それらを見る方法はありますか?

6
Mr_and_Mrs_D

私は答えが(ある親切な人から引用された)だと思います:

考慮しなければならないのは、アプリケーション/プログラムがファイルに対してどのように機能するかです。

ファイルを直接編集するものもあり、ハードリンクで完全に正常に機能するはずです。今まで「fileinfoの違い」の問題は知りませんでしたが...

他のアプリケーションはファイルをコピーし、編集したバージョンを保存するときに古いファイルを削除します。このプログラムは明らかに、その隠しコピー操作とのハードリンクを壊します。彼らが保存するのは、彼らが開いていたファイルではなくなりました。その後、古いバージョンを削除すると、この単一のハードリンクがディレクトリから削除されます。他のハードリンクが残っているので、最終的に2つのファイルを取得します。

そうです-ハードリンクは壊れる可能性があり、壊れるでしょう-それはそれらの有用性を制限します-悪い考えです。

間違っていたら訂正してください

5
Mr_and_Mrs_D

最終アクセス時間設定をオンにしましたか?パフォーマンス上の理由から、Vista ++以降はデフォルトでオフになっています。

私はこの質問をよく見ます。私はいつも人々にtechnetを利用して、NTFSのドキュメントを読むように言います。

http://technet.Microsoft.com/en-us/library/cc781134(WS.10).aspx

NTFSがすぐにではない LATをディスクに書き込むと書かれていることに注意してください。通常、差が1時間になるのを待つか、そのファイルに書き込まれた変更に便乗します。ただし、ファイルベースのクエリはwill正しいです。

これは監査ツールではありません。 NTFSがパフォーマンスを犠牲にしてLATを更新する場合がありますnot。監査ツールをお探しの場合は、ローカルセキュリティ監査をオンにすることをお勧めします。 LATとは異なり、ファイルへのアクセスをログに記録しますall。たとえば、LATに影響を与えない使用可能なAPI呼び出しが多数あります。

以下のコメントへの回答を編集してください。

これを読みます-しかし、a)私は実際にLMTに最も関心があり、b)ファイルのサイズと内容さえも変更されませんでした-プログラムに依存することはできますか?それは間違いなくすべきではありません。私はここでUnixとiノードに感謝し始めています-編集:サイズと時間は伝播するはずではありません(これについての確認が必要です)が、内容はすべきです

この記事では、具体的に正確な問題を取り上げています。記事を引用します。 強調は私によって追加されました。

ファイルの内容が変更されているはずです。そうでない場合は、正しく実行されませんでした。

ハードリンクはファイルのディレクトリエントリであるため、アプリケーションはそのハードリンクのいずれかを使用してファイルを変更できます。他のハードリンクを使用するアプリケーションは、変更を検出できます。 ただし、ハードリンクのディレクトリエントリは、ユーザーがハードリンクを使用してファイルにアクセスした場合にのみ更新されます。たとえば、ユーザーがハードリンクを使用してファイルを開いて変更した場合、および元のファイルが変更されると、ファイルへのアクセスに使用されるハードリンクにも新しいサイズが表示されます。

したがって、ファイル自体が変更されている間、対応するディレクトリエントリは、アクセスされていない限り更新されません。したがって、対応する2つのハードリンクを介してテキストファイルを開いている場合は、両方のディレクトリエントリが変更されます。これで、ハードリンクAを介してのみファイルを開いている場合、ハードリンクBは更新されません。ファイルには、行った変更がすべて含まれます。ただし、ハードリンクはディレクトリエントリであり、NTFSを使用していない場合、NTFSはディレクトリエントリを更新しません。 I/Oの無駄になります。

今、私はあなたがエクスプローラーを通してこれらすべてを見ていると思います。 Explorerは、コマンドラインでdirと入力するのとよく似た情報を一覧表示します。ディレクトリリストはまさにそれ、リストです。ディレクトリリストの読み取りしないただし、ファイルにアクセスすることは重要です。そうしないと、ディレクトリリストを取得すると、ファイルのすべての最終アクセス時間が変更されます。したがって、ハードリンクが存在する場合、古い情報を取得します。右クリックして[詳細]タブを確認すると、エクスプローラーにファイルへのアクセスを強制できます。または、ファイルを開くだけです。

edit

完全に違いが得られるわけではありません-foo.txtで^ cを押してから^ vを押すと(Windowsはfooのようなファイルを作成します-Copy.txtと現在のディレクトリに配置します)-このコピーはどのような意味ですか?

Explorerが既存のファイルを現在のディレクトリにコピーする方法がわからないため、これは注意が必要でした。だから私はこれをテストしなければなりませんでした。ソースファイルがハードリンクかシンボリックリンクかに関係なく、エクスプローラーがソースファイルターゲットをコピーしているように見えます。

Explorerには、シンボリックリンクとハードリンクの非常にきめ細かい制御とサポートがありません。 "mklink /h Foo1.txt Foo.txt"を実行すると、リンク自体をコピーできるようになりました。これにより、Foo1.txtという新しいハードリンクが作成されます。ただし、エクスプローラーでは実行できません。 Link ShellExtensionを入手することをお勧めします。リンクをカスタムショートカット矢印アイコンでオーバーレイし、ターゲットを列挙し、シンボリックリンクとハードリンクを明示的に作成できるようにします。

Edit4

surfasbによると、私はこれを正しく理解しています-ファイルシステムの制限-iノードの概念に感謝しています。とにかく-奇妙なこと-これは常に当てはまるわけではありません-属性の変更がすぐに元のファイルに表示されることがあります-変​​更がある場合-私の本当の懸念は、私が使用している少なくとも1つのプログラムが編集されていないように見えることですファイルはリンクされていますが、ハードリンクのみです。可能ですか? dir/aは、ハードリンクについてあまり明らかにしていません-それらを見る方法はありません

私はあなたの質問のこの部分を見たのを覚えていません。リンクされたファイルを編集しないプログラムに興味があります。これはどのプログラムですか?

dir /aはディレクトリエントリを更新しません。これは、パフォーマンスをかなり重視するため、設計によるものです。

3
surfasb