2012-02-27 12 views
5

2つのスクリプトがあるとします。最初のものは(mvコマンドで)いくつかのファイルをディレクトリに入れ、2つ目はディレクトリをしばらくチェックしてファイルを処理します。私が心配しているのは、2番目のスクリプトが、現在のところ部分的にしか動かされていないファイルの処理を開始したときです。 XFSファイルシステムでこれが実際に起こることはありますか?Linux上でファイルを移動する際の競合条件

答えて

6

どこからファイルを移動しているかによって異なります。 mv一つのファイルシステムの中では、アトミックです。そうでなければ、アトミックではない(元のファイルの削除が続きます)コピーを行わなければなりません。

FWIW、これは通常のPOSIXセマンティクスであり、XFSには何もありません。

+1

ストーリーの道徳は、最初のスクリプトが同じファイルシステムのディレクトリに項目を置くことを簡単にすることで安全だと確信できるようにすることです。これが疑わしい場合は、それらを目的地のディレクトリ* first *のサブディレクトリにmvしてから、目的地のディレクトリに移動して到着がアトミックであることを確認してください。 – zmccord

1

あなたの場合、XFSファイルシステムで競合状態は発生しません。しかし、XFSでは、Unixファイルシステムのシングルスレッドのiノードロックとは異なり、柔軟なロック方式を使用することにより、複数のプロセスが一度にファイルの読み書きを行うことができます。 XFSは、複数のプロセスで同じ領域の書き込みをシリアル化することを重視しています。

XFSはファイルにアクセスするためにダイレクトI/Oを使用します。ダイレクトI/Oでは、アプリケーションがデータをバッファキャッシュにキャッシュしないように指定できます。

通常のバッファされたI/Oを使用すると、複数のリーダーがファイルに同時にアクセスできますが、一度に1つのライターのみがファイルにアクセスできます。ダイレクトI/Oを使用する場合、複数のリーダーとライターがファイルに同時にアクセスできます。