web-dev-qa-db-ja.com

rsync-rsyncログのf +++++++++の意味

rsyncを使用してサーバーファイルのバックアップを作成していますが、2つの質問があります。

  1. プロセスの途中で、rsyncを再び停止および開始する必要があります。
    rsyncは停止した場所から開始しますか、それとも最初から再開しますか?

  2. ログファイルには、"f+++++++++"。どういう意味ですか?

例えば。:

2010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log
2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log
2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/Ruby_sess.017a771cc19b18cd
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/Ruby_sess.01eade9d317ca79a
92
GodFather

Rsyncがどのように機能するかを見て、不可解な結果行をよりよく理解しましょう。

1-rsyncの大きな利点は、中断後に次回スムーズに継続することです。

次のrsync呼び出しは、その間に変更されていなければ、既に転送されていたファイルを再び転送しません。ただし、中断されたことを認識していないため、最初からすべてのファイルのチェックを開始して確認します。

2-各文字は、-i, --itemize-changesman rsyncのセクションを読むと翻訳できるコードです

質問からサンプルログファイルをデコードします。

> f.st ......

> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different

.d..t ......

. - the item is not being updated (though it might have attributes 
    that are being modified)
d - it is a directory
t - the time stamp is different

> f +++++++++

> - the item is received
f - a regular file
+++++++++ - this is a newly created item

Rsync manページの関連部分:

-i、-itemize-changes

属性の変更を含む、各ファイルに加えられた変更の単純な項目別リストを要求します。これは、--out-format = '%i%n%L'を指定するのとまったく同じです。オプションを繰り返すと、変更されていないファイルも出力されますが、受信するrsyncがバージョン2.6.7以上の場合のみです(-vvをrsyncの古いバージョンで使用できますが、他の冗長メッセージの出力もオンにします)。セージ)。

「%i」エスケープの長さは11文字の不可解です。一般的な形式は、文字列YXcstpoguaxのようなものです。Yは実行中の更新の種類に置き換えられ、Xはファイルの種類に置き換えられ、他の文字は変更された場合に出力される属性を表します。

Yを置き換える更新タイプは次のとおりです。

  • <は、ファイルがリモートホストに送信される(送信される)ことを意味します。
  • >は、ファイルがローカルホストに転送される(受信される)ことを意味します。
  • cは、アイテムのローカルな変更/作成が行われていることを意味します(ディレクトリの作成やシンボリックリンクの変更など)。
  • hは、アイテムが別のアイテムへのハードリンクであることを意味します(--hard-linksが必要です)。
  • .は、アイテムが更新されていないことを意味します(ただし、属性は変更されている可能性があります)。
  • *は、項目化された出力領域の残りの部分にメッセージが含まれることを意味します(「削除」など)。

Xを置き換えるファイルタイプは、ファイルの場合はf、ディレクトリの場合はd、シンボリックリンクの場合はL、ファイルの場合はDです。デバイス、および特殊ファイル用のS(名前付きソケットおよびfifo)。

上記の文字列の他の文字は、アイテムに関連付けられた属性が更新されている場合に出力される実際の文字または「。」です。変更なし。これの3つの例外は、(1)新しく作成されたアイテムが各文字を「+」に置き換える、(2)同一のアイテムがドットをスペースに置き換える、(3)不明な属性が各文字を「?」に置き換える、です。 (これは古いrsyncと通信するときに発生する可能性があります)。

各文字に関連付けられている属性は次のとおりです。

  • cは、通常のファイルのチェックサムが異なる(--checksumが必要)か、シンボリックリンク、デバイス、または特殊ファイルの値が変更されていることを意味します。ファイルを3.0.1より前のrsyncに送信している場合、この変更フラグはチェックサムが異なる通常のファイルに対してのみ存在することに注意してください。
  • sは、通常のファイルのサイズが異なり、ファイル転送によって更新されることを意味します。
  • tは、変更時間が異なり、送信者の値に更新されていることを意味します(--timesが必要)。 Tの代替値は、変更時刻が転送時刻に設定されることを意味します。これは、-timesなしでファイル/シンボリック/デバイスが更新され、シンボリックリンクが変更され、受信者が時刻を設定できない場合に発生します。 (注:rsync 3.0.0クライアントを使用している場合、この時間設定の失敗に対して適切なTフラグの代わりにsフラグがtと組み合わされて表示される場合があります。)
  • pは、権限が異なり、送信者の値に更新されていることを意味します(--permsが必要です)。
  • oは、所有者が異なり、送信者の値に更新されていることを意味します(所有者とスーパーユーザーの権限が必要です)。
  • gは、グループが異なり、送信者の値に更新されていることを意味します(--groupおよびグループを設定する権限が必要です)。
  • uスロットは将来の使用のために予約されています。
  • aは、ACL情報が変更されたことを意味します。
  • xは、拡張属性情報が変更されたことを意味します。

他の1つの出力が可能です。ファイルを削除するとき、「%i」は、削除される各アイテムの文字列「* deleting」を出力します(削除として出力するのではなく、削除を記録する最近の十分なrsyncと話していると仮定します詳細メッセージ)。

162
mit

しばらく前に、私が書いていたスクリプトのrsync出力を理解する必要がありました。そのスクリプトを書く過程で、グーグルで検索して、@ mitが 上記 と書いたものに行き着きました。私はその情報と他のソースからのドキュメントを使用して、ビットフラグに関する独自の入門書を作成し、rsyncを取得してすべてのアクションのビットフラグを出力します(デフォルトではこれを行いません)。

私はこの情報を(私のような)他の人が検索でこのページを見つけてrsyncのより良い説明を必要とするのを助けることを期待してここに投稿しています。

--itemize-changesフラグ-vvvフラグの組み合わせにより、rsyncはすべてのファイルの詳細な出力を提供しますターゲットディレクトリと比較したときにソースディレクトリで識別されたシステム変更。 rsyncによって生成されたビットフラグをデコードして、何が変更されたかを判断できます。各ビットの意味をデコードするには、次の表を使用してください。

rsyncの出力の各ビット位置と値の説明:

YXcstpoguax  path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
||              changed value (for symlinks, devices, and special files)
|╰---------- the file type:
|            f: for a file,
|            d: for a directory,
|            L: for a symlink,
|            D: for a device,
|            S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
             <: file is being transferred to the remote Host (sent)
             >: file is being transferred to the local Host (received)
             c: local change/creation for the item, such as:
                - the creation of a directory
                - the changing of a symlink,
                - etc.
             h: the item is a hard link to another item (requires 
                --hard-links).
             .: the item is not being updated (though it might have
                attributes that are being modified)
             *: means that the rest of the itemized-output area contains
                a message (e.g. "deleting")

さまざまなシナリオでのrsyncの出力例:

>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt 
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/

rsyncの出力のキャプチャ(ビットフラグにフォーカス):

私の実験では、--itemize-changesフラグ-vvvフラグの両方がrsyncを出力してallファイルシステムの変更のエントリ。三重の詳細(-vvv)フラグがないと、ディレクトリ、リンク、およびデバイスの変更が一覧表示されませんでした。お使いのバージョンのrsyncを試して、期待するすべてを観察し、注意していることを確認することは価値があります。

この手法の便利な使用法の1つは、--dry-runフラグをコマンドに追加し、rsyncによって決定された変更リストを変数に(変更を加えずに)収集して、リストで何らかの処理を行えるようにすることです。次のようなものは、変数の出力をキャプチャします。

file_system_changes=$(rsync --archive --acls --xattrs \
    --checksum --dry-run \
    --itemize-changes -vvv \
    "/some/source-path/" \
    "/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')

上記の例では、rsyncからの(stdout)出力がgrepに(stdin経由で)リダイレクトされるため、ビットフラグを含む行のみを分離できます。

キャプチャされた出力の処理:

変数の内容は、後で使用するためにログに記録したり、目的のアイテムについてすぐに反復したりできます。 rsyncの詳細を調査するときに書いたスクリプトで、この正確な戦術を使用しています。スクリプト( https://github.com/jmmitchell/movestough )を見ると、キャプチャされた出力を後処理して、新しいファイル、重複ファイル(同じ名前、同じ内容)を分離する例があります。ファイルの衝突(同じ名前、異なるコンテンツ)、およびサブディレクトリ構造の変更。

77

1)Wodin、それは完全に真実ではありません。 --partialまたは-Pタグを使用する場合(--partial --progressと同じ)、rsyncは中断された転送を再開します。

2)まさに、それは--itemize-changesタグの一般的な出力です。

2
Joao Figueiredo

1.)「同期を再開」しますが、同じサイズやタイムスタンプなどのファイルを転送しません。最初に転送するファイルのリストを作成し、この段階で既にいくつかのファイルを転送していることがわかります。それらをスキップします。タイムスタンプなどを保持するようにrsyncに指示する必要があります(例:rsync -a ...

Rsyncはファイルを転送している間、.filename.XYZABCの代わりにfilename。その後、そのファイルの転送が完了すると、ファイルの名前が変更されます。そのため、大きなファイルの転送中にrsyncを強制終了した場合、最初から開始する代わりに--partialオプションを使用して転送を続行する必要があります。

2.)それが何なのか分かりません。例を貼り付けていただけますか?

編集: http://ubuntuforums.org/showthread.php?t=1342171 に従って、これらのコードは、-i, --itemize-changesオプション。

Joaoの回答に基づいた私の回答の一部を修正

1
Wodin