web-dev-qa-db-ja.com

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

これらの手順 に従って、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ビット、サーバーグレードのハードウェアで発生しています。

10
MountainX

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

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

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

または、より詳細な制御が必要な場合は、findを使用します。

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

これは階層構造を維持し、cpioは古いものではない既存のファイルを上書きしません。

7
Anthon

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

rsync --temp-dir=/tmp

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

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

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

ファイル名に特殊文字はありますか?これらのファイルを書き込んでいるファイルシステムによっては、ファイルの先頭にドット(.) 例えば。

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

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

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

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/

これはrsyncを使用する方法としては問題ありませんが、チェックサムではなく、サイズに基づいてファイルを比較するだけです。

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

私はこのスレッドに出会いました: rsync via davfs2? は、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 -pruWernerがこのスレッドで理由を説明しています

mod回に関する問題の抜粋

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

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

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