目次
文書の過去の版を表示しています。
rsyncとsshを利用したリモートサーバの高速バックアップ
rsync - 高速増分ファイル転送ユーティリティ(Windows)
rsync + ssh の基本
ここでは、rsyncとsshを利用してリモートサーバのバックアップを取る方法を説明する。
rsyncは指定されたフォルダ間の同期を高速に行うことができる。sshを利用するとリモートサーバとの間でフォルダの同期処理を行える。
ローカルフォルダ → ローカルフォルダ (ディスク間コピーなど)
ローカルフォルダ → ローカルフォルダ の転送は、以下の形式となる。
$ sudo rsync -avP --delete --copy-links /home/samba/DataShare /mnt/backup/
-a 元のパーミッションやグループなどを保持したまま同期
-v 処理中のファイル名を表示
-P 進行状況を表示
–delete コピー元で削除されたファイルは、コピー先でも削除
–copy-links シンボルリンク先のファイルをコピー
-z データを圧縮する(ローカルコピーでは速度が低下するので指定しない)
ローカルフォルダ → リモートサーバ の転送
ローカルフォルダ → リモートサーバ の転送は、以下の形式となる。
$ rsync -avz --delete -e ssh ローカルフォルダ ユーザ@リモートサーバ:転送先フォルダ
-a 元のパーミッションやグループなどを保持したまま同期
-v 処理中のファイル名を表示
-z データを圧縮する(回線が遅い場合などに使用)
–delete コピー元で削除されたファイルは、コピー先でも削除
-e ssh リモートシェルを指定
リモートサーバ → ローカルフォルダ のバックアップ
リモートサーバ → ローカルフォルダ のバックアップは、以下の形式となる。
$ rsync -avz --delete -e ssh ユーザ@リモートサーバ:バックアップ元フォルダ ローカルバックアップ先フォルダ
sshのportに10022を指定する場合は、以下の形式となる。
$ rsync -avz --delete -e "ssh -p10022" ユーザ@リモートサーバ:バックアップ元フォルダ ローカルバックアップ先フォルダ
実行例:
$ rsync -avz --delete -e ssh username@remote.server.com:/remote/server/directory/ /local/client/directory/20081016 username@remote.server.com's password: receiving file list ... done ./ log/ log/geeklog.tomoyan.net.1.log log/geeklog.tomoyan.net.2.log log/geeklog.tomoyan.net.3.log ... sent 2594 bytes received 403518 bytes 14767.71 bytes/sec total size is 140703092 speedup is 346.46 $
rsyncコマンドの元ディレクトリ指定の違いによる動作
ディレクトリ間の同期を行う場合は、元ディレクトリ指定の違いによる動作に注意する。
元ディレクトリの中身が先ディレクトリに展開される例:
$ rsync -avz --delete -e ssh username@remote.server.com:/remote/server/directory/ /local/client/directory/20081016
/remote/server/directory/ のように、元ディレクトリの最後に “/” を付けると、directory の内容が 20081016 内に展開されるかたちで同期される。
先ディレクトリに元ディレクトリ名のディレクトリが作成される例:
$ rsync -avz --delete -e ssh username@remote.server.com:/remote/server/directory /local/client/directory/20081016
/remote/server/directory のように、元ディレクトリの最後に “/” を付けないと、20081016 内に directory が作成されてその中に同期される。
rsync でレジューム同期を行うには?
$ rsync -avzP --delete -e ssh user@remote.srv.com:/remote/server/directory/ /local/client/directory/20150804
-P –partial –progressと同じ
rsync 進行状況を正確に知る
-P または –progress で ir-chk=3604/183542 と表示されて、実行状況の分母が ir-chk=3005/184542 増えるので、正確な進行状況が分かりにくい場合がある。ir-chk (for incremental recursion check)
–no-inc-recursive オプションを使うと最初に全ての処理対象をカウントして to-chk=3019/196542 のような表示にできる。
$ rsync -avzP --delete --no-inc-recursive -e ssh user@remote.srv.com:/remote/server/directory/ /local/client/directory/20150804
トラブルシューティング
rsync で同期中に Operation not permitted のエラーが出る
以下のようなエラーが出る場合は、rsync がファイルシステムのタイムスタンプやパーミッションをセットする権限がないため発生している。
rsync: failed to set times on "/var/www/html/.": Operation not permitted (1)
権限のあるユーザーで同期するか、sudo を付けて実行するとエラーはでなくなる。
$ sudo rsync -avz --delete -e ssh user@remote.server.com:/remote/server/directory/ /local/client/directory/
rsync で同期中に mkdir "/var/www/html/" failed: No such file or directory (2) のエラーが出る
以下のようなエラーが出る場合は、rsync が ”/var/www/html/” の mkdir に失敗しているため発生している。
対処方法はあらかじめ “/var/www/html/” を用意してあげるか、階層が存在するディレクトリをコピーする。
あらかじめ階層を用意するには以下のコマンドを実行する。
$ mkdir -p /var/www/html/
マウントした NTFS で何もコピーできない
以下のように表示されるだけで中身がなにもコピーされない。
$ rsync -avz --delete -e /var/www/vhosts/ '/mnt/win_c-drv/Program Files (x86)/Ampps/www/vhosts/' sending incremental file list drwxrwxrwx 0 2019/09/13 05:48:31 . sent 48 bytes received 64 bytes 224.00 bytes/sec total size is 0 speedup is 0.00
-a オプションは -rlptgoD を指定した事になる。
-v オプションは verbose (詳細表示)
-z オプションは 転送時に圧縮
-e オプションは “ssh -p10022” SSH でポートを指定する
この場合マウントした NTFS なので -e オプションは不要である。(単純にコマンドオプションのミス)
$ rsync -avz --delete /var/www/vhosts/ '/mnt/win_c-drv/Program Files (x86)/Ampps/www/vhosts/' 〜省略〜 sent 1,243,360,982 bytes received 891,926 bytes 8,378,807.46 bytes/sec total size is 1,626,537,962 speedup is 1.31
-e オプションを外すとすんなりコピーできた。
それでもコピー出来ない場合は -a オプションを分解して以下を試す。
$ rsync -rlptvz --delete /var/www/vhosts/ '/mnt/win_c-drv/Program Files (x86)/Ampps/www/vhosts/' 〜省略〜 sent 1,243,360,982 bytes received 891,926 bytes 8,378,807.46 bytes/sec total size is 1,626,537,962 speedup is 1.31