rsyncはLinuxコンピュータ同士でデータを複製し合う場合には、一般的にとてもよく使われるパッケージです。
今日はこのrsyncの基本となるエラーメッセージを二つご報告します。
とっても簡単な内容です。特に話の内容にはヤマもオチもありません。
エラーのほとんどは接続不調?
結構前の話なのですが、運用しているLinuxサーバのプロセスが知らぬ間に落ちていたらしくこんなメッセージがcronから送られてきていました。
----------------------------------------------
rsync: failed to connect to %IPAddress% (%IPAddress%): No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(122) [Receiver=3.0.9]
----------------------------------------------
Errorの文字があるのでデータが同期できなかった、ってことは分かるんですが、これは何かしら?
ようするに、「failed to connect to %IPAddress% 」とあるので「%IPAddress%への接続に失敗しました」ということですね。「No route to host」とあるので接続先のIPAddressが見つかりませんでエラーになりました、ってところですね。
ようするにrsyncクライアントがrsyncdが起動しているはずのサーバに接続できなかったということが分かります。
[Receiver=3.0.9]ってのがエラーコードです。
接続できても…
一方で接続できるけどサーバとなるrsyncdから拒否されることもあります。その場合のログがこっち。
----------------------------------------------
rsync: failed to connect to %IPAddress% (%IPAddress%): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(128) [Receiver=3.1.1]
----------------------------------------------
「failed to connect to %IPAddress% 」は同じなのですが、「Connection refused」とあるので、「接続が拒否されましたよ。」というメッセージであることが分かります。こうなると通信としては成立していて、Linux間で通信の結果、サーバとなるrsyncdが「このクライアントは接続してはいかん」と判断して、先方が切断してきた、と判断できます。
よく見ると、エラーコードが
[Receiver=3.1.1]
となっています。単純に通信不調な場合とコードが違っていますね。
今回
今回トラブルシューティングに当たって、この二種類のログを取り違えてしまったのがミスの始まりでした。あれ?何でエラーに?と思ったら、実は通信側の問題で、そもそも繋がってない状況だった、ってことで時間を食ってしまいました。
※正確にはsambaサーバでホストしている共有フォルダにつながらなかった。
で、rsyncd.confや権限設定は正しい記述なのに、なんでエラーになってるのよ?ってことで無駄に時間を食ってしまいました。
簡単rsync解説
rsyncをお使いの方はご存知なのですが、
データを提供する側のサーバ(接続される方)は「/etc/rsyncd.conf」
データを取得する(コピーを保存する側)は「コマンド(※)でコピー対象を指定」
という二種類の設定を実行することで二台のLinux間でのデータ複製を実現しています。
※)コマンドの例
rsync -av --delete --password-file=/etc/rsyncd.passwd rsync://root@IPAddress:/Dir /home/sync/Dir
rsync自体は、このコマンドを実行することで、相手となるrsyncdが動作していて/etc/rsyncd.confに定義されたサーバの場所に接続し、そのデータを指定されたパーミッションで複製を実行しちゃいます。
上記のように「rsync://root@IPAddress:/Dir」と指定していれば、rsyncd側の/etc/rsyncd.confの記述をみて、
----------------------------------------------
[dir]
path = /home/sync/dir/
hosts allow = localhost %IPAddress%
read only = false
auth users=root
secrets file=/etc/rsyncd.secrets
----------------------------------------------
となっているので、Linux間で「/home/sync/dir/」ディレクトリ同士がデータを同期するようになります。要するにコマンド例のコマンドを実行すればフォルダミラーリングをしているのと同じ動きになります。