\r\n\r\n
データの消失が心配、または毎日や毎週のように手動でバックアップを行うのに疲れていませんか?rsyncコマンドを使用すると、手動で操作しなくても、必要に応じて自動的にローカルファイルをリモートサーバーに同期させることができます。このガイドでは、リモートのLinuxサーバー(AWSなど)にアクセスする必要があり、Ubuntu 20.04で書かれていますが、どのLinuxディストリビューションでも問題なく動作することに注意してください。
その前に、rsyncがインストールされていることを確認してください。ローカルPCとWebサーバーで、以下のコマンドを実行してください。
rsync --versionその結果、現在のrsyncのバージョンが返ってくれば、次のセクションに進むことができます。その他、「コマンドが見つからない」エラーが発生した場合は、以下のコマンドでrsyncをインストールすることができます。
sudo apt-get -y install rsyncローカルPCとリモートサーバー間の接続を認証するために、SSHキーを使用することになります。ターミナル内のローカルPCで新しいSSH鍵を生成する場合は、以下のコマンドを実行します。
ssh-keygen -t rsa -b 4096 -f ~/.ssh/rsync.keyパスワードの入力を求められたら、空欄のままEnterキーを2回押してください。これにより、~/.ssh/ ディレクトリに秘密鍵 rsync.key.pub と公開鍵という 2 つの名前の同期鍵が生成されます。
必須ではありませんが、このガイドでは、rsync接続とすべてのバックアップファイルの保存用に、リモートサーバー上に新しいユーザーを作成します。リモートサーバーにSSHでログインし、以下のコマンドを実行します。
sudo useradd -m rsync上記の例では、ユーザー名rsyncを使用していますが、好きなものに変更できます。mオプションは、Linuxに新しいユーザーのホームディレクトリを作成するように指示するだけです。
ローカルPCを認証させるためには、前項で生成した公開SSH鍵をリモートサーバーにコピーする必要があります。テキストエディタファイルで /~.ssh/rsync.key.pub を開くと、次のような大きな行が表示されます。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNhyYKsjcGGdXmzOM3742+c+TzMLFdZtrMPj1q6JWNWzgY/gTGVy1C72kw6BcTYSG8B8kLQlaBRl16m2Gm8Ra/U1wl0TYSufOnRKjGq2glnBPysWNzR6i9qd4h/byKa4ptNH/ieYkT+BnSJVo8fT0iboYwEaL9D0jPtYxFzZes2ctsGZ/zi78VlX9N224YBtoZcrxK6gzKtcIVrplsXt4MbMCPc0hfr9f2VMt0HignLphTDLQWKwF3sGi4OHDPzNTRkjyHazsIOFIKDLQgdsIJv7b2VMs028YDqPnXHZZl4Ix5vg8ssqE+s/J+rzS0B6gwj2b/f6vJMI9DmTk8SO5LKWtSl4lXjLpQ1eP+xjf3SeMFWWkk2tPpGBo6d+8VJT6htj9Ga927qx3bYJ3FDdqjoE/28yBzMsg3wKI8lobiQGIbF0B0jZmSeq42ds7dh76iU/LOraWJWJhKPIjCYHdaVqj5rgxSulUW6oqr/LOxMNwsj5NLpyKygr5/RVjCUpxQLw5G7AClmW5nOZDFUgtI1CAOzhG8oYQes7jE7ZbQKmMf9IGquNV1BCRGX2mbcYad77UE2IjzPqSG8pFGb7ekZA6ukUk61fqoheL4Zl2jmhhWoXQ09LZE9FNfr1UwIoZ+GwUcip8NPIZPSo+Z4yMB/5VNF7J0o76eTNwh0gZlEw== user@hostこの長い行が公開SSH鍵です。これをクリップボードにコピーし、リモートサーバーで以下のコマンドを実行します。
sudo su rsync mkdir -m 0700 $HOME/.ssh echo "ssh-rsa AAAAB... user@host" > $HOME/.ssh/authorized_keys chmod 0644 $HOME/.ssh/authorized_keys最後の2番目のコマンドで、反転したカンマの間のテキストを、長い公開SSH鍵の行に置き換えます。以上で、ローカルPCがリモートサーバー経由で認証されるようになりました。
シンプルにするために、ローカルPCの ~/.ssh/config ファイルにエントリを追加して、リモートサーバーに簡単に接続できるようにします。ローカルPCのファイルをコマンドで開く
nano $HOME/.ssh/configファイル内にリモートサーバーのエントリーを追加します。
host backup_server hostname 192.168.0.24 user rsync IdentityFile ~/.ssh/rsyncホスト名をリモートサーバーのIPアドレスに変更します。"rsync "以外のユーザー名を使用している場合は、その名前も変更します。ホストは何でも良いのですが、今回は「backupu server」を使用します。Ctrl+Xを押しながら、"Y "とEnterキーを押して保存し、ファイルを閉じます。
リモートサーバーへのSSH接続をテストするには、このコマンドを使用します。
ssh backup_serverすべての設定が正しいと仮定して、リモートサーバーにSSHでログインしてください。
exitさて、rsync機能を試すために、例えばローカルPC上の文書ディレクトリを同期させるために、以下のコマンドを実行します。
rsync -avz --progress ~/Documents/ backup_server:~/Documents最初の ~/Documents/ は同期するローカルファイルやディレクトリを指定し、backupu サーバは ~/.ssh/config ファイルに追加されたエントリに対応し、end: ~/Documents は単にすべてのコンテンツがホームディレクトリからリモートサーバの /Documents ディレクトリにアップロードされることを指定するだけです。
リモートサーバーにログオンすると、ローカルPCと同期された新しいドキュメントディレクトリが表示されます。上記のコマンドを実行するたびに、前回以降に変更されたファイルだけがアップロードされるので、常にディレクトリの中身を全部アップロードするわけではありません。
これですべてのテストが終わり、正常に動作するようになったので、ローカルPCにcrontabジョブを追加することで、簡単にすべてのプロセスを自動化することができます。15分ごとにローカルフォルダをリモートサーバーに自動的に同期させるには、ターミナル内から次のコマンドを実行します。
(crontab -l; echo "*/15 * * * * rsync -avz --progress ~/Documents/ backup_server:~/Documents > /dev/null 2>&1";) | crontabno crontab for user "というメッセージが表示されるかもしれませんが、これは無視してもかまいません。Documentsディレクトリをバックアップしたいディレクトリに変更します。ただし、ディレクトリを表すスラッシュを残しておかないと、**正確に**バックアップされないので注意してください。
コマンドでcrontabジョブが正常に追加されたことを確認します。
crontab -l先ほど追加したcrontabジョブが表示されれば、すべての準備が整ったことになります。15分ほど待って、リモートサーバーを確認すると、必要なファイルがすべて揃っているはずです。これ以降、ファイルに加えられたすべての変更は、15分ごとにリモートサーバーに自動的にアップロードされます。
また、rsync を使って、リモートサーバーからファイルをダウンロードし、ローカル PC に同期させることもできます。上記の /Documents ディレクトリの例で、ターミナルで次のコマンドを実行します。
rsync -chavzP backup_server:~/Documents/ ~/DocumentsローカルPCの~./Documentsディレクトリは、リモートサーバーのイメージになっているはずです。
end with.htmlのような特定のパターンにマッチするファイルのみを同期させる必要がある場合は、--includeパターンを使用することができます。ターミナルでコマンドを実行します。
rsync -avz --include "*.html" --progress ~/mysite/ backup_server:~/public_htmlリモートサーバーを確認すると、ローカルの/mysite/ディレクトリにある拡張子が.htmlのファイルだけが/publicu html/remoteディレクトリにアップロードされていることが確認できます。同様に、--excludeオプションを使用すると、特定のファイル以外を同期させることができます。例えば、次のコマンドを実行すると、拡張子が.txtのファイルを除くすべてのファイルが同期されます。
rsync -avz --exclude "*.txt" --progress ~/mysite/ backup_server:~/public_html必要であれば、2つのローカル・ディレクトリを同期させるために、以下のコマンドを使用することもできます。
rsync -zvr ~/source/directory ~/destination/directoryこのコマンドは、リモートサーバーに同期するときとまったく同じように動作しますが、唯一の違いは、2つのローカルディレクトリを持つことです。
これで、データ消失の可能性は大幅に減少し、安堵のため息をつくことができます。この記事では、rsyncとは何か、SSH鍵を生成してインストールする方法、~でサーバーを定義する方法について学びます。/.SSH/configファイル、ローカルとリモートのディレクトリを同期させる方法、crontabで全処理を自動化する方法などがあります。今後、必要なファイルは常に15分程度の遅れでリモートサーバーと同期されるようになります。