はじめに
rsyncコマンドを実務で使用することになったため、
rsyncコマンドを使用して/homeディレクトリをデータ移行してみました。
※この記事は移行元(旧サーバ) 移行先(新サーバ)と記載しております。
rsyncとcpの違い
rsyncは、旧サーバから新サーバへデータを移行する際によく使用されるコマンドです。
cp コマンドを使用する場合、コピーするフォルダ名やファイル名を明示的に指定する必要があり、すべてのデータがコピーされます。一方、rsync は変更があった部分のみをコピーするため、大量のデータを扱う際には rsync の方が効率的です。
前提条件
AWS EC2 2台を構築済み
注意点:OSが異なる場合のrsyncによるデータ移行
旧サーバと新サーバでOSが異なる場合、rsyncを使用してミドルウェアの設定ファイルや/etcフォルダを移行元と完全に一致させると、必要な設定ファイルが新サーバから削除されてしまい、サービスが正常に起動しない可能性があります。上記の場合は完全一致のrsyncはしないようにする。
/homeディレクトリを移行
事前準備
新サーバーで作業 ユーザ登録
ユーザー登録については、/home ディレクトリを移行する前に、旧サーバと同じユーザーを新サーバにも登録します。旧サーバにあるユーザを新サーバに登録する。
以下は例です。
$ sudo su -
# useradd test1
# useradd test2
新サーバーで作業 事前にアーカイブを取得
デフォルトユーザ(ec2-userとssm-userのフォルダ)が消えない様にアーカイブを取得する
データ同期する際は事前にアーカイブを取得することで消えてしまったファイルを復元可能です。
tarコマンドは絶対パスについて自動的に削除されて相対パスとしてアーカイブしてくれます。
念のため、-Cオプションを付ける事でより安全になります。
絶対パスでアーカイブされた場合は、tarコマンドを解凍後、実フォルダ/homeが上書きされてしまいます。
$ sudo su -
# tar cvzf /root/home_20250208.tar.gz -C / home
以下の記事を参考にさせていただきました。
アーカイブできていることを確認する。
[root@ip-10-0-15-148 ~]# tar tvf home_20250208.tar.gz
drwxr-xr-x root/root 0 2025-02-24 14:14 home/
drwx------ ec2-user/ec2-user 0 2025-02-24 13:52 home/ec2-user/
-rw-r--r-- ec2-user/ec2-user 18 2023-01-28 22:29 home/ec2-user/.bash_logout
-rw-r--r-- ec2-user/ec2-user 141 2023-01-28 22:29 home/ec2-user/.bash_profile
-rw-r--r-- ec2-user/ec2-user 492 2023-01-28 22:29 home/ec2-user/.bashrc
drwx------ ec2-user/ec2-user 0 2025-02-24 13:52 home/ec2-user/.ssh/
-rw------- ec2-user/ec2-user 104 2025-02-24 13:52 home/ec2-user/.ssh/authorized_keys
drwx------ test1/test1 0 2025-02-24 14:14 home/test1/
-rw-r--r-- test1/test1 18 2023-01-28 22:29 home/test1/.bash_logout
-rw-r--r-- test1/test1 141 2023-01-28 22:29 home/test1/.bash_profile
-rw-r--r-- test1/test1 492 2023-01-28 22:29 home/test1/.bashrc
drwx------ test2/test2 0 2025-02-24 14:14 home/test2/
-rw-r--r-- test2/test2 18 2023-01-28 22:29 home/test2/.bash_logout
-rw-r--r-- test2/test2 141 2023-01-28 22:29 home/test2/.bash_profile
-rw-r--r-- test2/test2 492 2023-01-28 22:29 home/test2/.bashrc
[root@ip-10-0-15-148 ~]#
※おまけ nginxでtarコマンドを実行する場合
# tar cvzf /root/nginx.tar.gz -C /etc nginx
新サーバーで作業 rootユーザでログイン設定
rsyncコマンドについて新サーバのrootユーザにSSH接続して実行します。
一般ユーザの場合は権限不足でrsyncが途中で失敗したことがあります。
この記事ではrootユーザはec2-userと同じ秘密鍵でSSH接続する設定をします。
ec2-user の秘密鍵を使用できるようにするため、root のホームディレクトリに ec2-user の公開鍵を登録します。
# cat ~ec2-user/.ssh/authorized_keys >> authorized_keys
rootユーザで接続許可を設定する
# cat sshd_config | grep -v ^$ | grep -i root
#PermitRootLogin prohibit-password
PermitRootLogin yes ←ここの設定をする
# the setting of "PermitRootLogin without-password".
#ChrootDirectory none
旧サーバーで作業 SSH接続確認
旧サーバにてrootに昇格後、
/rootフォルダに移動して.sshフォルダに新サーバの秘密鍵を格納します。
rootに昇格する
$ sudo su -
# ssh -i 秘密鍵.pem" root@<新サーバのプライベートIPアドレス>
新サーバで作業 authorized_keysを修正
SSH接続したら「Please login as the user "ec2-user" rather than the user "root".」が出力して
失敗します。
新サーバのauthorized_keysを修正する必要があります。
以下の記事が参考になりました。
https://qiita.com/xusaku_/items/9f80f7b27c94ab237b46
移行元(旧サーバ)の/homeを移行先(新サーバ)にrsyncする
rsyncコマンドは以下になります。
https://atmarkit.itmedia.co.jp/ait/articles/1702/02/news031.html
rsyncコマンド オプション 移行元 移行先
旧サーバ(移行元)のサーバにSSH接続する
$ ssh -i 秘密鍵.pem" ec2-user@旧サーバのIPアドレス
旧サーバから新サーバに/homeディレクトリを移行
注意 必ず移行先(新サーバ)のIPアドレスであることを確認する
# rsync -avz --delete -e "ssh -i /root/.ssh/新サーバの秘密鍵.pem" /home/ root@<新サーバのプライベートIPアドレス>:/home/
※--delete オプションは完全一致させるため、移行元にないフォルダや設定ファイルは削除されるため、
ミドルウェアの設定ファイルの移行の場合は--deleteをつけないことをお勧めします。
注意 rsync で /home ディレクトリを指定する際、意図しない場所にフォルダが作成されるのを防ぐために、必ず /home/ のように末尾にスラッシュ / を付けて記載してください。
新サーバーで作業
アーカイブファイルを復元しました。
#cd /root
# tar xvzf /root/home_20250208.tar.gz
cd /root/homeに展開されました。
移行前のec2-userの設定ファイルを完全に/home/ec2-userに同期させる。
# rsync -avz --delete /root/home/ec2-user/ /home/ec2-user/
sending incremental file list
ec2-user/
ec2-user/.bash_history
ec2-user/.bash_logout
ec2-user/.bash_profile
ec2-user/.bashrc
ec2-user/.ssh/
ec2-user/.ssh/authorized_keys
sent 938 bytes received 127 bytes 2,130.00 bytes/sec
total size is 784 speedup is 0.74
まとめ
rsync コマンドを使用する際、移行元と移行先を誤ると重大な事故につながる可能性があります。
そのため、まずは移行元のサーバーにSSH接続し、rsync コマンドの移行先が正しく設定されていることを確認してください。
また、すべての設定ファイルをそのまま移行すればよいわけではありません。
必要なファイルを適宜選別しながら移行することが重要です。
さらに、rsync コマンドを実行する前に、誤って重要なファイルを消してしまうリスクを考慮し、
復元用の tar アーカイブを取得しておくことをおすすめします。