開発者でも何でもない素人によるサイト

Raspberry Pi 2 全自動リモートバックアップ(ディスクイメージ作成)

  • このエントリーをはてなブックマークに追加

概要

Raspberry Pi 2で、ddコマンドによる自動バックアップ(ディスクイメージ作成)を行います。

rsyncのほうが差分バックアップなので賢そうですが、ddコマンドでimgファイルを作成しておけば、万が一ストレージが破損したとしても、イメージを焼くだけで復旧できます(ただし、バックアップ先マシンの容量には余裕が必要です)。

バックアップ先はLAN内の別マシン(Ubuntu Desktop)とします。

このUbuntu desktopは常時稼働ではないので、バックアップ時のみ電源を入れて、バックアップが終了したら電源を落とします。

Raspberry Pi 2(Ubuntu Server 16.04)で動作を確認しましたが、Raspbianでも作業内容は変わりません。

なお、以下のシェルスクリプトでは、wakeonlan(WOL)やSSHを使うことで、必要に応じて電源を入れたり落としたり出来、エコかつ楽で良いのですが、macアドレスや秘密鍵等の情報も含まれるので、取り扱いには細心の注意を払う必要があります。

以下、

とします。

必要なコマンドのインストール

wakeonlanコマンドを使うのでインストールしておきます。

sudo apt install wakeonlan

バックアップ先ディレクトリの用意

バックアップ先(リモート)のディレクトリを作成します。

ここでは、/home/hoge2/fullbackupとしました。

SSH等でログインし、以下のコマンドで作成します。

mkdir fullbackup

ラズパイから、バックアップ機にSSH鍵認証(パスワード無し)で接続できるようにする

スクリプト内のSSHコマンドでsudoが実行される際、パスワードの入力が求められないよう、鍵認証の設定を行います。

参考:リモートシャットダウンするスクリプトを動作させるための設定]

シェルスクリプト作成

以下のようなシェルスクリプトを作成しました。

毎度のことですが、ド素人なので方法がマズかったり、書き方が誤ったりしている可能性があります。

僕と同じような初心者の手掛かりになれば幸いです。

vi fullbackup
#!/bin/bash

# wakeonlanでバックアップ機(同じネットワーク内、macアドレスで指定)を起動
wakeonlan 00:00:00:00:00:00

# 起動完了まで待機(5分)
sleep 5m

# バックアップ用ディレクトリの作成
ssh -i /home/hoge/.ssh/id_rsa hoge2@192.168.1.100 mkdir /home/hoge2/fullbackup/`date "+%Y%m%d"`
backupdir=/home/hoge2/fullbackup/`date "+%Y%m%d"`/

# ddバックアップ実行
# SSHで接続し、直接imgファイルを転送
# /dev/sda、外付けディスクもバックアップする場合、以下のコメントアウトをはずす。
#dd if=/dev/sda | ssh -i /home/hoge/.ssh/id_rsa hoge2@192.168.1.100 "dd of=${backupdir}main.img"
dd if=/dev/mmcblk0 | ssh -i /home/hoge/.ssh/id_rsa hoge2@192.168.1.100 "dd of=${backupdir}boot.img"

# バックアップ機をシャットダウン
ssh -i /home/hoge/.ssh/id_rsa hoge2@192.168.1.100 sudo shutdown -P now

パーミッションの設定(cronに登録)

既に述べたように、シェルスクリプトには重要な情報が含まれているので、パーミッションをきつめに設定します。

sudo chown root:root fullbackup
sudo chmod 711 fullbackup

あとは、これをcron.monthlyあたりに放り込んでおきます。

sudo mv fullbackup /etc/cron.monthly