web-dev-qa-db-ja.com

Rsyncはマウントされていないリモートドライブへの書き込みをあきらめません

外付けハードドライブがマウントポイントにマウントされたままになる で問題が発生しました。これはこの質問のトピックではありませんが、背景情報です。

問題はrsyncにあります。不変の宛先に同期しようとしていることを認識していないようです。

ご覧のとおり、このドライブが正しくマウントされていない場合、残っているのはマウントポイントフォルダーだけです。これは私が不変にしたものです。

Rsyncは、このマウントポイントに転送できないことを認識する代わりに、このリモート宛先へのいくつかのギグの転送を続行します。失敗するのではなく、「この宛先には、ここで同期するように指示されたファイルがないため、すべてのファイルを新しい初回転送であるかのように移動する方がよい」かのように状況を確認します。

Rsyncがエラーになることを望みますが、代わりに、このマウントポイントに100,000個のファイルを書き込もうとし、各ファイルで失敗します。

4
Lonniebiz

目的地のパスを自由に決めることができるかどうかはわかりませんが、それがあれば、次のトリックを使用できます。

マウントポイントフォルダにディレクトリxyzを作成し、chmod 000 xyzを使用して権限を変更します。次に、ドライブをマウントポイントにマウントし、ディレクトリをxyzにして、アクセス許可を通常のままにします。 rsyncを宛先として/your-mount-point/xyz/に調整します。ドライブがマウントされていない場合、rsyncはエラーで終了します。

rsync: change_dir#1 "/your-mount-point/xyz/" failed: Permission denied (13)
rsync error: errors selecting input/output files, dirs (code 3) at main.c(562) [Receiver=3.0.9]
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

ドライブがマウントされている場合、rsyncは問題なく動作します。

3
Anthon

rsyncは、ドライブがマウントされていないことをどのように認識しますか?マウントポイントは他のフォルダと同じようにフォルダであるため、rsyncは指示どおりに実行します。表示できるディレクトリを指定したため、エラーは発生せず、書き込みを試みます。

回避策は、最初にドライブがマウントされていることを確認し、次にrsyncを実行することです。この例では、外付けハードドライブのラベル(Iomega_HDD)の変更を適宜使用しています。

mount | grep -q Iomega_HDD && rsync ...

上記のコマンドは、ドライブがマウントされている場合にのみrsyncコマンドを実行します。

2
terdon