\r\n\r\n

rsyncを使ったリモートサーバーへのファイルの自動バックアップ

rsyncバックアップを使用すると、ローカルファイルを自己管理するための強力な方法です。

データの消失が心配、または毎日や毎週のように手動でバックアップを行うのに疲れていませんか?rsyncコマンドを使用すると、手動で操作しなくても、必要に応じて自動的にローカルファイルをリモートサーバーに同期させることができます。このガイドでは、リモートのLinuxサーバー(AWSなど)にアクセスする必要があり、Ubuntu 20.04で書かれていますが、どのLinuxディストリビューションでも問題なく動作することに注意してください。

rsyncのインストール

その前に、rsyncがインストールされていることを確認してください。ローカルPCとWebサーバーで、以下のコマンドを実行してください。

rsync --version

その結果、現在のrsyncのバージョンが返ってくれば、次のセクションに進むことができます。その他、「コマンドが見つからない」エラーが発生した場合は、以下のコマンドでrsyncをインストールすることができます。

sudo apt-get -y install rsync

sshキーの生成

ローカル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がリモートサーバー経由で認証されるようになりました。

ssh設定ファイルの設定

シンプルにするために、ローカル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と同期された新しいドキュメントディレクトリが表示されます。上記のコマンドを実行するたびに、前回以降に変更されたファイルだけがアップロードされるので、常にディレクトリの中身を全部アップロードするわけではありません。

crontabによる自動化

これですべてのテストが終わり、正常に動作するようになったので、ローカルPCにcrontabジョブを追加することで、簡単にすべてのプロセスを自動化することができます。15分ごとにローカルフォルダをリモートサーバーに自動的に同期させるには、ターミナル内から次のコマンドを実行します。

(crontab -l; echo "*/15 * * * * rsync -avz --progress ~/Documents/ backup_server:~/Documents > /dev/null 2>&1";) | crontab

no 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つのローカルディレクトリを同期させる

必要であれば、2つのローカル・ディレクトリを同期させるために、以下のコマンドを使用することもできます。

rsync -zvr ~/source/directory ~/destination/directory

このコマンドは、リモートサーバーに同期するときとまったく同じように動作しますが、唯一の違いは、2つのローカルディレクトリを持つことです。

リラクゼーション

これで、データ消失の可能性は大幅に減少し、安堵のため息をつくことができます。この記事では、rsyncとは何か、SSH鍵を生成してインストールする方法、~でサーバーを定義する方法について学びます。/.SSH/configファイル、ローカルとリモートのディレクトリを同期させる方法、crontabで全処理を自動化する方法などがあります。今後、必要なファイルは常に15分程度の遅れでリモートサーバーと同期されるようになります。

  • 2021-03-28 09:36 に公開
  • 閲覧 ( 47 )
  • 分類:IT

あなたが興味を持っているかもしれない記事

匿名者
匿名者

0 件の投稿

作家リスト

  1. admin 0 投稿
  2. 匿名者 0 投稿

おすすめ