Rsync (リモート同期) は、同じサーバー上または Linux 上の異なるマシン間でファイルとフォルダーをコピーおよび同期するためのツールです。
この記事では、ファイルとフォルダーを同期し、サーバーの定期的なバックアップをスケジュールするために、Linux Ubuntu 18.04 に Rsync をインストール、構成、使用する方法を学びます。
インストール
rsync パッケージは、公式の Ubuntu リポジトリに既に存在します。インストールするには:
$ sudo apt install rsync
構文
$ rsync options /path/source/ /path/destination/
利用可能なオプションは次のとおりです:
-
-v:コピーされたファイルとフォルダーがシェルに表示されます
-r:フォルダーとその内容をコピーします
-h:コピーされたファイルのサイズをバイト単位で表示する代わりに、読みやすい形式で表示します (14.167.396 バイトではなく、14.17 Mb が表示されます)
-z:転送されたデータを圧縮します
-a:タイムスタンプ、権限、所有者など、ファイルの元の情報を表示します。
-u:コピー時
--delete:rsync は、ソース フォルダーに存在しない宛先フォルダーのファイルを削除します。
--除外:コピー時に特定のファイルまたはフォルダーが無視されます。
--progress:コピー プロセスの割合と残り時間を表示します。
--existing:宛先フォルダーに既に存在するファイルのみがコピーされます。
同じコンピュータ上の 2 つのフォルダを同期する
あるフォルダーから別のフォルダーへのコピーは、"rsync" コマンドの後にソース フォルダー (アイテムのコピー元) と宛先フォルダーを指定して行います。コピーするフォルダに 内のフォルダが含まれているという事実に関係なく、タグを「-r」タグに追加することをお勧めします:
$ rsync -r path/source path/destination
「ソース」フォルダー全体が「宛先」フォルダーにコピーされます。
$ rsync -r ~/source/ ~/destination
「ソース」フォルダーの内容が「宛先」フォルダーにコピーされます。
2 つのコマンドの違いに注意してください。ソース フォルダの後に「/」を書き込むと、システムはフォルダに含まれるファイルをコピーするように指示されます。
「/」を入力しないと、フォルダー全体が選択され、その結果、宛先フォルダーにソース フォルダーのコピーが作成されます。
単一形式のファイルのコピー
Rsync では、形式または名前を指定することで、特定の種類のファイルのみをコピーすることもできます。
ファイルが「txt」形式であると仮定すると、この形式のすべてのファイルは次のように入力してコピーできます:
$ rsync path/source_folder/*.txt path/destination_folder
「* .txt」で、「すべての .pdf ファイル」のコピーを明示的に要求したことになります。
2 台のマシン間で SSH プロトコルでファイルをコピーする
SSH プロトコルを使用して、ファイルやフォルダをコンピュータから別のコンピュータにコピーすることもできます。このプロトコルを使用すると、転送中にすべてのファイルが暗号化されるため、誰もそれらを読み取ることができなくなります。
コマンドには、オプション「-e ssh」の後にコピーのソースと宛先を指定する必要があります。
$ rsync -r ssh path/source/ [email protected]_machine:/path/destination/
ターゲット マシンにアクセスするユーザーのパスワードが必要になります。
サイズに基づくファイルのコピー
Rsync は、ファイルがディスク上で占めるサイズにも基づいて、コピーするファイルをフィルタリングします。
$ rsync --max-size=15k path/source_folder/*.* path/destination_folder/*.*
15Kb より小さいファイルのみがコピーされます。
大きなファイルは無視されます。
$ rsync --min-size=20k ~/source_folder/*.* ~/destination_folder/*.*
20Kb より大きいファイルのみがコピーされます。
より小さいファイルは無視されます。
拡張子に基づいてファイルをコピーから除外する
一部のファイル タイプをコピーしたくない場合は、「--exclude」タグを使用して、拡張子に基づいて一部のファイルをコピーから除外できます。
以下の例では、.PDF 形式のファイルは「ソース」フォルダーから「宛先」フォルダーにコピーされません。
$ rsync -r --exclude="*.pdf" path/source_folder/ path/destination_folder
転送後にソース フォルダからコンテンツを削除する
「カット アンド ペースト」の概念と同様に、rsync ファイルをソース フォルダーから宛先フォルダーに移動できます。この場合、ファイルは宛先フォルダーにコピーされ、ソース フォルダーから削除されます。
$ rsync -r --remove-source-files path/source_folder path/destination_folder
転送速度制限の設定
ネットワーク経由でコピーする場合、ファイルのアップロード速度制限を設定する必要がある場合があります。この場合、「--bwlimit =KBPS」タグを使用して、「KBPS」を目的の転送速度に置き換えます。
$ rsync --bwlimit=KBPS -r ssh source_path/folder [email protected]_receiver:/destination_path
「KBPS」を KB/秒で表される最大転送速度の値に置き換えます (2048 KB/秒 =2MB/秒)
定期的な自動コピーの作成
rsync を使用してバックアップを作成するが、毎回コマンドを入力したくない場合は、Cron という最適なツールがあります。
Ubuntu 18.04 には既に存在するこのサービスにより、一部のコマンドを定期的に繰り返すための「ルール」を設定できます。
ルールの作成を開始し、自動コピー プロセスの設定を開始するには、次のように入力します。
$ crontab -e
定期的に繰り返すコマンドを指定するテキスト エディターが開きます。ルールを設定したら、保存して閉じます。
crontab の設定方法
crontab の記述は、正確な構文に従って、6 つの順序付きパラメーターを指定する必要があります:
m h dom mon dow command
m:分 (0-59)
h:時間 (0-23)
dom:月の日 (1-31)
mon:月 (1-12)
dow:曜日 (0:日曜日 - 6:土曜日)
command:実行するコマンド
可能な構成の例:
30 * * * * rsync path/source/*.pdf path/destination
(毎月、毎日、毎時 30 分に、「ソース」フォルダー内のすべての「.pdf」ファイルが「宛先」フォルダーにコピーされます)
*/2 * * * * rsync パス/ソース/*.pdf パス/宛先 (「宛先」フォルダー内の「ソース」フォルダーに存在するすべての .pdf ファイル毎月 2 分ごとにコピーされます)
50 8 * * 1,3 rsync パス/ソース/*.pdf パス/宛先 (「ソース」フォルダーの .pdf ファイルを「宛先」にコピーするコマンドフォルダは月曜日から水曜日の午前 8 時 50 分に実行されます)
保存してエディターを閉じたら、crontab タイプのリストを表示します:
$ crontab -l