twitter icon   twitter icon   rss icon

Linux.com Japan

Home Linux Jp チュートリアル Rsyncを使ってファイルのバックアップをとる

Rsyncを使ってファイルのバックアップをとる

原文は 2015 年 6 月 24 日に掲載されました。
 
rsync cron
 
現実の世界と比べて、デジタルの世界では大事なものを守ることが容易です。私の友人には、写真、本、各種ドキュメントを火事や洪水で無くした人がいます。これらのデジタル版を持っていれば、失わずに済んだと思います。データの保護は 1 クリックでできますし、財布より小さなテラバイト級のハード ドライブもあります。
 

クラウドではないのか

この話を書くために、たくさんの人に彼らのバックアップ方法について聞きました。何人かはパブリック クラウドをバックアップ方法の 1 番目としていました。 私は、パブリックもしくは第三者のクラウドは、バックアップの 1 番目として考えていません。理由はいくつかありますが、その 1 番として、私は、3 テラバイトのデータを保有しており、その量のクラウド ストレージは非常に高価です。Google ドライブの場合、1 テラバイトで年間 $120、もしくは 10 テラバイトで月 $100 支払う必要があります。それだけではありません。データにアクセスするために、大量のバンド幅を必要とし、ISP から睨まれてしまいます。
 
最大の問題は、支払いを怠るとデータを失うということです。パブリック クラウドだけの問題ではありません。そのようなサービスを利用すると、さまざまな法律に関連してきますし、また政府機関にアクセスされることがあります。サービス提供者はデータにアクセスし、さまざまな理由を付けて、データにアクセスできないようにします。たとえば、曖昧な著作権侵害などです。
 
ownCloud や Seafile のようなプライベート クラウドは、1 つの解となりますが、データがあなたのネットワークから外に見えるようになることを意味します。やはり、バンド幅の消費とストレージ コストの上昇を意味します。
 
私もプライベート クラウドを利用していますが、外からアクセスする必要のあるデータや、友人と共有したいデータに限っています。バックアップとしては利用していません。
 

冷静に、そしてローカルに

4 テラバイトのハード ドライブを $160 以下で購入できます。そして、3、4 年使えます。データ アクセスにバンド幅を気にする必要もないし、参照できなくなることもありません。
 
データをローカルに保持し、自分の制御下に置くと決めたら、1 バイトたりとも失くさないようにしなければなりません。最初にバックアップを作成し、定期的にバックアップを作成するシステムを構築します。
 
さまざまな GUI ツールがあります。大半のディストリビューションは、そのいくつかを含んでいます。しかし、私はファイル サーバーをディスプレイなしで運用しているので、コマンド ラインのツールを使っています。ここでは、それについて説明します。
 
できるだけ単純にしたいので、'rsync' を利用します。
 

rsync とは何か

rsync は 'remote sync' の略語で、Andrew Tridgell と Paul Mackerrrans が 1996 年から開発しています。UNIX で良く使われているツールの 1 つで、データの同期を行います。ほとんどの Linux ディストリビューションでは、rsync は標準となっています。もしインストールされていなかったら、'rsync' パッケージをインストールしてください。
 
rsync は非常に強力なツールで、ファイルのコピー以上のことができます。1 台の PC の異なるディレクトリ間の同期を行ったり、異なる 2 台の PC 上のディレクトリの同期を行ったり、インターネット経由でマシン間の同期をとったりすることができます。
 
オプションを指定することで、さまざまな機能を拡張できます。ここで、その説明を行います。
 
基本的な形式は、以下のとおりです。
rsync option source-directory destination-directory

ハード ドライブ 1 に /media/hdd1/data-1 デイレクトリがあり、それを /media/hdd2 にマウントした新しいハード ドライブにコピーする場合を考えます。

以下のコマンドは、新しいハード ドライブに data-1 ディレクトリを作成し、内容をコピーします。
rsync -r /media/hdd1/data-1 /media/hdd2/

'-r' オプションは、再帰的にすべてのディレクトリの内容をコピーします。

 一旦 hdd2 上に data-1 ディレクトリを作成したら、以下のようにして、ディレクトリ間の同期をとります。
rsync -r /media/hdd1/data-1/ /media/hdd2/data-1/

最後のスラッシュを忘れると、rsync は送り先のディレクトリの下に新しくディレクトリを作成します。

送り先のディレクトリ下に新しくディレクトリを作成し、送り元デイレクトリと同期させることもできます。新しいハード ドライブに data-2 ディレクトリを作成し、両者を同期させる場合は、以下のようにします。
rsync -r /media/hdd1/data-1/ /media/hdd2/data-2/

data-2 ディレクトリ内に、data-1 ディレクトリ内のファイルの完全なコピーを作成します。

もし、ファイルの所有者に関して異なる権限を持つシンボリック リンクがあり、そのままコピーしたい場合は、どうしたらよいでしょうか。'-a' オプションを利用してください。このオプションは、所有者、権限、グループその他を保持します。
 
 これで、同期された 2 つのデイレクトリができました。送り元デイレクトリからファイルを消したとします。いつもすることです。送り先ディレクトリから該当するファイルを消すためには、'--delete' オプションを指定します。コマンドは次のようになります。
rsync -a --delete /media/hdd1/data-1/ /media/hdd2/data-2/

進捗を見たいときは、'-v' オプションを付けます。

rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/

転送時にファイルを圧縮するとバンド幅の節約になり、転送時間も短くなります。デバイスの転送速度が遅い場合は、圧縮するとよいでしょう。

rsync -avz --delete /media/hdd1/data-1/ /media/hdd2/data-2/

'-P' オプションを使用すると並列処理を行います。

rsync -avzP --delete /media/hdd1/data-1/ /media/hdd2/data-2/
 

ネットワークで接続されたマシン間の場合

以前の文献で書いたように、自宅でファイル サーバーを構築し、各デバイスでマウントして使っています。各マシンには、データを置いていません。サーバーのプライマリ ハード ドライブのデータを使って仕事をしています。つまりデータは常に最新で、どのマシンからでも使用することができるのです。マシン間でコピーする必要はありません。
 セカンド ドライブ (バックアップ ドライブ) は、マウントしません。もしそれをマウントし、そのファイルを使うと、事態が複雑なものになってしまいます。rsync コマンドを実行すると、プライマリ ハード ドライブの内容と同期されてしまうからです。rsync コマンドは、この問題を解決するトリッキーなオプションを持っています。'-u' オプションを使うと、送り元ファイルより修正時刻が新しいファイルについては、更新しません。
 

ネットワーク経由でディレクトリを同期する

ssh プロトコルをサポートしています。以下のようにして、リモートのディレクトリをローカルのディレクトリに同期させています。
rsync -avzP --delete -e ssh user@server_IP:source-directory /destination_directory_on_local_machine/

例です。

rsync -avzP --delete -e ssh 
 
 このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にしてください
 :/home/swapnil/backup/ /media/internal/local_backup/

 ローカル ディレクトリをリモート ディレクトリと同期させる時は、次のようにします。

rsync -avzP --delete -e ssh source_directory user@server_IP:path_destination_directory

例です。

rsync -avzP --delete -e ssh /home/swapnil/Downloads/ 
 
 このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にしてください
 :/home/swapnil/Downloads/
 

バックアップの自動化

バックアップを自動化し、記憶に頼らないようにします。手帳に書いておくより簡単です。
 
私は、単純明解なことが好きなので、新しい利用者にも、Linux でこれらが簡単にできることをお見せしたいと思います。私は 'crontab' を利用しています。簡単で、軽いシステムでジョブを実行します。crontab を使うと、毎日、毎週、毎月、毎日複数回 (実際には、しませんが)、rsync コマンドを実行できます。私は、仕事の後にすべてのファイルを同期させるコマンドを毎日午後 11:30 に実行しています。
 
ディストリビューションによっては、crontab パッケージをインストールする必要があるかもしれません。たとえば、Arch Linux では、'cronie' をインストールします。crontab 用にエディタを選択します。私は 'nano' を使っています。変更する場合は以下のようにします。
export EDITOR=nano

'crontab -e' コマンドを使ってジョブを生成します。ある時刻に実行させたいコマンドを記入します (上図)。

crontab の形式は簡単です。5 つの欄とそれに続くコマンド行からなります。
m h dm m dw command

それぞれ、'm' は分 (0-59)、'h' は時刻 (0-23)、'dm' は日付 (1-31)、'm' は月 (1-12)、そして 'dw' は曜日 (0-6、0 が日曜日) を意味します。数値で指定し、不要な欄には '*' を指定します。

私は毎日午後 11:30 にコマンドを実行するため、以下のように指定しています。
30 23 * * * rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/

月に 1 度だけ rsync を実行する場合は、以下のようにします。

30 23 1 * * rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/

これで、毎月 1 日の午後 11:30 に実行されます。毎月でなく、半年ごとに実行することもできます。

30 23 1 6 * rsync -av --delete /media/hdd1/data-1/ /media/hdd2/data-2/

この場合、毎年 6 月 1 日に実行されます。複数コマンドを実行する場合は、新しい行を作成します。'crontab' で使えるコマンドは 'rsync' だけではありません。あらゆるコマンドが使用可能です。

rsync と crontab の両ツールは簡単で軽量ですが、非常に強力で、さまざまな設定ができます。Linux は複雑ではありません。
 

1 つのコピーをリモートにおく

ローカルにデータを置くことの危険性に、火災、洪水等の自然災害があります。ローカル システムが損傷し、データを失う可能性があります。どこか違う場所にデータのコピーを 1 つ用意しておきましょう。私は、義理の両親の家に置いています。つまり、'Server in Law' (訳注:実家サーバー?) です。
 
ISP が固定 IP を許可していないため、両マシン間で ssh によるデータ同期はできません。TeamViewer と SSH トンネルが使えます。'Server in Law' にログインし、一時的な ssh トンネルを開けて、ファイルを同期します。
 

バックアップしあう友人が本当の友人

私の友人たちは、バックアップ サーバーのプールを作成しています。各々の自宅でハード ドライブを保有して、お互いにデータを分散保持するというものです。もし、友人にも見られたくない本当に個人的なファイルについては暗号化しています。
Linux Foundationメンバーシップ

30人のカーネル開発者

人気コンテンツ

  1. Today's Linux 2018/10/10 2018年 10月 09日
  2. Today's Linux 2018/10/12 2018年 10月 11日
  3. Today's Linux 2018/10/17 2018年 10月 16日
  4. Today's Linux 2018/10/18 2018年 10月 17日
  5. Today's Linux 2018/10/19 2018年 10月 18日

Linux Foundationについて

Linux Foundation はLinux の普及,保護,標準化を進めるためにオープンソース コミュニティに資源とサービスを提供しています

 

The Linux Foundation Japan

サイトマップ

問い合わせ先

サイトに関するお問い合わせはこちらまで

Linux Foundation Japan

Linux Foundation

Linux Training

提案、要望

Linux.com JAPANでは広く皆様の提案、要望、投稿を受け付ける予定です。

乞うご期待!