0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rsyncコマンドを使用して/homeディレクトリをデータ移行してみた

Last updated at Posted at 2025-02-08

はじめに

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 アーカイブを取得しておくことをおすすめします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?