WindowsサーバーとRaspberry Piで実現するバックアップ自動化 – net use・mount -t cifsによるNASへのバックアップ

みなさん、こんにちは。

今回はローカルネットワーク上で動作する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=utf8vers=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ライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール