アメリエフの技術ブログ

Amelieff Staff Blog

データ移行やバックアップ

こんにちは、hr-kです。今回はデータの移行を行う際によく使われている便利なコマンドをご紹介します。

サーバ間でのデータ移行やバックアップを取るときによく使われるコマンドがrsyncというコマンドです。 使い方は

$ rsync 同期元 同期先

としてファイルに変更があった場合のみ同期先のファイルを更新します(ファイルがない場合は生成します)。 さらにオプションをいくつか付けてディレクトリの同期も可能です。

$ rsync -ahv 同期元 同期先

-aはarchiveモードで、いくつかのオプション(-r:recusive=ディレクトリを再帰的に同期や-t:times=タイムスタンプの保存など)が有効化します。 -hは人間が見やすい形で容量(大きい場合はGB表記など)を表示します。-vは同期の進捗を表示します。

データ転送などの進捗をさらに詳しく見たいときには-vの代わりに--progressのオプションを使います。

$ rsync -ah --progress 同期元 同期先

「このパターンのファイルやディレクトリは除きたい」というときには--excludeオプションが使えます。

$ rsync -ah --exclude='除きたいパターン' --progress 同期元 同期先

これまでのまとめとして、ディレクトリ内に除きたいファイルがある場合の実行例を簡単に示しておきましょう。

$ ls test1/
aaa.txt     aabb.txt    bbb.txt     ccc.txt

今回はaaで始まるファイルを同期しないように設定してみましょう。 test1というディレクトリを次のコマンドを使って同期します。

$ rsync -ah --exclude='aa*' --progress test1 test2
building file list ... 
3 files to consider
created directory test2
test1/
test1/bbb.txt
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
test1/ccc.txt
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/3)

sent 207 bytes  received 70 bytes  554.00 bytes/sec
total size is 0  speedup is 0.00

と表示されて同期が終わり、ファイルを確認すると

$ ls test2/
test1
$ ls test2/test1/
bbb.txt ccc.txt

という具合になっています。 ちゃんとaaで始まるファイルが除かれ、転送の進捗が出ていることがわかりますね。

rsyncコマンドはcpコマンドと違って同期なので、無駄なファイルは転送しません。 他にも様々なオプションがあり、詳しい説明はこちらのページに乗っております。 サーバ間の以降やバックアップ以外にも便利に使えるので、ぜひ使って見てくださいね。