rsyncシンクロアート

7291 ワード

==
メンテナンスエンジニアであれば、数十台、数百台、さらには数千台のサーバに直面する可能性があります.一括操作のほか、環境同期、データ同期も欠かせません.
「同期」といえばrsyncですが、今日はこのツールから見た同期の芸術についてお話しします.
[オプションなし]
rsyncはよく使われています.
$ rsync main.c machineB:/home/userB

1宛先のファイル内容がソースと異なる限り、データ同期がトリガーされ、rsyncは両方のファイル内容が同じであることを保証します.2ただしrsyncはファイルの「modify time」を同期しません.データ同期のあるファイルであれば、宛先のファイルの「modify time」は常に最新時刻に変更されます.3 rsyncはあまり注目されないエンドファイルのrwx権限であり、宛先にこのファイルがなければ、権限はソースと一致します.このファイルが宛先にある場合は、ソースに従って権限は変更されません.4 rsyncにソースファイルの読み取り権限があり、ターゲットパスに書き込み権限がある限り、rsyncは宛先ファイルがソースと一致するように同期します.5 rsyncは、宛先ファイルにログインしたアカウントでのみファイルを作成できます.宛先ファイルの送信者と所属グループとソースの一致を維持する能力はありません.(root権限を使用しない限り、敗者一致、グループ一致を要求する資格があります)
[-tオプション]
私たちはよく-tオプションを使用します.
$ rsync -t main.c machineB:/home/userB

1-tオプションを使用すると、rsyncはソースファイルの「modify time」をターゲットマシンに同期することを常に考えています.2-tオプション付きrsyncは、同期する前に両方のファイルのタイムスタンプとファイルサイズを比較し、一致すれば両方のファイルと同じとみなされ、このファイルは更新されません.3 rsyncの聡明さのため、かえって聡明さに誤解されます.宛先のファイルのタイムスタンプ、サイズ、ソースが完全に一致しているが、内容が適切に一致していない場合、rsyncは発見できません.これが伝説の「穴」です!4 rsyncが自業自得な場合、解決策は-Iオプションを使用することです.
[-Iオプション]
-Iオプションはよく使用されます.
$ rsync -I main.c machineB:/home/userB
-Iオプションはrsyncをおとなしくし、ファイルごとにデータ同期を開始します.
2-Iオプションは、「quick check」ポリシーを放棄したため、データの一貫性を確保します.その代わり、速度が遅くなります.(quick checkポリシーとは、まずファイルのタイムスタンプとファイルサイズを表示し、同じと思われるファイルを順次排除することである)3状況にかかわらず、宛先のファイルのmodify timeは常に現在の時刻に更新される.
【-vオプション】
このオプションは、rsyncにより多くの情報を出力させることです.例を挙げてみましょう.
$ rsync -vI main.c machineB:/home/userB                                                   
main.c

sent 81 bytes  received 42 bytes  246.00 bytes/sec
total size is 11  speedup is 0.09

vを増やせば増やすほど、より多くのログ情報を得ることができます.
$ rsync -vvvvt abc.c machineB:/home/userB 
cmd= machine=machineB user= path=/home/userB
cmd[0]=ssh cmd[1]=machineB cmd[2]=rsync cmd[3]=--server cmd[4]=-vvvvte. cmd[5]=. cmd[6]=/home/userB 
opening connection using: ssh machineB rsync --server -vvvvte. . /home/userB 
note: iconv_open("ANSI_X3.4-1968", "ANSI_X3.4-1968") succeeded.
(Client) Protocol versions: remote=28, negotiated=28
(Server) Protocol versions: remote=30, negotiated=28
[sender] make_file(abc.c,*,2)
[sender] flist start=0, used=1, low=0, high=0
[sender] i=0  abc.c mode=0100664 len=11 flags=0
send_file_list done
file list sent
send_files starting
server_recv(2) starting pid=31885
recv_file_name(abc.c)
received 1 names
[receiver] i=0   abc.c mode=0100664 len=11
recv_file_list done
get_local_name count=1 /home/userB
recv_files(1) starting
generator starting pid=31885 count=1
delta transmission enabled
recv_generator(abc.c,0)
abc.c is uptodate
generate_files phase=1
send_files phase=1
recv_files phase=1
generate_files phase=2
send files finished
total: matches=0  hash_hits=0  false_alarms=0 data=0
generate_files finished
recv_files finished
client_run waiting on 14318

sent 36 bytes  received 16 bytes  104.00 bytes/sec
total size is 11  speedup is 0.21
_exit_cleanup(code=0, file=main.c, line=1031): entered
_exit_cleanup(code=0, file=main.c, line=1031): about to call exit(0)

[-zオプション]
これは圧縮オプションで、このオプションを使用するとrsyncは対端に送信されたデータを圧縮してから転送します.ネットワーク環境が劣っている場合に使用することをお勧めします.
一般的に,−zの圧縮アルゴリズムはgzipと同じである.
[-rオプション]
rsyncを初めて使用すると、このような状況に遭遇することがあります.
$ rsync superman machineB:/home/userB
skipping directory superman

rsyncにフォルダを同期させる必要があることを追加しないと、自発的に引き受けません.これもrsyncの怠惰なところです.
したがって、本当にフォルダを同期したい場合は、-rオプション、すなわちrecursive(再帰的、循環的)を追加します.
$  rsync -r superman machineB:/home/userB

上記の説明では、タイムスタンプとファイルサイズが完全に一致し、ファイルの内容だけが異なり、-Iオプションを使用していない場合、rsyncはデータ同期を行わないと述べています.
では、「Linuxの世界ではフォルダもファイルなので、このようなファイル(フォルダ)も内容が異なるだけで、タイムスタンプもファイルサイズも同じであれば、rsyncは発見しますか?」と質問します.
実験はみんなが自分でやることができて、結論はここでみんなに教えます:
フォルダについては、rsyncはチェックします.-rオプションを追加すると、フォルダ自体に対して「quick check」をするのではなく、フォルダに入ってチェックします.
[-lオプション]
ソフトリンクファイルを同期する場合、rsyncは何を提示すると思いますか?
$ ll
total 128
-rw-rw-r--  1 userA userA 11 Dec 26 07:00 abc.c
lrwxrwxrwx  1 userA userA  5 Dec 26 11:35 softlink -> abc.c
$ rsync softlink machineB:/home/userB
skipping non-regular file "softlink"

うん、君の推測は正しい.rsyncはまた非情に私たちを拒絶した.ファイルがソフトリンクであることを発見すると、-lオプションを追加しない限り無視されます.
$ rsync -l softlink machineB:/home/userB

-lオプションを使用すると、rsyncはソフトリンクファイルのタイプを完全に維持し、元のソフトリンクファイルを宛先にコピーし、「follow link」を指すエンティティファイルにコピーしません.
もし私がrsyncにfollow linkの方法を取らせたいなら、-Lオプションを使えばいいです.自分で効果を試してみてください.
[-pオプション]
このオプションのフルネームは「perserve permissions」で、その名の通り権限を保持します.
このオプションを使用しない場合、rsyncは権限の問題を処理します.
1宛先にこのファイルがない場合、同期後、宛先ファイルの権限はソースと一致します.2このファイルが既に宛先に存在する場合は、ファイルの内容のみが同期され、権限は元のままになります.
-pオプションを使用すると、rsyncはいずれにしてもソース側の権限と一致します.
[-gオプションと-oオプション]
この2つのオプションは、ファイルを保持するグループ(group)とホスト(owner)のペアであり、役割は明確であるべきです.ただし、所有者とグループを変更するには、管理者権限のみが使用されることが多いことに注意してください.
[-Dオプション]
-Dオプション、原文解釈は「preserve devices(root only)」であり、文字通りデバイスファイルの元の情報を保持することである.ブロガーは実際にそのメリットを体験したことがないので、発言権はあまりありません.
[-aオプション]
1-aオプションはrsyncの中で比較的覇道的なオプションです.-aオプションを使用すると、-rlptgoDという選択肢を使用することに相当します.一敵七で、唯-aオプションも.2-aオプションの学名はarchive option、中国語はアーカイブオプションと呼ばれます.-aオプションを使用すると、再帰的に同期し、可能な限り各方面の一貫性を維持したいことを示します.3しかし-aオプションにはアクレスの踵もあります.それは-aが「ハードリンク」を同期できない場合です.このようなニーズがある場合は、-Hオプションを追加します.
[--deleteオプション、--delete-excludedオプション、--delete-afterオプション]
3つのオプションはすべて削除に関連しています.
1–delete:ソース側にこのファイルがない場合は、送信側も所有したくないので削除します.(このオプションを使用する場合は、-rオプションと組み合わせなければなりません)2-delete-excluded:目的地で削除するファイルを特定します.3–delete-after:デフォルトでは、rsyncは宛先のファイルを整理してからデータ同期を開始します.このオプションを使用すると、rsyncはデータの同期を先に行い、クリーンアップが必要なファイルを削除します.
こんなにたくさんのdeleteを見て、あなたは少し肝が震えていますか?確かにrsyncの公式説明にもこんな言葉があります.
This option can be dangerous if used incorrectly!  
It is a very good idea to run first using the dry  run  option
(-n) to see what files would be deleted to make sure 
important files aren't listed.

この言葉から、私たちは小さなテクニックを学びました.それは-nオプションです.それは人を脅かすオプションです.影響を受けたファイルのリストで警告しますが、本当に削除することはありません.これは私たちに確認する機会と旋回の余地があります.実際の使い方を見てみましょう.
$ rsync -n --delete -r . machineB:/home/userB/
deleting superman/xxx
deleting main.c
deleting acclink

[--excludeオプションと--exclude-fromオプション]
目的地に同期したくない場合は、-excludeオプションを使用して非表示にすることができます.rsyncはプライバシーを重視しています.-excludeオプションを使用して多くの「プライバシー」を設定することができます.
プライバシーを隠すのが多すぎる場合は、コマンドラインオプションで設定するのが面倒ですが、rsyncは思いやりがあります.exclude-fromオプションを提供しています.プライバシーを1つのファイルにリストしてrsyncに直接このファイルを読み込ませることができます.
[--partialオプション]
これが伝説のブレークポイント続伝機能です.デフォルトでは、rsyncは転送が中断したファイルを削除し、再転送します.しかし、いくつかの特別な状況では、再伝送ではなく、再伝送を望んでいません.
私たちは使用中、よくPオプションを使う人を見かけますが、このオプションは実はサボるために設計されています.以前は人々はいつも手動で-partial-progressを書いていたが、苦労したので、新しい選択肢で代わったほうがいいと思っていたので、-Pは運に応じて生まれた.一部の読者は-partialに私は役割を知っていますが、-progressは何に使いますか?なぜ多くの人がそれを使うのか、それはそんなに魅力的ですか?(本当に...)
[--progressオプション]
このオプションを使用すると、rsyncは転送の進捗情報を表示します.何の役に立つのでしょうか.rsyncは興味深い説明をしました.
This gives a bored user something to watch.

さあ、こんなにたくさん書いて、みんなが見ているのはもう退屈で、実際に-progressで退屈を解消するのは、いい選択ですね^^;
PS:rsyncの–excludeのPATTERN構文については、後述します.
ありがとう!
転載する