12/09/01 21:46:56.14 eFESUChQ0
>>422
> >>407さん
> その通りです。/mdに書き込むのにエラーが出ました。
>>407 の言うとおり moveはアトミックな処理じゃなくて
A->Bがそれぞれ別のファイルシステムにあるときには、 A->Bにコピーし、その後Aを消すという実装になっているようなんで、
コピー中に他の他のプロセスなどから同じファイルにたいして move() が実行されると、ファイルは壊れるわな。
perlの書き方は全く知らないんで、実例は挙げられないけれど、こんな感じにすればいいんじゃないかな。
1. A → B' にコピー B' は B とも、他のプロセスが作る可能性がある名前ともぶつからないファイル名にする。
2. B' → B に rename する。
ただ、ファイルシステムをまたがるのならば、元のファイルと移動先のファイルに rename or move を
使いたくなる状況っていうのが理解できないんだよね。
鯖落ちしたときに subject.txt が残るようにということであれば ssd / md 間で起こりうるのは
copy だけじゃないのかしら。
もし、 ssd でファイルを作って md に move し、 httpd に読ませるということをしようとしているのならば、
ファイル自体が壊れなくても、 md に move している間に httpd は中途半端なファイルを読むことになるんで
破たんしていると思う。