Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

rsync を使用した Linux のバックアップ:15 の必須コマンド

rsync を使用した Linux のバックアップ:15 の必須コマンド rsync はリモート同期の略です。

rsync は、UNIX/Linux でバックアップ操作を実行するために使用されます。

rsync ユーティリティは、ファイルとディレクトリをある場所から別の場所に効果的な方法で同期するために使用されます。バックアップの場所は、ローカル サーバーまたはリモート サーバーにあります。

rsync の重要な機能

  • 速度 :初めて、rsync はソース ディレクトリと宛先ディレクトリの間でコンテンツ全体をレプリケートします。次回、rsync は変更されたブロックまたはバイトのみを宛先の場所に転送するため、転送が非常に高速になります。
  • セキュリティ :rsync により、転送中に ssh プロトコルを使用したデータの暗号化が可能になります。
  • 帯域幅の減少 :rsync は、送信側と受信側でそれぞれブロックごとにデータの圧縮と解凍を使用します。したがって、rsync で使用される帯域幅は、他のファイル転送プロトコルと比較して常に少なくなります。
  • 特権 :rsync のインストールと実行に特別な権限は必要ありません

構文

$ rsync options source destination

送信元と宛先はローカルまたはリモートのいずれかになります。リモートの場合は、ログイン名、リモート サーバー名、および場所を指定します。

例 1. ローカル サーバー内の 2 つのディレクトリを同期する

ローカル コンピュータ内の 2 つのディレクトリを同期するには、次の rsync -zvr コマンドを使用します。

$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes received 1098 bytes 54966.00 bytes/sec
total size is 44867 speedup is 1.63
$

上記の rsync の例では:

  • -z は圧縮を有効にします
  • -v 冗長
  • -r は再帰的であることを示します

次に、ソースからコピー先にコピーされたファイルの 1 つのタイムスタンプを見てみましょう。以下に示すように、rsync は同期中にタイムスタンプを保持しませんでした。

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 bin bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Sep 2 2009 /root/temp/sva.xml

例 2. rsync -a を使用して同期中にタイムスタンプを保持する

rsync オプション -a はアーカイブ モードを示します。 -a オプションは次のことを行います。

  • 再帰モード
  • シンボリック リンクを保持します
  • 権限を保持します
  • タイムスタンプを保持する
  • 所有者とグループを保持します

ここで、以下に示すように、例 1 で提供されたのと同じコマンドを実行します (ただし、rsync オプション -a を使用します)。

$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes received 1104 bytes 55206.00 bytes/sec
total size is 44867 speedup is 1.63
$

以下に示すように、rsync は同期中にタイムスタンプを保持します。

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /root/temp/sva.xml

例 3. 1 つのファイルのみを同期する

ファイルを 1 つだけコピーするには、以下に示すように rsync コマンドにファイル名を指定します。

$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
Pubkeys
sent 42 bytes received 12380 bytes 3549.14 bytes/sec
total size is 12288 speedup is 0.99

例 4. ローカルからリモートへファイルを同期する

rsync を使用すると、ローカル システムとリモート システム間でファイル/ディレクトリを同期できます。

$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname
sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec
total size is 45305958 speedup is 2.87

リモート サーバーとの同期中に、リモート サーバーのユーザー名と IP アドレスを指定する必要があります。リモート サーバー上の宛先ディレクトリも指定する必要があります。形式はユーザー名@マシン名:パス

です。

上で見られるように、ローカル サーバーからリモート サーバーへの rsync を実行するときにパスワードを要求します。

ファイルをローカル サーバーからリモート サーバーにバックアップするときに、パスワードを入力したくない場合があります。たとえば、rsync を使用してローカル サーバーからリモート サーバーにファイルをコピーするバックアップ シェル スクリプトがある場合、パスワードを入力せずに rsync できる機能が必要です。

これを行うには、前に説明したように、ssh パスワードを使用しないログインを設定します。

例 5. リモートからローカルにファイルを同期する

リモートからローカルにファイルを同期する場合は、以下に示すように、ソースにリモート パスを指定し、ターゲットにローカル パスを指定します。

$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

例 6. 同期用のリモート シェル

rsync を使用すると、使用するリモート シェルを指定できます。 rsync ssh を使用して、安全なリモート接続を有効にすることができます。

rsync -e ssh を使用して、使用するリモート シェルを指定します。この場合、rsync は ssh を使用します。

$ rsync -avz -e ssh thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

例 7. 宛先で変更されたファイルを上書きしない

一般的な同期状況では、宛先でファイルが変更された場合、そのファイルをソースの古いファイルで上書きしたくない場合があります。

まさにそれを行うには、rsync -u オプションを使用します。 (つまり、宛先のファイルが変更されている場合は上書きしないでください)。次の例では、Basenames というファイルが宛先ですでに変更されています。したがって、rsync -u で上書きされることはありません。

$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
$ rsync -avzu thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
sent 122 bytes received 505 bytes 114.00 bytes/sec
total size is 45305958 speedup is 72258.31
$ ls -lrt
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames

例 8. ディレクトリ ツリー構造のみを同期します (ファイルは同期しません)

rsync -d オプションを使用して、ソースから宛先にディレクトリ ツリーのみを同期します。以下の例では、ディレクトリ内のファイルではなく、ディレクトリ ツリーのみを再帰的に同期します。

$ rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/
sent 240 bytes received 1830 bytes 318.46 bytes/sec
total size is 956 speedup is 0.46

例 9. 転送中の rsync の進行状況を表示する

バックアップに rsync を使用する場合、バックアップの進行状況を知りたい場合があります。つまり、コピーされるファイルの数、ファイルのコピー速度など。

rsync –progress オプションは、以下に示すように、rsync 実行の詳細な進行状況を表示します。

$ rsync -avz --progress thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
 5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19)
Conflictname
 12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec
total size is 45305958 speedup is 2.87

また、rsnapshot ユーティリティ (rsync を使用) を使用して、ローカル Linux サーバーやリモート Linux サーバーをバックアップすることもできます。

例 10. ターゲットで作成されたファイルを削除する

ファイルがソースには存在しないが、ターゲットには存在する場合は、rsync 中にターゲットでファイルを削除することをお勧めします。

その場合は、以下に示すように –delete オプションを使用します。 rsync delete オプションは、ソース ディレクトリに存在しないファイルを削除します。

# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt
$ rsync -avz --delete thegeekstuff@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55

ターゲットには new-file.txt という新しいファイルがありますが、-delete オプションを使用してソースと同期すると、ファイル new-file.txt が削除されました。

例 11. ターゲットに新しいファイルを作成しない

必要に応じて、ターゲットにある既存のファイルのみを更新 (同期) することもできます。ソースにターゲットには存在しない新しいファイルがある場合、ターゲットでこれらの新しいファイルを作成することを回避できます。この機能が必要な場合は、rsync コマンドで -existing オプションを使用してください。

まず、ソースに new-file.txt を追加します。

[/var/lib/rpm ]$ > new-file.txt

次に、ターゲットから rsync を実行します。

$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./
sent 26 bytes received 419 bytes 46.84 bytes/sec
total size is 88551424 speedup is 198991.96

上記の出力が表示された場合は、新しいファイル new-file.txt を受信していません。

例 12. ソースと宛先の間の変更を表示する

このオプションは、ソースと宛先の間のファイルまたはディレクトリの違いを表示するのに役立ちます。

ソース:

$ ls -l /var/lib/rpm
-rw-r--r-- 1 root root 5357568 2010-06-24 08:57 Basenames
-rw-r--r-- 1 root root 12288 2008-05-28 22:03 Conflictname
-rw-r--r-- 1 root root 1179648 2010-06-24 08:57 Dirnames

目的地:

$ ls -l /root/temp
-rw-r--r-- 1 root root 12288 May 28 2008 Conflictname
-rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames
-rw-r--r-- 1 root root 0 Sep 3 06:39 Basenames

上の例では、送信元と宛先の間に 2 つの違いがあります。まず、ファイルの所有者とグループの Dirname が異なります。次に、ファイル Basenames のサイズが異なります。

次に、rsync がこの違いをどのように表示するかを見てみましょう。 -i オプションは項目の変更を表示します。

$ rsync -avzi thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames
sent 48 bytes received 2182544 bytes 291012.27 bytes/sec
total size is 45305958 speedup is 20.76

出力では、ファイル名またはディレクトリ名の前に変更を示す 9 文字ほどが表示されます。

この例では、ベース名 (およびディレクトリ名) の前の文字は次のことを示しています。

> specifies that a file is being transferred to the local host.
f represents that it is a file.
s represents size changes are there.
t represents timestamp changes are there.
o owner changed
g group changed.

例 13. ファイル転送時の包含パターンと除外パターン

rsync を使用すると、同期中にファイルまたはディレクトリを含めたり除外したりするパターンを指定できます。

$ rsync -avz --include 'P*' --exclude '*' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys
sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec
total size is 32768000 speedup is 3.19

上の例では、「P」で始まるファイルまたはディレクトリのみが含まれ (rsync include を使用)、他のすべてのファイルは除外されます。 (rsync exclude ‘*’ を使用)

例 14. 大きなファイルは転送しない

rsync –max-size オプションを使用すると、rsync に特定のサイズを超えるファイルを転送しないよう指示できます。

$ rsync -avz --max-size='100K' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername
sent 252 bytes received 123081 bytes 18974.31 bytes/sec
total size is 45305958 speedup is 367.35

max-size=100K を指定すると、rsync は 100K 以下のファイルのみを転送します。メガバイトの場合は M、ギガバイトの場合は G を指定できます。

例 15. ファイル全体を転送する

rsync の主な機能の 1 つは、ファイル全体を送信するのではなく、変更されたブロックのみを宛先に転送することです。

ネットワーク帯域幅が問題ではない (ただし CPU は問題である) 場合は、rsync -W オプションを使用してファイル全体を転送できます。これにより、送信元と宛先でチェックサムを実行する必要がなくなるため、rsync プロセスが高速化されます。

# rsync -avzW thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name
sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec
total size is 45305958 speedup is 2.87

追加の rsync チュートリアル

  • UNIX/Linux で SSH を使用して Rsync をセットアップする方法 (パスワードなしの rsync)
  • exclude-from を使用して複数のファイルとディレクトリを除外する 6 つの rsync の例

  1. Bash を使用してブランチ固有の Netlify 構成を自動化する – ステップバイステップ ガイド

    バックエンド API とフロントエンド デプロイメントのために、ステージングと本番環境などの複数の環境でプロジェクトに取り組んでいる場合、リポジトリ内の各ブランチに正しい構成とコマンドがあることを確認する必要があります。 これは、複数の開発者がコードベースで積極的に作業したり、異なるブランチに変更を加えたり、複数のブランチ固有の設定を管理したりしている状況では、困難を伴う可能性があります。 ブランチにプッシュされたすべてのプル リクエストや変更と同様に、何がマージされるかどうかを決定する前に、変更、追加、または削除されたコードのすべての行を確認する必要があります。コードベース内の構成ファイ

  2. マスター スクリプト:反復的なタスクを自動化して生産性を向上

    厳格で高品質なソフトウェアを構築した経験が豊富な開発者は、スクリプトを作成することで作業のほとんどを自動化する傾向があります。これらのスクリプトは、単純なエイリアス bash コマンドから、サーバー上で実行される反復的な cron トリガーまで多岐にわたります。 このチュートリアルでは、スクリプトとは何か、その多くの使用例、スクリプトを使用する利点と欠点について学びます。また、実際の動作を確認できるように、いくつかのサンプル スクリプトについても説明します。 スクリプトとは何ですか? スクリプトは、タスクや制御プロセスの自動化に役立つスクリプト言語 (Bash、Python、JavaScr