Linuxでファイルやディレクトリをネットワーク経由でリモートにバックアップするときによく利用されるのがrsyncコマンドです。
そこでここではRedHat系Linux(AlmaLinux)を例に、rsyncコマンドを使ってディレクトリをリモートマシンにバックアップ(同期)する方法を解説します。
目次
rsyncコマンドの書式とオプション
書式
rsync [オプション] コピー元 コピー先
オプション
rsyncにはたくさんのオプションが用意されていますが、主なオプションは次のとおりです。
オプション | 説明 |
---|---|
-v | 実行内容を表示する |
-q | 実行状況の表示しない |
-n | 実際には実行せずに、動作内容だけを表示する(試験モード) |
-a | アーカイブモード |
-r | 再帰的にコピーする |
-z | 転送データを圧縮する |
--delete | 削除ファイルを同期 |
rsyncコマンドの使い方
rsyncのインストール
まず、ローカル側(コピー元)とリモート側(コピー先)の双方にrsyncをインストールします。
# dnf install rsync
また、rsyncではデフォルトでリモートマシンへの接続にSSHが使用されるため、リモート側でSSHサーバーが動作していることが前提となりますが、ここでは、SSHを使わずにrsync独自のポート(TCP873番ポート) で接続する方法を紹介したいので、rsyncをサービスとして(daemonモードで)動作させるためのパッケージをリモート側にインストールします。
# dnf install rsync-daemon
ちなみに、rsyncをサービスとして動作させることで、ユーザー認証を省略させたり、コピー元を制限したりといった設定ができます。
rsyncの設定(リモート側)
次に、リモート側でrsyncの設定を追記します。
# vi /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = yes
[backup]
path = /srv/backup ←コピー先のディレクトリ
hosts allow = 192.168.53.12 ←コピー元マシンのIPアドレス
hosts deny = *
list = true
uid = root
gid = root
read only = false
設定を記述したら、バックアップを保存するディレクトリを作成します。
# mkdir /srv/backup
次に、rsyncのサービスを自動起動するよう設定して、ファイアウォールで通信を許可します。
# systemctl enable --now rsyncd
# firewall-cmd --add-service=rsyncd --permanent
# firewall-cmd --reload
なお、SELinuxが有効な環境では、以下の設定も必要になります。
# setsebool -P rsync_full_access on
rsyncでバックアップ
上の設定が完了したら、ローカル側から以下ようにコマンドを実行することで、ローカルの指定したディレクトリ「/home/test/」をリモート側に同期できます。
# rsync -avz --delete /home/test/ 192.168.50.32::backup
コマンドの「::backup」は、設定ファイル「rsyncd.conf」に記述したセクション名です。
なお、コピー元ディレクトリ名を指定する際に、ディレクトリ名の最後にスラッシュ「/」を付けるとディレクトリの中身のみがコピーされ、スラッシュを付けないと、ディレクトリの中身とディレクトリ自体がコピーされます。
ちなみに、デフォルトのSSH接続でコピーするときは、以下のように実行します。
# rsync -avz --delete コピー元ディレクトリ ユーザ名@リモートマシン名:コピー先ディレクトリ
除外ファイルを指定したいときは
一部のファイルやディレクトリをコピー対象から除外したいときは、除外するファイルやディレクトリを記述したファイルを用意します。
# vi /etc/rsync_exclude.lst
# コピー対象から除外したいファイルやディレクトリを相対パスで記述
test
test.txt
あとは、そのファイルを「--exclude-from」オプションで指定して実行します。
# rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /home/test/ 192.168.50.32::backup
ディレクトリを復元したいときは
rsyncでリモートにコピーしたディレクトリをローカルに復元したいときは、rsyncコマンドのコピー元とコピー先を入れ替えて実行することで、簡単に復元できます。
たとえば、上記で実行したコマンドなら、以下のようにコピー元とコピー先を入れ替えて実行することで、リモートにバックアップしたディレクトリをローカルの指定したディレクトリに復元できます。
# rsync -avz 192.168.50.32::backup /home/test/