14時25分17秒 [ソフトウェア]
SyncToyの同期フォルダペア設定が全部消えてしまったのでバックアップから復活させた
Microsoft製の同期ツール「SyncToy」を使っている
Microsoftは、2フォルダ間で中身を同期させてくれる「SyncToy」というツールをフリーソフトとして無償配布しています。LAN内で同期可能なので、私は仕事用ノートPC(Windows10)と自宅メインPC(Windows7)とで同期を取る際に昔から活用しています。
同期ツールは多数ありますが、このSyncToyは、
- 双方向だけでなく、一方向の同期もできる。
- 上書きされたファイルはゴミ箱に入る(ので同期直後なら旧ファイルのサルベージが簡単)。
- 自動では同期しないので、同期タイミングを完全に手動でコントロールできる。
- ネットワークフォルダも扱える(LAN経由で異なるPC間の同期もできる)。
- GUIだけでなく、コマンドライン上で動作するCUI版もある。
といったメリットがあります。
その辺の話は、別途2013年のブログ記事「Microsoft製フリー同期ツール「SyncToy」には、コマンドラインから使える SyncToyCmd.exe もあるのが便利!」に書いているのでどうぞ。
今回は、その同期ディレクトリペア設定が突然消えてしまった話。
SyncToyに登録していた同期フォルダペア設定が消えた!
ある夜、いつものように仕事用PCで作成したデータをメインPCへバックアップコピーすべく同期させようとSyncToyを起動してみましたら、何やらいつもと異なる画面が出てきました。
それが下図。
「Welcome to SyncToy」とか挨拶されてしまいました。
見えるのは挨拶だけで、いつも存在している同期対象リストが左側に一切表示されていません。綺麗さっぱり消えています。
「いや、ウェルカムじゃねえよ」と思わず突っ込みました。(^_^;)
昨日までの記憶はどこへ行ったんだ!?!?
まあ、ソフトウェアがこのように初期化されたっぽい場合の対処方法は、「まず再起動」です。
単に今回だけは何らかの事情でデータファイルが読めなかっただけかも知れませんから。
というわけで、再起動させました。
※ここで再起動させなければ、もっと解決は早かったかもしれないと後に分かるのですが。(^_^;;;
……で、まあ、再起動しても「Welcome to SyncToy」と挨拶されるのみで、同期設定は消えたままでした。
何らかの対処が必要なようです。
以下はその対処方法の記録です。
SyncToyの同期フォルダペアを記録しているデータファイルの実体を探す
SyncToyでは、「同期対象の2フォルダをペアにして同期方法などを選択した設定」を複数個登録しておけます。それぞれの設定には名前を付けられるので、複数の同期設定を手動で管理できます。
なので、その設定がPC内部のどこかに存在するはずです。
レジストリに記録する方針のソフトウェアも多々あるので面倒ですが、調べたところSyncToyの設定データは独立したファイルとして存在していました。
とはいえ、保存場所はSyncToyのインストール先フォルダではなく、Windowsがユーザ別にデータファイルを置く用途として用意しているAppDataフォルダ以下のパスです。
C:\Users\(ユーザ名)\AppData\Local\Microsoft\SyncToy\2.0
私が使っているSyncToyは、Ver 2.1.0.0 ですが、フォルダ名は 2.0 でした。
AppDataフォルダには隠し属性が付加されていますので、順番にフォルダ階層をたどるなら隠しファイルも見えるように設定する必要があります。
エクスプローラのアドレス欄にパスを一気に打てば見えるんじゃないかとは思いますが。
まあ、とにかくSyncToyのデータが保存されたフォルダは上記の位置にあります。
それが下図。
このフォルダにはログファイルがいろいろ存在しますが、その中の SyncToyDirPairs.bin ファイルが同期設定を記録したデータファイルです。
ただし、「.bin」というファイル拡張子が示している通り、このファイルの中身はバイナリ形式なので、自力で編集するのは現実的ではありません。また、中身を読んでみるためにはバイナリエディタか、バイナリ形式でも読めるエディタが必要です。
SyncToyの同期フォルダペアの記録が全部00でリセットされていた
さて、発見したデータファイルである SyncToyDirPairs.bin のファイルサイズを見ると22KBだったので、中身は結構ありそうな気がします。
「なんだ、ちゃんとデータはあるじゃないか……」と思ったんですが、
そのデータファイルをエディタで読み込んでみると……、下図の通り中身が全部 00 で埋まっていました。
なんで……?
22KBもあるのに、最初から最後まで全部 00 です。(^_^;;;
ソフトウェアの何らかの不具合でこのようにゼロリセットされてしまったのか、それともHDD側に何らかの不具合があってファイルが読めず、このようになってしまったのか。
原因は分かりませんが、とにかく中身は全部ゼロでした。
▼SyncToyのデータファイルには自動バックアップもあった!
で、先程のフォルダ画面イメージをよくご覧になった方々はお気づきかと思いますが、データファイル SyncToyDirPairs.bin には、そのバックアップっぽい SyncToyDirPairs.bin.bak ファイルがあります。
拡張子に「.bak」を加えただけのファイル名なので、明らかにバックアップファイルでしょう。(^_^;)
更新時刻から考えて前日(前回起動時)のバックアップデータっぽいです。
なので、もし最初に「Welcome to SyncToy」と挨拶されてしまった瞬間にこのフォルダを開いて、SyncToyDirPairs.bin.bak をリネームして一時的に確保しておけば、それを使って簡単に設定を復活させられたかも知れません。
私は最初に「とりあえず再起動してみるか」と思ってしまったので(※白紙状態のデータが上書き保存されるのを防ぐべく、念のためにタスクマネージャからプロセスを強制終了する形で終わらせたんですが)、どうもバックアップ側の中身もゼロリセット状態で上書きされてしまったようです。(たぶん、終了時ではなく起動時に前ファイルのバックアップを作る仕様なんですかね? 詳しい実験はしていないのですが。)
PCのシステム丸ごとバックアップ(HDDイメージ)から、昔のSyncToyDirPairs.binファイルをサルベージ
幸いなことに、同期フォルダペアの設定というのは、そんなに頻繁に修正するものではありません。
たぶん、1年くらいは何も変更していないんじゃないかと思います。
なので、定期的に自動実行されるHDDイメージのバックアップから SyncToyDirPairs.bin ファイルだけを抜き出せば設定は回復可能なハズです。
仕事用PCのシステムドライブ全体のバックアップ頻度はあまり高くはありませんが、月1回くらいはあります。
私が使っているバックアップソフトは、Acronis True Imageです。
このソフトは、HDDを丸ごとバックアップしたバックアップイメージを、ドライブの形でマウントできます。
なので、適当なドライブ名(例えば X: ドライブ)でマウントして、そこからデータを引っ張り出せば良いわけです。
※ソフトウェアのバージョンが古いためか、Windows10上ではマウントに失敗してしまったので、Windows7 PC上でマウントしてデータファイルを抜き出すことにしました。
▼AppDataフォルダの中身はそのままでは閲覧できない
今のWindowsの標準ファイルシステムであるNTFSは、ファイルやフォルダにアクセス権の設定ができます。
AppDataフォルダは個人アカウントで保護されているので、バックアップされたHDDイメージを適当にマウントしても「アクセス権がない」と言われてしまって覗けませんでした。(^_^;)
もちろん、管理者権限を使ってフォルダへのアクセス権を奪取すれば良いのですが、そうやってバックアップデータを上書きするのは好ましくありません。
仕方がないので、
- まずは、HDD丸ごとのバックアップイメージファイル(数GBあります)を適当な場所にコピーして、
- その複製イメージを「書き換え可能」設定で適当なドライブとしてマウントして、
- そのドライブ内のAppDataフォルダのアクセス権を、管理者権限で奪取する。
という手順を踏むことにしました。
HDDイメージファイルがでかいのでコピーに時間がかかる上、AppDataフォルダ全体のアクセス権を奪取する処理に、結局トータル1時間くらい掛かりました。(^_^;)
まあ全部待ち時間ですけども。
AppDataフォルダ内に格納されたデータのサルベージには、こんな面倒さがあったとは……。
アクセス権を奪取する処理中は、エクスプローラは何も言ってこない(単に読み込みインジケータが進むだけ)なので、単に「フォルダの中身を読もうとしているのに読めない」状態であるかのようにも見えます。
長時間待てば最終的にはアクセス権が得られるので、短気にウインドウを閉じてしまわないよう注意が必要ですね。(^_^;)
昔のSyncToyDirPairs.binファイルを上書きコピーして解決
まあそんなこんなで、バックアップデータからSyncToyの設定ファイルである SyncToyDirPairs.bin ファイルをサルベージできました。
念のためにエディタで中身を見てみたところ、ちゃんと中身があります。00の羅列ではありません。(^_^;)
あとは、先述のSyncToyデータ用フォルダにこの SyncToyDirPairs.bin ファイルを上書きコピーすれば良いだけです。
実際にコピーしてからSyncToyを起動してみると、下図のようにいつもの同期選択画面が出てきました。
今度は、「Welcome to SyncToy」とか挨拶されることもありません。
無事に記憶を取り戻したようです。(^_^;)
なお、バックアップデータと差し替えて起動した直後には、同期ペアを選択した画面の右下に「Last run at: 2019/02/04」などと表示されていました。(※差分バックアップ分を扱うのが面倒だったので、2月に取得したフルバックアップデータからサルベージしたため。)
どうやら、前回にいつ同期したのかという時刻情報も、この SyncToyDirPairs.bin ファイル内に保持されているようですね。
だから、毎回起動する度に書き換わるのでしょう。
知見:問題発覚後は、SyncToyを閉じる前に .bak ファイルを保護しておこう
解決して良かったです。
めでたし、めでたし。
バックアップは大切。
同様の問題に直面した方々へのアドバイスとしては、「SyncToyを終了させるよりも前に、まずフォルダからバックアップファイル SyncToyDirPairs.bin.bak をコピー&リネームして確保しておけ!」ということでしょうかね。^^;