私のfsにmv原子がありますか?

私のfsにmv原子がありますか?

mv私のfs(ext4)がアトミックであることをどのように確認できますか?

オペレーティングシステムはRed Hat Enterprise Linux Serverバージョン6.8です。

一般的にこれをどのように確認しますか?私は周りを見回しましたが、私のOSが標準POSIXであるかどうかが見つかりませんでした。

答え1

興味深いことに、答えは「状況によって異なります」ようです。

確かに、mv指定済み到着

公益事業mv会社は、次の措置を講じる必要があります。rename() 機能

これ関数仕様の名前変更状態:

一般ファイルの場合、このrename()機能はISO C規格で定義されているものと同じです。ここにインクルードは、ディレクトリに対するアクションを含めるように定義を拡張し、新しいパラメータがすでに存在するファイルに名前を付けるときの動作を指定します。仕様では、関数操作はアトミックでなければなりません。

しかし、最新ISO C仕様状態の場合rename()

7.21.4.2rename機能

要約

#include <stdio.h>
int rename(const char *old, const char *new);

説明する

このrename関数は、指す文字列という名前のファイルが、将来の指すold文字列が提供する名前で識別されるようにしますnew。指定されたファイルはoldこの名前でアクセスできなくなります。newこの関数を呼び出す前に指す文字列で指定されたファイルが存在する場合、rename動作は実装に応じて定義されます。

商品を返す

この関数は、操作が成功した場合は0を返しrename、失敗した場合は0以外の値を返します。この場合、ファイルが以前に存在していた場合は、元の名前で識別できます。

驚くべきことに、原子性に対する明示的な要件はない。最新の公開C規格の他の場所で必要になる可能性がありますが、まだ見つかりませんでした。誰もがそのようなニーズを見つけることができれば、編集とコメントを歓迎します。

また、見ることができますrename() は原子的ですか?

すべてLinuxのマニュアルページ:

すでに存在する場合は、newpathそのアイテムにアクセスしようとしている他のプロセスで見つからないアイテムが見つからないように自動的に置き換えられます newpath。ただし、名前が変更されたファイルを参照するウィンドウが表示されることoldpathがあります。newpath

Linuxのマニュアルページの主張代替ファイルの内容はアトミックです。

テストそして確認するただし、これを行う必要がある場合、原子性は非常に困難になる可能性があります。 「mvが原子であることを確認する方法」が何を意味するのかは明らかではありません。原子性の要件/仕様/文書化が必要ですか、それとも実際に必要ですか?テストそれ?

上記の内容も参考にしてください仮説両方のオペランドのファイル名は同じファイルシステムにあります。mvこれを行うユーティリティの標準的な制限が見つかりません。

答え2

mvrenameシステムコールと原子性に基づいていますrename()。マンページを見ることができますrename(2)

あなたは答えを見つけることができますrename() は原子的ですか?スタックオーバーフローに。

どのタイプのfsを使用していますか?

答え3

おそらく、システムコールとその原子性を確認することに加えてテストかもしれませんが、inotify-toolsこれが原子性の保証された証拠であるかどうかはわかりません。

2つの殻を開きます。次のいずれかで移動されたターゲットディレクトリを観察します。

inotifywait -m target/

ファイルを別のディレクトリに移動します。

mv foobar target/

1行だけを表示する必要がありますinotifywait

target/ MOVED_TO foobar

ls target/の応答と比較するとtouch target/a原子的なものに見え、次のような複数行のメッセージを生成します。

# the response to ls target/
target/ OPEN,ISDIR 
target/ ACCESS,ISDIR 
target/ CLOSE_NOWRITE,CLOSE,ISDIR 

ポリスチレン

私の考えは、少なくともファイルに対する非同期マルチプロセス協力が安全であることを示していますinotify(実際には原子的)。とにかく、inotify操作後に最終信号を送信した後にのみ応答します。たとえば、生産者 - 消費者設定は、次の方法をinotify使用して簡単かつ安全に実装できます。

関連情報