ホームページ » の仕方 » Rsyncとデータを同期させるための初心者向けガイド

    Rsyncとデータを同期させるための初心者向けガイド

    rsyncプロトコルは通常のバックアップ/同期ジョブに使用するのは非常に簡単ですが、より高度な機能のいくつかはあなたを驚かせるかもしれません。この記事では、最大のデータ保持者とバックアップ愛好家でさえ、どのようにしてrsyncをすべてのデータ冗長性ニーズに対する単一のソリューションとして活用できるかを示します。.

    警告:上級オタクのみ

    「rsyncとは一体何なのか」、「rsyncは非常に単純な作業にのみ使用する」と考えている場合は、rsyncを使用してLinuxにデータをバックアップする方法に関する前回の記事を参照してください。 rsyncの紹介、インストールのガイド、そしてより基本的な機能の紹介。 rsyncの使い方(正直なところ、それほど複雑ではありません)をしっかり理解し、Linux端末に慣れたら、この高度なガイドに進む準備ができました。.

    Windowsでrsyncを実行する

    まず、Windowsの読者をLinuxの教祖と同じページに表示しましょう。 rsyncはUnixライクなシステム上で動作するように構築されていますが、Windows上で同じくらい簡単に使用できないはずがないという理由はありません。 Cygwinは、rsyncを実行するために使用できる素晴らしいLinux APIを作成しています。そこで、自分のWebサイトにアクセスして、お使いのコンピュータに応じて32ビット版または64ビット版をダウンロードしてください。.

    インストールは簡単です。 「パッケージの選択」画面が表示されるまで、すべてのオプションをデフォルト値のままにしておくことができます。.

    今、あなたはVimとSSHのために同じステップをする必要があります、しかしあなたがそれらを選ぶことになるとき、パッケージは少し異なって見えるようになるでしょう、それでここにいくつかのスクリーンショットがあります:

    Vimのインストール

    SSHのインストール

    これら3つのパッケージを選択したら、インストールが完了するまで[次へ]をクリックし続けます。その後、インストーラがデスクトップに置いたアイコンをクリックしてCygwinを開くことができます。.

    rsyncコマンド:簡単なものから高度なものまで

    Windowsユーザーは同じページにいるので、単純なrsyncコマンドを見て、いくつかの高度なスイッチを使用すると素早く複雑になることを説明しましょう。.

    バックアップが必要なファイルがたくさんあるとしましょう - 最近はだれですか?コンピュータのファイルをバックアップできるようにポータブルハードドライブを接続し、次のコマンドを発行します。

    rsync -a / home / geek / files / / mnt / usb / files /

    または、Cygwinを搭載したWindowsコンピュータでの見方です。

    rsync -a / cygdrive / c /ファイル/ / cygdrive / e /ファイル/

    非常に単純で、その時点ではファイルをドラッグアンドドロップするだけなので、rsyncを使用する必要はまったくありません。ただし、他のハードドライブにすでにファイルがいくつかあり、更新されたバージョンと前回の同期以降に作成されたファイルだけが必要な場合は、新しいデータをハードドライブに送信するだけなのでこのコマンドは便利です。大きなファイル、特にインターネットを介したファイル転送では、それは大したことです。.

    ファイルを外付けハードドライブにバックアップしてからハードドライブをコンピュータと同じ場所に保持することは非常に悪い考えです。そこで、インターネット経由でファイルを別のコンピュータに送信するために何が必要かを見てみましょう。貸した人、家族の人など).

    rsync -av --delete -e 'ssh -p 12345' / home / geek / files / [email protected]:/ home / geek2 / files /

    上記のコマンドはあなたのファイルを10.1.1.1のIPアドレスを持つ別のコンピュータに送信します。転送元のディレクトリにはもう存在しない余分なファイルを転送先から削除し、転送されているファイル名を出力するので、何が起こっているのかがわかり、SSH経由でrsyncをポート12345でトンネリングできます。.

    -a -v -e --delete スイッチは最も基本的で一般的に使用されているものです。あなたがこのチュートリアルを読んでいるなら、あなたはすでにそれらについて多くのことを知っているべきです。無視されても信じられないほど便利な他のスイッチについて見てみましょう。

    --進捗 - このスイッチにより、各ファイルの転送の進行状況を確認できます。インターネットを介して大きなファイルを転送する場合は特に便利ですが、高速ネットワークを介して小さなファイルを転送するだけの場合は、無意味な量の情報が出力される可能性があります。.

    rsyncコマンドと --進捗 バックアップの進行中に切り替えます。

    --部分的 - これは、インターネット経由で大きなファイルを転送するときに特に便利なもう1つのスイッチです。ファイル転送の途中で何らかの理由でrsyncが中断された場合、部分的に転送されたファイルは転送先ディレクトリに保存され、rsyncコマンドが再度実行されると中断されたところから転送が再開されます。大きなファイルをインターネット経由で転送する場合(数ギガバイトなど)、ファイル転送に数秒間のインターネットの停止、ブルースクリーン、または人的エラーが発生して最初からやり直す必要がある場合よりもさらに悪いことはありません。.

    -P - このスイッチは兼ね備えています --進捗 そして --部分的, だから代わりにそれを使用し、それはあなたのrsyncコマンドが少しきれいになります.

    -z または --圧縮する - このスイッチはrsyncが転送中のファイルデータを圧縮するようにし、転送先に送信しなければならないデータ量を減らします。それは実際にはかなり一般的なスイッチですが、本質的なものとはほど遠いもので、遅い接続間の転送ではあなたに利益をもたらすだけです。そして、それは次の種類のファイルに対しては何もしません:7z、avi、bz2、deb、g mov、mp3、mp4、ogg、rpm、tbz、tgz、z、zip.

    -時間 または --人間が読める - あなたが使用している場合 --進捗 切り替えて、あなたも間違いなくこれを使用したいと思うでしょう。あなたがその場でバイトをメガバイトに変換したくなければそれは、です。の -時間 switchはすべての出力された数字を人間が読める形式に変換するので、実際に転送されるデータ量を理解することができます。.

    -n または --空運転 - このスイッチは、あなたがrsyncスクリプトを最初に書いてそれをテストするときを知るのに不可欠です。試しに実行しますが、実際には何も変更しません。変更は通常どおりに出力されるので、スクリプトを本番環境に移行する前に、すべてを読んで問題ないことを確認できます。.

    -R または --相対 - 宛先ディレクトリがまだ存在しない場合は、このスイッチを使用する必要があります。このガイドの後半でこのオプションを使用して、フォルダ名にタイムスタンプを付けてターゲットマシン上にディレクトリを作成できるようにします。.

    --からの除外 - このスイッチは、バックアップしたくないディレクトリパスを含む除外リストにリンクするために使用されます。各行にディレクトリまたはファイルパスを含むプレーンテキストファイルが必要です。.

    --包含元 - に似ている --からの除外, しかしそれはあなたがバックアップしたいデータのディレクトリとファイルパスを含むファイルにリンクします.

    --統計 - 実際には重要な切り替えではありませんが、システム管理者であれば、各バックアップの詳細な統計情報を知っておくと便利な場合があるので、ネットワーク上で送信されているトラフィック量などを監視できます。.

    --ログファイル - これにより、rsyncの出力をログファイルに送信できます。自動バックアップの場合は絶対にお勧めします。自動バックアップでは、出力を自分で確認することはできません。すべてが正常に機能していることを確認するために、常に空き時間にログファイルを1回渡してください。また、システム管理者が使用するのは非常に重要なスイッチなので、インターンを去っている間にバックアップがどのように失敗したのか疑問に思うことは残りません。.

    いくつかスイッチが追加されたので、rsyncコマンドを見てみましょう。

    rsync -avzhP --delete --stats --log-file = / home / geek / rsynclogs / backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]:/ home / geek2 / files /

    コマンドはまだかなり単純ですが、私たちはまだまともなバックアップソリューションを作成していません。私たちのファイルは現在2つの異なる物理的な場所にありますが、このバックアップはデータ損失の主な原因の1つから私たちを守るものではありません。.

    スナップショットバックアップ

    誤ってファイルを削除した場合、ウイルスによってファイルが破損した場合、またはファイルが不適切に変更された後にrsyncバックアップスクリプトを実行した場合、バックアップされたデータは望ましくない変更で上書きされます。そのようなことが発生したとき(そうではないとき)、あなたのバックアップソリューションはあなたのデータ損失からあなたを守るために何もしませんでした.

    rsyncの作成者はこれを認識して、 --バックアップ そして --バックアップディレクトリ ユーザーが差分バックアップを実行できるようにするための引数。 rsyncのWebサイトの最初の例は、7日ごとにフルバックアップが実行され、その後それらのファイルに対する変更が毎日別々のディレクトリにバックアップされるというスクリプトを示しています。この方法の問題点は、あなたのファイルを回復するためには、効果的にそれらを7回回復しなければならないということです。さらに、ほとんどのオタクは1日に数回バックアップを実行しているので、いつでも20以上の異なるバックアップディレクトリを簡単に持つことができます。ファイルを復元するのは面倒なだけでなく、バ​​ックアップされたデータを調べるだけでも非常に時間がかかる場合があります。最新のバックアップコピーを見つけるには、ファイルが最後に変更された時刻を知る必要があります。それに加えて、毎週(場合によってはもっと少ない)増分バックアップを実行するのは非効率的です。.

    バックアップをスナップショットで救いましょう。スナップショットバックアップは増分バックアップにすぎませんが、ハードリンクを利用して元のソースのファイル構造を保持します。最初は頭を包むのが難しいかもしれませんので、例を見てみましょう。.

    2時間ごとにデータを自動的にバックアップするバックアップスクリプトが実行されているとします。 rsyncはこれを行うたびに、各バックアップに次の形式で名前を付けます。Backup-month-day-year-time.

    それで、典型的な日の終わりに、私達はこのような私達の行き先ディレクトリにフォルダーのリストがあるでしょう:

    これらのディレクトリのいずれかを横断すると、その時点でのソースディレクトリのすべてのファイルが正確に表示されます。それでも、どの2つのディレクトリにも重複はありません。 rsyncは、これを介してハードリンクを使用してこれを実現します。 --link-dest = DIR 引数.

    もちろん、これらのきれいで綺麗なディレクトリ名をつけるためには、rsyncスクリプトを少し強化する必要があります。このようなバックアップソリューションを達成するために何が必要かを見てみましょう。その後、スクリプトについて詳しく説明します。

    #!/ bin / bash

    #copy old time.txtからtime2.txtへ

    はい| cp〜/ backup / time.txt〜/ backup / time2.txt

    #古いtime.txtファイルを新しい時間で上書きする

    echo 'date +”%F-%I%p”'>〜/ backup / time.txt

    #ログファイルを作る

    echo "">〜/ backup / rsync-'日付+ "%F-%I%p"'。

    #rsyncコマンド

    rsync -avzhPR --chmod = Du = rwx、Dgo = rx、Fu = rw、Fgo = r --delete --stats --logファイル= = / backup / rsync-'date + "%F-%I% log --exclude-from '〜/ exclude.txt' --link-dest = / home / geek2 / files / 'cat〜/ backup / time2.txt' -e 'ssh -p 12345' / home / geek / files / [email protected]:/ home / geek2 / files / '日付+ "%F-%I%p"' /

    #ログファイルをscpしてバックアップに入れることを忘れないでください

    scp -P 12345〜/ backup / rsync-'cat〜/ backup / time.txt'.log [email protected]:/ home / geek2 /ファイル/' cat〜/ backup / time.txt '/ rsync-' cat 〜/ backup / time.txt'.log

    これは典型的なスナップショットのrsyncスクリプトです。どこかであなたを失った場合は、それを少しずつ詳しく見ていきましょう。

    このスクリプトの最初の行は、time.txtの内容をtime2.txtにコピーします。はいパイプはファイルを上書きしたいことを確認することです。次に、現在の時刻を取得してtime.txtに入れます。これらのファイルは後で役に立ちます.

    次の行はrsyncログファイルにrsync-date.logという名前を付けます(dateは実際の日時です)。.

    さて、私たちがあなたに警告してきた複雑なrsyncコマンド:

    -avzhPR、-e、--delete、--stats、--log-file、--exclude-from、--link-dest - 先ほど話したスイッチだけです。リフレッシュが必要な場合は上にスクロールしてください.

    --chmod = Du = rwx、Dgo = rx、Fu = rw、Fgo = r - これらは、宛先ディレクトリに対する権限です。このディレクトリはrsyncスクリプトの途中に作成しているので、ユーザーがファイルを書き込めるように権限を指定する必要があります。.

    dateおよびcatコマンドの使用

    rsyncコマンド内でdateコマンドとcatコマンドを使用するたびに、それらが使用される順序で説明します。注:特に変数宣言を使用してこの機能を実現する方法は他にもあることを認識していますが、このガイドではこのメソッドを使用することにしました。.

    ログファイルは次のように指定されます。

    〜/ backup / rsync-'日付+ "%F-%I%p"'。

    あるいは、次のように指定することもできます。

    〜/ backup / rsync-'cat〜/ backup / time.txt'.log

    どちらにせよ、 --ログファイル コマンドは、以前に作成された日付付きログファイルを見つけてそれに書き込むことができる.

    リンク先ファイルは次のように指定されます。

    --link-dest = / home / geek2 / files / 'cat〜/ backup / time2.txt'

    これは --リンク先 commandには前回のバックアップのディレクトリを指定します。 2時間ごとにバックアップを実行していて、このスクリプトを実行した時点で午後4時の場合は、 --リンク先 コマンドは午後2時に作成されたディレクトリを検索し、それ以降に変更されたデータのみを転送します(存在する場合)。.

    繰り返しますが、それが、スクリプトの先頭でtime.txtがtime2.txtにコピーされる理由です。 --リンク先 コマンドは後でその時間を参照できます.

    宛先ディレクトリは次のように指定されます。

    [email protected]:/ home / geek2 / files / '日付+”%F - %I%p”'

    このコマンドは、現在の日時のタイトルを持つディレクトリにソースファイルを単純に置きます。.

    最後に、ログファイルのコピーがバックアップ内にあることを確認します。.

    scp -P 12345〜/ backup / rsync-'cat〜/ backup / time.txt'.log [email protected]:/ home / geek2 /ファイル/' cat〜/ backup / time.txt '/ rsync-' cat 〜/ backup / time.txt'.log

    rsyncログを取得して適切なディレクトリに配置するために、ポート12345でセキュアコピーを使用します。正しいログファイルを選択して正しい場所に配置されるようにするには、catコマンドでtime.txtファイルを参照する必要があります。 dateコマンドを使用するのではなくtime.txtをcatすることにした理由がわからない場合は、rsyncコマンドの実行中に多くの時間が経過した可能性があるため、適切な時間を確保するために、catだけを使用します。先ほど作成したテキスト文書.

    オートメーション

    rsyncスクリプトを自動化するには、LinuxのCronまたはWindowsのTask Schedulerを使用してください。注意しなければならないことの1つは、新しいプロセスを続行する前に、現在実行中のすべてのrsyncプロセスを確実に終了させることです。 Task Schedulerは既に実行中のインスタンスを自動的にクローズするようですが、Linuxの場合はもう少しクリエイティブにする必要があります。.

    ほとんどのLinuxディストリビューションではpkillコマンドを使用できます。したがって、rsyncスクリプトの先頭に次の行を必ず追加してください。

    pkill -9 rsync

    暗号化

    いいえ、まだ完了していません。私たちはついに素晴らしい(そして無料の)バックアップソリューションを手に入れました、しかし私たちのファイルのすべてはまだ盗難に弱いです。うまくいけば、あなたはあなたのファイルを何百マイルも離れた場所にバックアップしています。その離れた場所がどれほど安全であるかにかかわらず、盗難やハッキングは常に問題になる可能性があります。.

    この例では、SSH経由ですべてのrsyncトラフィックをトンネリングしました。つまり、すべてのファイルが宛先への転送中に暗号化されます。しかし、目的地も同様に安全であることを確認する必要があります。 rsyncは転送中のデータのみを暗号化しますが、転送先に到達するとファイルは大きく開かれます。.

    rsyncの最も優れた機能の1つは、各ファイルの変更内容のみを転送することです。すべてのファイルを暗号化して1つの小さな変更を加える場合は、変更後に暗号化によってすべてのデータが完全にランダム化されるため、ファイル全体を再送信する必要があります。.

    このため、Windows用のBitLockerやLinux用のdm-cryptなど、ある種のディスク暗号化を使用するのが最も簡単です。このようにして、あなたのデータは盗難の場合に保護されますが、ファイルはrsyncで転送することができ、あなたの暗号化はそのパフォーマンスを妨げません。 rsyncと同様に機能する、あるいはDuplicityなどの何らかの形式を実装するオプションが他にもありますが、rsyncが提供しなければならない機能がいくつかありません。.

    スナップショットバックアップをオフサイトの場所に設定し、コピー元とコピー先のハードドライブを暗号化した後は、rsyncをマスターし、可能な限り最も確実なデータバックアップソリューションを実装するための裏を付けてください。.