rsyncコマンドでVPS内のデータを自分の端末バックアップまたは端末のデータをVPSにバックアップを取ってみた人いるかな? あんまりいないとおもうけどw でもまだまだ書いちゃいます。
前回の記事
この記事を読んでないとまったく意味がわからないと思うので、読んでない方は前の記事からどうぞ。
オプションで制御
rsyncコマンドはオプションが色々とあるので細かく制御出来る。(-a や-v等) 前回のコマンド、
Nao's Mac:~ Nao$ rsync -av /保存元ディレクトリパス/ -e "ssh -p 10022" nao@naonotes.com:保存先ディレクトリ/
※青の部分は自分なりに変更
を流すとVPSに保存元ディレクトリが保存先ディレクトリにバックアップされるのだが、バックアップ後、さらに同じコマンドを流すとすべてのファイルを上書きし保存してしまう。 たいして容量のないディレクトリならいいのだが、数Gくらいの大きなデータの場合、変更されてもいないデータを再度上書きするのは無駄だし、VPSを使っているとインターネットへの回線に大きく負担をかけてしまう。
オプション -u
そこで使うのが-uオプション。 rsyncコマンドに-uオプションを付け足すと、差分ファイルのみアップロードしてくれる。 変更または付け足されたデータのみ転送するので、回線の負担が最小限になる。 さすがきちんと作られてるね。
Nao's Mac:~ Nao$ rsync -avu /保存元ディレクトリパス/ -e "ssh -p 10022" nao@naonotes.com:保存先ディレクトリ/
これだけで差分のみのバックアップが可能になる。 これは便利。
オプション --delete
-uオプションのみで差分バックアップが出来るようになった。 でもーuオプションはデータの同期を取るわけではない。 保存元のディレクトリから必要なくなったデータを削除し、その後rsyncコマンドでバックアップしても、削除したデータは保存先には残る。 ちょっと何言ってるかわからないYO! って人のために絵付きで説明。
ーーdeleteオプション無し
MacからVPSにデータをコピーするとして、一度目のrsyncを行うと、MacからVPSへコピーされる。

その後、必要なくなったデータCを削除したとする。 それからrsyncでバックアップしても、データCはコピー先にそのまま残る。

その後新しいデータDを作成し、rsyncコマンドでバックアップすると、そのままデータDがコピー先に加わる。 コピー元とコピー先はデータの整合性はなく、古いファイルは消えず増え続ける。

間違ってデータを消してしまった!という時はリカバリーできるが、増え続けるデータは容量を圧迫していくことになる。
ーーdeleteオプション有り
ーーdeleteオプションをつけると、データの同期を取るようになる。 コピー元にないデータは削除されるようになるので、コピー元、コピー先はまったく同じデータになる。

まったく同じなので正確なバックアップがとれるし、コピー元とコピー先を入れ替えると最終バックアップを取った時に復元出来る。 deleteオプションをつける場合、消してしまったデータはrsync後にバックアップ先からも消されるので、やっぱり使いたくなった!となっても復元は出来ない。 自分の好みの方を使おう。 ーーdeleteオプションの使い方は、
Nao'sMac:~ Nao$ rsync -avu --delete /保存元ディレクトリパス/ -e "ssh -p 10022" nao@naonotes.com:保存先ディレクトリ/
となる。
使い方によっては凄く便利
VPSからホームサーバーにデータをバックアップし、VPSがファーストサーバーのようになってもその被害を防ぐことが出来るし、ホームサーバーを山盛りHDDを積んでおいて、消したデータをいつでも復元出来るようにすることも出来る。 データの分散管理とかもオプションをうまく使えば制御できるので、色々試してみよう。
凄く判りやすかったです。是非試してみたいと思います。
ファーストサーバー事件ではバックアップの意識が高めてくれたことは間違いないですね。
良い記事をありがとうございました。
おお、それはよかったです。
コマンド一発でバックアップとれるのが便利ですよ。
かなり細かく設定出来るのも魅力です。
ネタに困った時にはまだまだこのコマンドで何か書けそうですw
VPN(というかmac以外のファイルシステム)にバックアップする場合、rsyncそのままでは漢字ではまりませんか?
濁点があるファイル名をVPNにrsyncでコピーすると、VPN側でファイルアクセス出来なくなりますよ。
UTF-8-MAC問題とかNFD,NFC問題とかでググると色々出てきます
MACからVPNでは、rsyncのバージョン 3以降で –iconv=UTF-8-MAC,UTF-8とかすればいいはずですよ。
え?ホントですか?
今覗いてみたら問題なさそうだったんですが、
OSX10.8じゃないと文字化けするとかあるのかな。
ちょっとググってみます。
ありがとうございます。
MAC同士であれば問題ないです
OSXのバージョンも関係ないです(10であれば)
MACとLinuxとかだと、アクセス出来なくなるわけでは無く、おかしくなる可能性があります
最初にLinux側で濁点のあるファイルを作ります
linux% touch が
linux% ls
が
次にMACで同じ名前のファイルを作ります
mac% touch が
mac% ls
が
それをrsyncでMACからlinuxコピーすると、linux側に2つのファイルが出来てしまいます
mac% rsync -e ssh が linux:(directory)
…
linux% ls
が が
見えているのは同じ”が”ですが、漢字コードが違うので別々のファイルになります(NFCとNFDってやつです)
逆にlinuxからmacでは2のファイルにはならないのですよこれが。macが自動的にNFDにするので・・・(これが大問題)
片道だけなら問題ないですけど、往復させたりするとファイルが消えたりとか、色々おかしくなります。
なのでrsyncによるバックアップはあまりおすすめしません
ちなみにlinuxでNFDのファイルをNFCにするには、convmvってコマンドで一発で変換してくれますのでおすすめです
ああ、理解しました。
バックアップとして一方的に保存するのであれば特に問題は無いですが、
そのディレクトリを共有してMac、Linuxで書き換えるのであれば重複したファイルが出てくるというわけですね。
なるほど。
面倒なものですね(;´Д`)