[Linux]ホームディレクトリをrsyncでバックアップする


みなさんこんにちは。Linuxクライアントマシンをバックアップする際、「元に戻すことが困難なもの」を優先すべきと考えている私は、 /home 以下を最優先にバックアップすることにしています。

ノートPCのOSがCentOSな私は、自宅にいる間だけ毎分ファイルサーバにホームディレクトリをrsyncしたい(外ではバックアップしない)ので、こんなスクリプトを作りました。使いみちとしては、自宅ではcronで毎分バックアップを取るけど、外の勉強会ではネットワーク環境が違うのでバックアップしない・・・といったシーンを想定しています。

※ あらかじめ、公開鍵認証やホスト認証で、パスフレーズなしでファイルサーバにsshログインできることを前提としています

#!/bin/bash
LANG=C
DSTSVR=10.0.0.1
DSTMAC=54:52:00:68:XX:XX

[ $(ssh ${DSTSVR} /sbin/ifconfig | grep -i hwaddr | awk '{print $NF}') = ${DSTMAC} ] && 
rsync -avz --delete --exclude='.cache' --exclude='.mozilla' --exclude='.config' 
-e ssh ${HOME}/ ${DSTSVR}:${HOME}/BACKUP/DesktopPC/${USER}/ || exit 1

このスクリプトの仕様はズバリ、LAN内にあるファイルサーバ(上の例だと10.0.0.1)のMACアドレスが54:52:00:68:XX:XX で、そいつに繋がる環境であればrsyncでホームディレクトリ以下をバックアップする、というものです。

6行めのif文で、一度ファイルサーバにsshでログインし、ifconfigコマンドでMACアドレスを取得しています。これと最初にDSTMACで指定したMACアドレスが一致していればrsyncを開始します。なので、そもそもsshに失敗したり、たまたま同じネットワークにDSTSVRで指定したIPアドレスのマシンがあって、まかり間違ってログインできたとしてもMACアドレスが違えばバックアップしない、という仕組みです。

rsyncのオプションではchrome や firefox のキャッシュや設定ファイルをバックアップ対象から外しています。 (--exclude='ほにゃらら') これらをバックアップしようとするとファイル数が多く、時間がかかるので。

以上、小ネタでした。ね、簡単でしょ?