rsync mkstempが失敗しました。Box.comクラウドのdavfsマウントで無効な引数(22)


10

これらの指示に従ってdavfsを使用してBox.comクラウドストレージをマウントしました。Box.comアカウントを/ home / me / Cloud / Boxにマウントしました

マウントされたファイルシステムには、Dolphinとターミナルの両方からアクセスできます。少し遅いですが、ディレクトリ構造全体をリスト(ls)でナビゲートでき、エラーは発生しません。

次に、次のようにrsyncを実行しようとしました。

rsync -auvz  --max-size=250M --exclude '.*' /home/me/Music/ /home/me/Cloud/Box/Music

私も試しました:

rsync -auv  /home/me/Music/A /home/me/Cloud/Box/Music

およびrsyncコマンドの他のバリエーション。コマンドは、ローカルファイルシステム(/ home / me / Music /)からdavfsマウントを介してボックスクラウド(/ home / me / Cloud / Box / Music)に音楽をコピーしています。

私は常にこの形式のエラーをたくさん受け取ります:

rsync: mkstemp <filename> failed: Invalid argument (22)

具体的な例は次のとおりです。

rsync: mkstemp "/home/me/Cloud/Box/Music/VariousArtists/.01_Track_1.mp3.YVmFI9" failed: Invalid argument (22)

これはすべて、高速/信頼性の高いケーブルモデム接続(12 Mb /秒のアップロード速度)を備えたKubuntu 12.04 LTS 64ビット、サーバーグレードのハードウェアで発生しています。

回答:


7

この問題はrsync、box.comやdavfsが理解できないファイル名の一時ファイルを作成したことが原因で発生します。したがって、ファイル.01_Track_1.mp3.YVmFI9はシステムに存在しませんが、一時的なアーティファクトですrsync。私の側からの推測:すべてのファイルでエラーが発生しない場合、おそらく既にアップロードされた(および変更された)ファイルでのみエラーが発生します。

以前はこの一時ファイルの生成をオフにすることは不可能でしたが、今日ではオプションを追加することでより多くの運が得られるかもしれません--inplace。ただし、rsync-daemonと通信していない場合(davfsを使用している場合とは異なります)にrsyncを使用する利点は、私にはわかりません。

したがって、代替手段としてcp --update、ソースが宛先より新しい場合にのみファイルをコピーするを試すことができます。新しいファイルとID3タグが変更されたファイルはコピーされますが、他のファイルはコピーされません。

または、より多くの制御を使用する必要がある場合find

cd /home/me/Music/
find * -size -250M -print0 | cpio -pdmv0 /home/me/Cloud/Box/Music

これにより、階層構造が保持され、cpio古くない既存のファイルが上書きされることはありません。


1
rsyncを使用する理由の1つは、250 MB未満のファイルと非表示でないファイルまたはディレクトリのコピーに制限する方法をすでに知っていることです。使用します--max-size=250M --exclude '.*' 。私はcpこれを行うことができると確信しています...おそらくfindの出力をcpにパイプすることによって?しかし、それを行う方法はまだわかりません。私たちが解決策を思いついたら、私はやってみcp -ruます。ありがとう
MountainX

その場合、cp -uはまったく必要ありません。cpioを使用してください(最新の回答を参照)
Anthon

ありがとうございました。これで解決すると思います。その過程であなたは私を教育してくれました。(参考までに、私の場合、250 MB未満で、最大ではないファイルが必要です。)
MountainX

それが何をするか... -size -250M、そうでなければ使用します+250M(ここでは一時的に間違ったバージョンがありましたが、編集が修正される前に気づきました)
Anthon

3

1.ファイル名の特殊文字に関する問題

ファイル名に特殊文字はありますか?これらのファイルを書き込んでいるファイルシステムによっては、.たとえばファイルの前にドット()を付けることができない場合があります。

2. rsyncの変更時間とwebdav2に関する問題

このブログ投稿で、rsyncwebdav2マウントされたbox.comディレクトリ全体でファイルの変更時間の書き込み/追跡に問題があると説明されています。

問題は、マウントされたファイルシステムで次のように表示されます。

david@sydney:~/Pictures$ ls -l /mnt/box/bwca/08/09/IMG_3084.CR2
-rw-r--r-- 1 david david 12564061 Aug 14 16:08 /mnt/box/bwca/08/09/IMG_3084.CR2
david@sydney:~/Pictures$ ls -l 2012/08/09/IMG_3084.CR2
-rw-rw-r-- 1 david david 12564061 Aug  9 13:00 2012/08/09/IMG_3084.CR2

同じ記事で回避策が示されました。

$ rsync -avhP --size-only --bwlimit=64 2012/08 /mnt/box/bwca/

これはOKの使用方法ですrsyncが、チェックサムではなく、サイズに基づいてファイルを比較するだけです。

3. davfs2(WebDAV)に関する問題

私はこのスレッドに出くわしました:davfs2経由のrsync?sourceforge上のWebDAV(davfs)フォーラムで。誰かが、WebDAVを使用してオンラインストレージプロバイダーをマウントし、WebDAV経由でマウントされたストレージに対してrsyncを実行したいという同様の状況について問い合わせていました。これは、WebDAVの開発者(Werner Baumann)の 1人がこのトピックについて言わなければならなかったことです。

ヴェルナーの反応の抜粋

  • davfs2は完全なファイルのみをアップロードします。これは、rsyncが通常行うインクリメンタルなことを実行できません。これにより、rsyncが非常に効率的になります。

  • davfs2はディスク上のローカルキャッシュを使用します。これにより、応答性が向上し、アプリケーションもこれから利益を得るはずです。ただし、これにはローカルディスク領域が必要です。キャッシュサイズを大きくして、rsyncがローカルキャッシュでほとんどの作業を行えるようにする必要があります。rsyncがすでに完了している場合、davfs2はほとんどのファイルをバックグラウンドでアップロードします。

ヴェルナーは次のことを提案し続けます

この場合、これは不利になる可能性があります。rsyncがリモートホスト上のファイルを読み取るとき、davfs2によってローカルキャッシュに転送する必要があります(まだそこにない場合)。これにより、プロセスが本当に不必要に遅くなる可能性があります。rsyncはあなたのケースでは洗練されたコピープログラムとしてのみ機能するので、代わりにcpを使用する方が良いでしょう。cpには、davfs2ファイルシステム(= smartdrive)のファイルよりも新しいファイルのみをコピーするオプション(-u)があり、ファイルを読み取る必要はありませんが、mtimeのようなファイルメタデータのみを読み取ります。

"cp -pru directory / to / backup dav /"のようなコマンドでうまくいくかもしれません。それはファイルをダウンロードしないと思います(rsyncはそうかもしれませんが、私はわかりません)(cpとrsyncのマニュアルを見てください)。

オプション?

@Anthonが示唆しているように、このcp -uメソッドを使用してファイルをコピーできます。この方法は、ファイルのサイズのみを比較要素と見なしているため、完全に信頼できるわけではないことを理解しています。

ファイルを比較するときに変更時刻のみを確認するものは使用しないでくださいcp -pruヴェルナーはこのスレッドで理由を説明します

mod時間に関する問題の抜粋

davfs2ファイルシステムをアンマウントして、後で再度マウントすると、サーバーからの時間情報に従ってファイル時間が変更された可能性があります。cp -puやrsyncなどのツールは、これらの時間に依存して、変更されたファイルを判別できません。

したがって、変更時間に関するさまざまな問題を考慮すると、純粋にチェックサムを使用するアプローチの方が適しているように見えます。

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>

こんにちは。ファイル名に特殊文字はありません。ディスク上のファイル名は単に「01_Track_1.mp3」です。ドットプレフィックスは通常のファイル名の一部ではなく、追加の拡張子(たとえば、.mp3.YVmFI9)もありません。すべてのファイルが失敗するわけではないことにも注意してください。失敗にはパターンがないようです。
MountainX

これで十分ですか?got file_sum recv_files(Some_Music_[1999]/Some_Music_[1999]Zuni_SongVarious_Artists24.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Some_Music_[1999]/.Some_Music_[1999]Zuni_SongVarious_Artists24.mp3.1aWWRY" failed: Invalid argument (22) got file_sum
MountainX

別の例:got file_sum recv_files(Carlos/Dance/05-Tapestry-Carlos.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Carlos/Dance/.05-Tapestry-Carlos.mp3.WeGbGS" failed: Invalid argument (22) got file_sum recv_files(Carlos/Dance/06-Dance-Turquoise_Dance-Carlos.mp3)
MountainX

@MountainX-私の更新があなたの問題であるかどうかを確認してください。また、どのバージョンrsyncを使用していますか?rsync --version
slm

rsync version 3.0.9 protocol version 30更新したソリューションを今テストしています。ありがとう!
MountainX

3

Invalid argument (22)エラーを停止するには、rsyncがdavfsの宛先に一時ファイルを作成しないようにする必要がありました。

rsync --temp-dir=/tmp

rsyncの一時ファイル名が次で始まるとどうなるかと思いますが.、davfsではこれが許可されていません。そこで私はさらに進んで、rsyncに名前がで始まるソースファイルを無視するように指示しました.。私はを使用しているので、davfsの宛先に--deleteあるlost+foundディレクトリを削除しようとしないようにも指示しました。

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'

Cygwinでこの問題に遭遇し、この質問が検索エンジンのトップヒットでした。インターネットを介したリモートファイル同期に取り組んでいたため、rsyncの使用が必須であったため、受け入れられた回答は私には機能しませんでした。この回答での--temp-dirの提案が私にとっての解決策でした。
nickcrabtree 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.