6

bash スクリプト (Scientific Linux) があります。スクリプトはファイルを操作する必要があります。「file.dat」(約 1 GB のサイズ) としましょう。しばらくすると、スクリプトが再起動され、次のように実行されます。

if [ -f file.dat ];  then
    cp file.dat file.previous.dat
fi

ファイルのバックアップを取得します。その後、プロセスが開始され、「file.dat」が上書きされます

最も安全な側にいるために(電気のシャットダウンまたは予期しない何か)。最良の選択肢は何でしょう: cp または mv ? ありがとう。

4

3 に答える 3

5

私は組み合わせを使用します:

mv file.dat file.dat.previous
cp file.dat.previous file.dat

その方法は、アトミックfile.dat.previousであるため、常に完全になります。mv

于 2012-06-27T16:49:02.373 に答える
4

間違った質問に対する正しい答え

迅速でアトミックな移動が必要な場合は、次のようにmvを実行する必要がありman 2 renameます。

newpath がすでに存在する場合、それは自動的に置き換えられます (いくつかの条件に従います。以下のエラーを参照してください)。そのため、newpath にアクセスしようとする別のプロセスがそれを見つけられない点はありません。

おそらくもっと重要なことは、mvは主にディレクトリ エントリ操作であるため、通常の状況でのファイル コピーに比べて非常に高速であることです。

正しい質問に対する正しい答え

停電や予期しないシステムのシャットダウンが心配な場合は、次のようにします。

  1. 無停電電源装置を接続します。本当。脅威モデルを解決します。
  2. バッテリでバックアップされた RAID コントローラを使用していることを確認してください。
  3. 重要な書き込みを同期させます。
  4. メタデータだけでなく、データをジャーナリングするジャーナリング ファイルシステムを使用します。

mvコマンドは高速である必要がありますが、壊滅的な障害に直面した場合の堅牢性は、ハードウェアまたはファイル システムの問題です。

于 2012-06-28T06:49:37.850 に答える
1

ここではあまり役に立たないかもしれませんがrsync、この種の仕事のためのツールです。転送が中断された場合、必要な場所から再開できます。

于 2012-06-27T18:49:38.370 に答える