サービスを運用しているとサーバ上のファイルのバックアップして、ローカルに取っておきたい場合があります。
一番分かりやすい方法は、FTPクライアントツールを使ってドラック&ドロップをする方法…なのですが、環境によってはFTPプロトコルを許可していない場合もあります。
(既に他のプロトコルに対応しているクライアントツールは色々あるわけですが…)
今回は、コマンドラインでバックアップを作って、ローカルに持ってくる工程を説明します。
【tar】圧縮したバックアップファイルを作る
まずは対象のサーバーにSSH接続します。
今回はssh接続したディレクトリ直下にある、contents ディレクトリのバックアップを作るとします。
ディレクトリの圧縮ファイルを作るコマンドは、tar コマンドです。
今回は backup.tar.gz というファイル名に圧縮します。
$ tar czf backup.tar.gz contents
圧縮ファイルのサイズを確認する
圧縮したファイルがどれくらいのサイズになったか確認したい場合があります。
その場合は、 ls コマンドや、du コマンドを実行する事でサイズを簡単に確認できます。
ただし、
そのまま実行すると byte 単位なので非常に大きい数値でわかりにくいです。
その場合は、-h オプションを指定します。
このオプションを指定すると、ファイルのバイト数を分かりやすい単位に変換して表示してくれます。
$ ls -hl backup.tar.gz # または $ du -h backup.tar.gz
【rsync】リモート上のファイルをダウンロードする
次に、ローカル環境からリモート環境のバックアップファイルをダウンロードします。
ダウンロードする際には rsync コマンドを使用します。
このrsync コマンドはファイル転送用のコマンドです。sshプロトコルを用いてリモートとローカルを繋ぐ事が可能です。
次のように、リモート環境からファイルをダウンロードします。
$ rsync -ahv --progress --rsh=ssh user@example.com:/backup.tar.gz .
ダウンロードを再開する
ダウンロードするファイルによっては GB 級の大きなファイルを持って来なければいけない場合もあります。
通信環境にもよりますが、通信量が多いと一時的に通信が止まってしまう場合があります。
通信が止まってしまうと、今までのダウンロードが中断されてしまい、もう一度ダウンロードをする必要が出てきます。
しかし、諦めないでください。
rsyncであればダウンロードの再開も可能です。
他のファイル転送コマンドに scp と言うものがありますが、このコマンドとの違いの一つに差分ダウンロードができるという利点があります。
ダウンロードを再開する場合はpartial オプションを指定します。
$ rsync --partial --progress --rsh=ssh user@example.com:/backup.tar.gz .