とデータを同期しますrsync --delete --backup --backup-dir=[some directory] -avz [source] [destination]
。
- rsyncを実行しているマシンでは、ディレクトリはローカルにマウント
[source]
さ[destination]
れたNFSエクスポートです(つまり、rsyncを実行しているマシンはNFSクライアントです)。 - 成功
rsync
+いくつかの確認後、バックアップが削除されました。
私のLANの他のシステムはアプリケーションサーバーであり、[destination]
同じNFSエクスポートがローカルにインストールされています。アプリケーション側の複雑さにより制御できない上記では、アプリケーションが名前を使用するのではなく、inodeでファイルを参照しているようです。ファイルが次から変更されたときに問題が発生する可能性があります[source]
。
[destination]
ファイルにinodeがあると仮定123
- アプリケーションはinodeを持つファイルを「指します」。
123
[source]
rsyncはこのファイルのバージョンとバージョンの違いを検出して[destination]
ファイルを転送する必要があります。- 転送前に「移動」してバックアップを作成します。これで、バックアップファイルにinodeがあります。
123
- ファイルの更新されたバージョンがrsyncによって送信され、新しいinodeが取得されます(
456
)。 - rsync+ 検証が正常に完了すると、バックアップは削除されます。これ以上ファイルに
123
inode がありません。 123
アプリケーションはまだ破損したinodeを指しています。
rsync --backup
それがどのように機能するのか、inodeがどのように機能するのか私は理解していますか?- rsync オプションの
--inplace
使用方法--backup
:
- rsyncは独自のinodeを使用してバックアップファイルを生成しますか?
- ファイルは現在のinodeを保持していますか?
答え1
inodeを介してファイルを参照することはほとんど不可能です。ファイルを開くには、ディレクトリでファイル名への参照を開く必要があります。次に、ファイル名とは無関係のファイルハンドルがあります(これがファイルがファイルシステムから削除される可能性がありますが、まだ開いていてアクティブな理由です)。そのため、アプリケーションの存続期間中にファイルが開いていると仮定します。今、このファイルの内容をrsync
。
通常、rsync
ターゲットファイルの一時コピーは既存のインスタンスと共に作成され、最後の瞬間にソースファイルが削除(またはバックアップ)され、代替ファイルに切り替えられます。この動作はこのオプションを使用して変更し、--inplace
新しいコピーを作成せずにrsync
実際の宛先を書き込むことができます。
これを指定するので、--backup
正しい操作を実行し、rsync
ソースインスタンスを更新できるようにする前に、バックアップコピーを作成してください。--inplace
簡単な例でこれを理解できます。
# Prepare scenario
mkdir /tmp/624404
cd /tmp/624404
date >src
cp -p src dst
# Initial files, with inodes
ls -li src dst
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:49 src
# Update, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src
# Update again, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src
ターゲット(dst
)ファイルにはまだ元のinodeがありますが、バックアップには新しいinodeが付与されていることがわかります。 2番目の更新は、inodeがその後維持されたことを示しています。
--inplace --backup
あなたの場合、これはあなたに必要なようです。ただし、マニュアルページの警告に注意してください。
警告:他のユーザーがアクセスするファイルを更新するためにこのオプションを使用しないでください。このオプションを使用してコピーを作成するときは注意してください。
デフォルト以外の理由は、--inplace
中断された部分的なコピーによってターゲットファイルが一貫性のないままになる可能性があり、作成者は、破損した最新のファイルよりも内部的に一貫した古いファイルを持つ方が良いと信じているからです。これらの動作は、(バージョン3.0.0でも)--inplace
などのフラグを使用して変更できます。--partial
--append
rsync