Concrete CMS のデータをサーバー間で引っ越ししたりするときによく使うオプションです。
ベース
個人的によく使っている rsync オプション、いつも忘れちゃうので、メモです。
rsync -rptgoDLkz --delete --no-H [同期元ディレクトリ] [同期先ディレクトリ]
同期元・同期先ディレクトリの書式:リモートサーバーの時
[SSHユーザー名]@[サーバーアドレス]:/ディレクトリ絶対パス
同期元・同期先ディレクトリの書式:サーバー内の場合
/ディレクトリ絶対パス
例:参考例
リモートサーバー example@192.168.1.1
の /var/www/html
から、サーバー内の /var/www/html
に同期させる時
rsync -rptgoDLkz --no-H example@192.168.1.1:/var/www/html/ /var/www/html/
SSH 鍵を使う
SSH 鍵を使って認証する。
さきほどの例では、同期元のリモートサーバーの ~/.ssh/authorized_keys
ファイルに、サーバーの id_rsa.pub キーを設定したと言う前提。
SSH 鍵を任意で設定した場合は rsync コマンドに
-e "ssh -i [キーへのパス]
のオプションを追加する。cd
ディレクトリ指定の注意
最後にスラッシュをつけることで、同期元・同期先のディレクトリを同じにできる。
同期元のディレクトリにスラッシュをつけないと、ディレクトリ自体もコピーされる。
各オプションの説明
自分がなんでそういうオプションを使うのかを理解してから使いましょう。
オプション | 内容 |
---|---|
--recursive, -r | 指定されたディレクトリ以下すべてが対象 |
--perms, -p | 権限を保持 |
--times, -t | ファイルの更新時間を保持 |
--group, -g | 所属グループを保持 |
--owner, -o | ユーザー情報を保持 (sudo のみ) |
-D | スペシャルファイル、デバイスファイルを保持 |
--copy-links, -L | シンボリックリンクなファイルもコピーする |
--copy-dirlinks, -k | シンボリックリンクなディレクトリの中身もコピーする |
--compress, -z | 転送データを圧縮して送信する |
--no-H | ハードリンクを保持しない |
-g や -o は必要に応じて使わない。
あと、時々つかうオプション
オプション | 内容 |
---|---|
--dry-run,n | まず試す |
-v | 詳細を出力する |
--progress | コピー途中のファイルなどを表示してくれるけれどその分処理に時間がかかる |
参考
https://download.samba.org/pub/rsync/rsync.1
https://atmarkit.itmedia.co.jp/ait/articles/1702/03/news020.html
おまけ1: 時間計測のために date コマンドをいれる
本番のデータ移行をする時に、どれだけ同期に時間がかかるか、
事前にテスト実行をして時間を計測したい。そのときに date
コマンドと &&
で rsync の実行コマンドの前後にいれておく
date && rsync [長いコマンド] && date
こうすると、開始前の完了後の日付を echo しておいてくれるので、
どれだけ rsync に時間がかかったかの証跡がとれる。
つまり席を外したり、他ごとしてOK。
おまけ2: SSH の接続が切れてもOKなように noup を使う
同期するファイルの量が多いと、SSH 接続が切れてしまう可能性があるので、
とにかく、SSH 接続が切れても rsync のジョブを続けて実行させたい。
そんな時は nohup コマンドを使う
nohup rsync [長いオプション] &
最後の「&」を忘れない
※ tmux コマンドは入っていないサーバーもあるので、ひとまず nohup