みなさん、こんにちは。
今回はローカルネットワーク上で動作するIoTシステムをWindowsサーバーとRaspberry Piで構築し、NASをバックアップ先として利用するケースを想定して、各デバイスでのバックアップ手法を解説します。
システム概要
システム構成例
- Windowsサーバー
IoTシステムのデータ集約や管理を行います。
ログファイルやデータベースのバックアップが必要です。 - Raspberry Pi
センサーデータの収集やエッジコンピューティングを実施する低消費電力デバイスです。
ログファイルや設定ファイルの定期的なバックアップが求められます。 - NAS(Network Attached Storage)
システム全体のバックアップ先として、データ保管およびリストア用のセキュアなストレージを提供します。
1. バックアップ準備:NASのマウントとエラー処理
バックアップ作業を開始する前に、各デバイスからNASをマウントする必要があります。ここでは、WindowsサーバーとRaspberry Piそれぞれの方法とエラー処理について解説します。
Windowsサーバーの場合(net useによるマウント)
Windows環境では、net use
コマンドを使用してNASをネットワークドライブとしてマウントします。
@echo off
REM NASをドライブX:にマウント(ユーザー名とパスワードを指定)
net use X: \\NAS\Backup /user:your_username your_password
if %ERRORLEVEL% neq 0 (
echo "NASのマウントに失敗しました。バックアップを中止します。"
exit /b 1
)
REM バックアップの実行
REM マウント解除(オプション)
net use X: /delete
/user:your_username your_password
オプションを用いて、NASへの接続に必要な認証情報を指定します。- マウント後、エラーコード(
%ERRORLEVEL%
)をチェックし、マウントに失敗した場合はエラーメッセージを表示し、バッチ処理を終了します。 - 正常にマウントできた場合は、バックアップ作業を実施し、必要に応じて作業終了後にマウント解除を行います。
Raspberry Piの場合(Samba/CIFSによるマウント)
Raspberry Piでは、NASがSamba共有として提供されている場合、mount -t cifs
を用いてマウントします。
#!/bin/bash
NAS_MOUNT_POINT="/mnt/backup"
NAS_SERVER="192.168.1.100" # サーバーのIPアドレス
NAS_SHARE="Backup" # NAS上の共有フォルダ名
USERNAME="your_username"
PASSWORD="your_password"
# マウントポイントが存在しない場合は作成
if [ ! -d "${NAS_MOUNT_POINT}" ]; then
mkdir -p "${NAS_MOUNT_POINT}"
fi
# NASのSamba共有をマウント
sudo mount -t cifs //${NAS_SERVER}/${NAS_SHARE} ${NAS_MOUNT_POINT} -o username=${USERNAME},password=${PASSWORD},iocharset=utf8,vers=3.0
if [ $? -ne 0 ]; then
echo "NASのマウントに失敗しました。バックアップを中止します。"
exit 1
fi
mount -t cifs
により、NASのSamba共有(例://192.168.1.100/Backup
)をマウントします。-o username=...,password=...
で認証情報を指定し、必要に応じてiocharset=utf8
やvers=3.0
などのオプションで文字コードやSMBバージョンを指定します。- マウントに失敗した場合は、
$?
(直前のコマンドの終了ステータス)をチェックし、エラーメッセージを表示してスクリプトを終了します。
2. Windowsサーバーでのバックアップ:robocopyの利用
robocopyの特徴とバックアップ手順
Windows環境でのバックアップは、NASをネットワークドライブにマウントした後にrobocopyを用いて実施します。以下は、NASマウント後にバックアップを開始するバッチファイルの一例です。
@echo off
REM NASをドライブX:にマウント(ユーザー名とパスワードを指定)
net use X: \\NAS\Backup /user:your_username your_password
if %ERRORLEVEL% neq 0 (
echo "NASのマウントに失敗しました。バックアップを中止します。"
exit /b 1
)
REM バックアップの実行
robocopy C:\IoTData X:\WindowsData /MIR /FFT /Z /XA:SH /W:5 /R:3
REM マウント解除(オプション)
net use X: /delete
- 最初にNASのマウントを行い、エラーがあれば処理を中断します。
- 正常にマウントできた場合、
robocopy
でディレクトリのミラーリングバックアップを実施します。 - 作業終了後、必要に応じてNASのマウント解除も行います。
定期的にバックアップを実行する場合は、バッチファイルをタスクスケジューラに登録します。
3. Raspberry Piでのバックアップ:rsyncの利用
rsyncの特徴とバックアップ手順
Raspberry Pi側では、Samba共有としてNASをマウントした後にrsyncを利用して差分バックアップを行います。以下は、NASマウントからバックアップ実施までのシェルスクリプトの例です。
#!/bin/bash
NAS_MOUNT_POINT="/mnt/backup"
LOCAL_DATA="/home/pi/IoTData"
REMOTE_DIR="${NAS_MOUNT_POINT}/RPiData"
# NAS接続情報(Samba共有)
NAS_SERVER="192.168.1.100" # サーバーのIPアドレス
NAS_SHARE="Backup" # NAS上の共有フォルダ名
USERNAME="your_username"
PASSWORD="your_password"
# マウントポイントが存在しない場合は作成
if [ ! -d "${NAS_MOUNT_POINT}" ]; then
mkdir -p "${NAS_MOUNT_POINT}"
fi
# NASのSamba共有をマウント
sudo mount -t cifs //${NAS_SERVER}/${NAS_SHARE} ${NAS_MOUNT_POINT} -o username=${USERNAME},password=${PASSWORD},iocharset=utf8,vers=3.0
if [ $? -ne 0 ]; then
echo "NASのマウントに失敗しました。バックアップを中止します。"
exit 1
fi
# rsyncによるバックアップ
rsync -avh --delete ${LOCAL_DATA}/ ${REMOTE_DIR}/
# 必要に応じてNASのアンマウント
sudo umount ${NAS_MOUNT_POINT}
- スクリプト冒頭でNASをSamba共有としてマウントし、認証情報を指定します。
- マウントに失敗した場合は、エラーメッセージを表示してスクリプトを終了します。
- 正常にマウントできた場合は、
rsync
で差分バックアップを実施します。 - バックアップ終了後、必要に応じて
umount
でNASをアンマウントします。
定期的にバックアップを実行する場合は、crontabに登録します。例えば、crontab -e
で以下のように登録すれば、毎日午前3時にバックアップを実行できます。
0 3 * * * /home/pi/scripts/backup_nas.sh
4. robocopyとrsyncの比較
共通点
- 差分バックアップ:
どちらも変更されたファイルのみ転送するため、効率的なバックアップが可能です。 - ネットワーク転送:
両ツールともNASとの連携が容易で、ネットワーク経由のバックアップに適しています。
主な違い
項目 | robocopy (Windowsサーバー) | rsync (Raspberry Pi) |
---|---|---|
動作環境 | Windows専用 | Linux/Unix系(Raspberry Piなど) |
転送プロトコル | Windows固有のファイルシステム特性を活かした転送 | SSH経由の暗号化転送も可能。Samba共有経由での利用も可能 |
オプションの柔軟性 | 多彩なオプションでエラー処理や再試行、ミラーリングに特化 | 豊富なオプションで細かな制御が可能。特に差分更新に最適 |
設定の手軽さ | タスクスケジューラとの連携が容易でGUIからも設定可能 | cronとシェルスクリプトで簡単に定期実行設定が可能 |
選択のポイント
- Windowsサーバー:
複雑なディレクトリ構造や大容量ファイルのミラーリング、エラー処理が求められる場合、robocopyの堅牢な機能が有用です。 - Raspberry Pi:
軽量な環境で効率的な差分バックアップを実施するにはrsyncが最適です。Samba経由でNASをマウントすることで、Windowsと同じ共有形式で管理でき、運用の統一性も保たれます。
まとめ
IoTシステムにおいて、WindowsサーバーとRaspberry Piの双方からNASへ定期差分バックアップを行うためには、まずNASを正しくマウントすることが重要です。
その後、コマンドによるバックアップ処理を行います。
- Windowsサーバー側:
net use
コマンドを用い、ユーザー名とパスワードを指定してNASをドライブにマウントします。エラー発生時は処理を中断し、robocopyで効率的なバックアップを実施します。 - Raspberry Pi側:
mount -t cifs
を利用してSamba共有のNASをマウントし、認証情報を含むエラーチェックを行った上でrsyncを用いることで、低負荷かつ効率的な差分バックアップを実施します。
これらの手順を取り入れることで、システム全体のデータ保全性が向上し、バックアッププロセスの信頼性が確保されます。
今回はローカルネットワーク構成を想定しましたが、実際の運用環境に合わせて各スクリプトを調整し、安全で自動化されたバックアップ環境を構築してください。
本日も最後までお読みいただきありがとうございました。
それではよいIoTライフを!