フォルダを1日おきに自動バックアップしてNextcloudで分散コピーするには

まあリアルタイムに分散コピーする場合、Nextcloudさんを使用すれば良いかと思いますが。

たとえばThunderbirdさんのメールデータ等。

サイズが大きくて圧縮が必要だったり。ファイルの変更が頻繁だったり。

Nextcloudは使いつつ、リアルタイムで同期する程ではなくて、1日1回くらい、お昼休み中にでもバックアップしたいな、という判断の場合。

ちょっとしたシェルスクリプトやバッチファイルで実現する方法を記録しておこうと思います。


フォルダの自動バックアップ設定

Windowsの場合

メールの送受信ソフトウェア、thunderbirdのプロファイルのバックアップを例にしたいと思います。バックアップの対象フォルダは、%APPDATA%\Thunderbirdになります。

バックアップは7-Zipさんを使用させて頂きました。

  1. 予め7-Zipをインストールしておきます。Windowsが64ビット版の場合、7-Zipも64ビット版をダウンロード・インストールします。
  2. Nextcloudの同期フォルダに、何か「バックアップ」的なフォルダを作成します。
  3. バックアップ用のバッチファイルを作成します。
    テキストエディタ backup_Thunderbird.bat

    次のような内容です。

    :start
    setlocal ENABLEDELAYEDEXPANSION
    set time2=%time: =0%
    
    rem TDにバックアップ対象のフォルダ、SDにそのフォルダのパスを指定します
    set SD=%APPDATA%
    set TD=thunderbird
    set BD=%~dp0
    set BM=%BD%\%COMPUTERNAME%_%TD%
    set BF=%BM%_%date:~2,2%%date:~5,2%%date:~8,2%%time2:~0,2%%time2:~3,2%%time2:~6,2%.7z 
    :backup
    rem 7z.exeでTDフォルダを圧縮します
    pushd %SD%
    "%ProgramFiles%\7-Zip\7z.exe" u %BF% %TD%
    
    :del_old
    rem 最新のBRC個のバックアップを残して他は削除します
    set BRC=2
    set BFS=%BM%*.7z
    
    pushd %BD%
    if not defined BRC goto end
    for /f "skip=%BRC%" %%I in ('dir %BFS% /b /o-D') do del "%%~nxI"
    popd 
    
    :end
    popd
    

    7行目にバックアップ対象のフォルダ、6行目にそのフォルダがあるパスを指定します。

  4. バッチファイルを実行すると、バッチファイルと同じフォルダにバックアップが作成されます。ファイル名は「<ホスト名>_<バックアップ対象のフォルダ>_<日時>.7z」になります。
  5. バッチファイルの18行目が「2」になっていますが、これは最新のバックアップを2つ残す、という意味になります。バッチファイルを実行するたびにバックアップが行われますが、古いバックアップは自動削除されます。
  6. タスクスケジューラにバッチファイルを登録するためのXMLファイルを作成しました。文字コードはBOM付きのUnicode、改行コードはCRLFになります。
    Unicode対応テキストエディタ backup_Thunderbird.xml

    次の内容になります。

    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2019-04-10T10:14:50.9782836</Date>
        <Author>【ホスト名】\【ユーザ名】</Author>
        <URI>\backup_Thunderbird.bat</URI>
      </RegistrationInfo>
      <Triggers>
        <CalendarTrigger>
          <StartBoundary>2019-04-10T12:20:00</StartBoundary>
          <Enabled>true</Enabled>
          <ScheduleByDay>
            <DaysInterval>1</DaysInterval>
          </ScheduleByDay>
        </CalendarTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <LogonType>InteractiveToken</LogonType>
          <RunLevel>LeastPrivilege</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</AllowHardTerminate>
        <StartWhenAvailable>false</StartWhenAvailable>
        <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
        <IdleSettings>
          <Duration>PT10M</Duration>
          <WaitTimeout>PT1H</WaitTimeout>
          <StopOnIdleEnd>true</StopOnIdleEnd>
          <RestartOnIdle>false</RestartOnIdle>
        </IdleSettings>
        <AllowStartOnDemand>true</AllowStartOnDemand>
        <Enabled>true</Enabled>
        <Hidden>false</Hidden>
        <RunOnlyIfIdle>false</RunOnlyIfIdle>
        <WakeToRun>false</WakeToRun>
        <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
        <Priority>7</Priority>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>【Nextcloudフォルダのパス】\Nextcloud\Backup\backup_Thunderbird.bat</Command>
        </Exec>
      </Actions>
    </Task>

    5行目のAuthorタグは、タスクを実行するユーザ名、46行目のCommandタグは、作成したバッチファイルを指定します。

  7. コンピューターの管理を起動します。
    compmgmt.msc

  8. タスク スケジューラ→タスク スケジューラ ライブラリをクリックします。
  9. タスクのインポートをクリックして、作成したXMLファイルをインポートします。
  10. タスク名や、トリガー欄の実行日時、操作欄のバッチファイルが間違っていないか確認後、OKをクリックします。
  11. 追加されたタスクを右クリック→実行するを選択、バックアップが行われるか確認します。

Linuxの場合

3番がシェルスクリプトになります。

#sudo dnf install p7zip #Fedora
#sudo apt install p7zip  #Debian, Ubuntu, Raspbian
touch backup_thunderbird.sh
chmod +x backup_thunderbird.sh
vi backup_thunderbird.sh

内容はこのような感じでしょうか。

#!/bin/sh
SD=~
TD=thunderbird
BD=`pwd`
BM=${BD}/`hostname`_${TD}
BF=${BM}_`date +%Y%m%d%H%M%S`.7z

#backup
pushd ${SD}
/usr/bin/7za a ${BF} ${TD}

#delete old backup
BRC=2
BFS=${BM}*.7z
if [ ! -z ${BRC} ]; then
  cd ${BD}
  BRC=$((${BRC}+1))
  rm `ls -t ${BFS} | tail --lines=+${BRC}`
fi

popd

9番はcronになります。

# dnf install cronie #Fedora
crontab -e

次のような内容です。

20 12 * * * ${HOME}/nextcloud/backup/backup_thunderbird.sh > ${HOME}/nextcloud/backup/backup_thunderbird.log 2>&1

こちらもWindowsと同じように、最新の2つのバックアップファイルが残る感じです。


これでお昼休み中にメールが自動バックアップされて、バックアップ後にNextcloudサーバへアップロードされるようになったかと思います。

作成したバッチファイルとXMLをコピー/変更することで、メール以外の他のフォルダも、同様なバックアップができるかと思います。

宜しければお試し下さい。

スポンサーリンク

フォローする

スポンサーリンク