geek.conf.2

あるインフラエンジニアの備忘録

rsyncバージョンアーップウウウ。

in ファミレス 僕です。

$ rsync -av --delete -e ssh /data remotehost.example.jp:/data

とはよく言ったもんでよくやる例のやつです。

avはよくTSUTAYAに置いてあるヤツとして
deleteは同期元(/data)にあったファイルが削除されたら同期先(remotehost.example.jp:/data)のそのファイルも削除してくれちゃうオプションです。
で、eはexecute コマンドっす。

だから上記のrsyncコマンドはアーカイブ/詳細モード + ファイル削除も同期 + リモートホストsshログインして同期することが意です。
※アーカイブモードとはシンボリックリンク/パーミッション/オーナ/タイムスタンプを保持したままコピー


これはrsyncが2系までだと通用するお話。

rsyncが3系にバージョンアップしましたが、バージョンアップ後は、上記rsyncコマンドを打つと以下のようなエラーにぶち当たります。


usage: ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-w tunnel:tunnel] [user@]hostname [command]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code xxx) at io.c(xxx) [sender=3.x.x]

これ焦ったんですが、-e sshが悪い訳でなくrsyncのエラーなんですね。

なんかrsync 3系からリモートホスト指定するときにユーザを指定しなきゃならんようですばい。
つまり以下のように修正します。

$ rsync -av --delete -e ssh /data user@remotehost.example.jp:/data

そんなん知らんわ!って状況。

なんか指定しなくても良いように振る舞えるパッチもあるとかないとか。

参考URL→rsyncのバージョンをあげたらrsync経由の同期のバッチが動かなくなった件