January 13, 2013

1053 letters 3 mins read

Ubuntu 12.04 サーバでファイルシステム全体を定期的にバックアップする

Linuxを使っていて困るのがバックアップである。
MacだったらTimeMachineに任せればファイルシステム全体を自動でバックアップしてくれる。
LinuxでもCUI、GUIそれぞれにいろいろなツールがあるようだが、
duplicityとcronを使ってファイルシステム全体を定期的にバックアップできるようにしてみた。

概要

duplicityによるフルバックアップ・増分バックアップをcronで定期的実行するように設定する。

手順

Ubuntuには標準でduplicityとcronがインストールされているはず。
duplicityでフルバックアップ・増分バックアップを実行するバッチファイルを作成し
そのバッチファイルをcronに登録する。

バックアップ実行バッチファイルの作成

以下のようにduplicityでバックアップを実行するバッチファイルを作成する。
まずはフルバックアップ用。

#! /bin/sh 
duplicity full --no-encryption --archive-dir /mnt/backup/archive --exclude /dev --exclude /mnt --exclude /tmp --exclude /proc --exclude /sys --exclude /run --exclude /var/run --exclude /var/lock / file:///mnt/backup/data

引数・オプションの意味は以下のとおり。

  • –no-encryptionで暗号化なしを指定

  • –archive-dirにバックアップ状態を保存しておくディレクトリを指定

  • –excludeで以下のディレクトリをバックアップ対象から除外

  • /dev デバイスのファイルを格納

  • /mnt 外部ストレージ等のマウントポイント

  • /tmp 一時ファイルを格納

  • /proc プロセス情報を格納

  • /sys デバイスの情報を格納

  • /run システムデータを格納

  • /var/run 起動してからのシステムデータを格納

  • /var/lock 二重起動などをチェックするロックファイルを格納

  • バックアップ対象はファイルシステム全体

  • バックアップ先はfile:///mnt/backup/data

一度フルバックアップを手動で取っておく。

次に、差分バックアップのバッチファイルを作成する。

#! /bin/sh 
duplicity incremental --no-encryption --archive-dir /mnt/backup/archive --exclude /dev --exclude /mnt --exclude /tmp --exclude /proc --exclude /sys --exclude /run --exclude /var/run --exclude /var/lock / file:///mnt/backup/data

引数をfullをincrementalに変えただけ。

バッチファイルをcronに登録

最後に、バッチファイルの実行をcronに登録する。
まずはcrontabを実行。

$ sudo crontab -e 
Select an editor. To change later, run 'select-editor'. 
1. /bin/ed 
2. /bin/nano <---- easiest 
3. /usr/bin/vim.basic 
4. /usr/bin/vim.tiny 
Choose 1-4 [2]:

好きなエディタを選択する。
男は黙ってvim。
テキストファイルが表示されるので、どこでも良いので以下のように記述する。

0 0 * * 0 /bin/sh /mnt/backup/script/incrementalbackup.sh > /dev/null 2>&1

指定の意味は以下のとおり。

  • 曜日
  • ユーザ
  • コマンド

コマンドには先ほど作成した増分バックアップ用バッチスクリプトを指定し、結果を/dev/nullに出力する。
これを指定しないと実行結果が毎回メールで届くらしい。