クロスプラットフォーム環境でのファイルバックアップ:.AppleDBに気をつけよう
サーバからモバイルまで一通りやる開発者の場合、Windows, macOS, Linuxのマシンが混在しているケースがほとんどだろう。
開発データのバックアップにはRAID構成のNASを利用するのが一番安上がりだと思う。(大量のデータをクラウドに上げておく余裕のある大企業は別として。)
RAID構成とはいっても完ぺきではありえないのでさらに二つのNASでデータを冗長化しておく方がよい。いわゆるマスタースレーブ構成をしておくのである。
これならどちらかのNASのディスクが1台故障しても安心して交換ディスクを投入できる。NASにとって一番負荷がかかって「危険」なのはこの交換ディスク投入後の再構築時である。
以前、NAS用でない普通のHDDでRAID5を構成して一台のディスクが故障したので交換したら、再構成時の負担が過重だったのか、他のディスクも死んでしまった。結局そのNASのデータはすべてお亡くなりになったのだが、スレーブ側だったので助かった。
というわけで私はNASのデータを冗長化しているのだが、その際に使うのがWindowsのタスクスケジューラとrobocopyである
タスクスケジューラとrobocopy
夜中や早朝など時間を決めてバックアップ実行させるのがタスクスケジューラ、ファイルのコピーを安全に行うのがWindowsのコマンド、robocopyである。robocopyは様々なオプションでロバストかつ柔軟にコピーを実行してくれる優れものだ。
タスクスケジューラはWindowsに標準で入っているアプリケーションなので左下のWindowsアイコンをクリックしてタスクあたりまで入力すると出てくるだろう。
使い方は「windows 10 定期実行」でググれば出てくる。
今回の肝はrobocopyコマンドのオプションに追加すべきものである。それが次のコマンドの最後にあるものである。
robocopy コピー元ディレクトリ(URL) コピー先ディレクトリ(URL)/s /xd .AppleDB
/sはサブディレクトリ以下も空でなければコピーするというもので、この手のバックアップ目的では必須。最後のものは.AppleDBをコピーしないというものである。
なぜコピーしてはいけないかというと、上書きできなくなることが多いから。中に入っているlockファイルが消すに消せない困ったものになってしまうのだ。
まとめ
WindowsやmacOSの機材が混在している環境でファイルのバックアップを取る際には.AppleDBというディレクトリをNASにコピーしないようにすることが肝心である。万が一コピーしてしまってもその後はコピーしないようにすれば実害はないだろう。
二回目以降もコピーしようとするとバックアップジョブがそのディレクトリを書き換えられずに進行しなくなってしまうのだ。