[Windows] レジストリも自動でバックアップ

HDD/SSDの故障は突然やってきます。
Windows 10になってからはWindows Updateが強制になったため、Windows Updateの不具合が原因でOSが起動しなくなるというリスクも出てきました(Pro版ならグループポリシーで止められます)。

先日の、うちの開発機のOS入れ替えは後者が原因でした(Windows 7でしたが)。


幸いにして自動バックアップを行っていたので重要なファイルが失われることはありませんでした。

しかしレジストリは手動でたまにしかバックアップしていなかったため、レジストリを使用するタイプのアプリの設定はやり直すことになってしまい、完全復旧には時間がかかってしまいました。

実はレジストリをバックアップするだけならそれほど難しいものではありません。
簡単なBATファイルをタスクスケジューラーで呼び出すだけでできてしまいます。


まず、レジストリファイルを保存するためのファルダを作成します。
たとえば、”D:\reg_backups\”のようにします。

できれば物理的にOSが入ったドライブとは別のドライブが望ましいです。
同じドライブではハード故障の際にバックアップまで失われてしまうので意味がありません。
ノートPC等の1物理ドライブ環境でも、せめて論理ドライブは分けておきましょう。


“D:\reg_backups\”に、”reg_backup.bat”というテキストファイルを作成します。

@echo off
setlocal

set basedrv=D:
set basedir="D:\reg_backups"

set d0=%date: =0%
set t0=%time: =0%
set d1=%d0:~-10,4%%d0:~-5,2%%d0:~-2,2%
set t1=%t0:~0,2%%t0:~3,2%%t0:~6,2%

%basedrv%
cd %basedir%
mkdir "%d1%_%t1%"
cd "%d1%_%t1%"

reg export HKLM "HKLM_x64_%d1%_%t1%.reg" /reg:64 > nul 2>&1
reg export HKCU "HKCU_x64_%d1%_%t1%.reg" /reg:64 > nul 2>&1
reg export HKCR "HKCR_x64_%d1%_%t1%.reg" /reg:64 > nul 2>&1
reg export HKCC "HKCC_x64_%d1%_%t1%.reg" /reg:64 > nul 2>&1
reg export HKU   "HKU_x64_%d1%_%t1%.reg" /reg:64 > nul 2>&1

reg export HKLM "HKLM_x32_%d1%_%t1%.reg" /reg:32 > nul 2>&1
reg export HKCU "HKCU_x32_%d1%_%t1%.reg" /reg:32 > nul 2>&1
reg export HKCR "HKCR_x32_%d1%_%t1%.reg" /reg:32 > nul 2>&1
reg export HKCC "HKCC_x32_%d1%_%t1%.reg" /reg:32 > nul 2>&1
reg export HKU   "HKU_x32_%d1%_%t1%.reg" /reg:32 > nul 2>&1

basedrvにはドライブ名、basedirには保存先ファルダ名を入れます。

※x32という表現が気になる人はx86等に置き換えてください。
参考:acer  「32 ビットバージョンはときとして x32 または x86 と表示され…」


保存したら試しにbatファイルを右クリックして「管理者として実行」してみましょう。

レジストリの保存にはPCのスペックやレジストリサイズによって数十秒~数分かかるので、終わるまで気長に待ってください。
自動バックアップを想定しているので、コマンドプロンプトの画面には何も表示されません。何をしているか気になる場合は、1行目の”@echo off”の行を消してから実行してください(タスクスケジューラーに登録する際には”@echo off”を入れてください)。

batファイルの実行が終わると、保存先フォルダに「20171119_080439」のようなサブフォルダが作成されているはずです。
これはバックアップを作成した「年月日_時分秒」を意味します。


では、そのフォルダの中を覗いてみましょう。

中には「HKCC_x32_20171119_080439.reg」のようなファイルがいくつも作成されています。
これらはそれぞれ、レジストリ階層の親別のバックアップファイルです。
中身はテキストなので、テキストエディタで読むことができます。

ファイル名の先頭の3~4文字は以下の略称です。

HKCC = HKEY_CURRENT_CONFIG
HKCR = HKEY_CLASSES_ROOT
HKCU = HKEY_CURRENT_USER
HKLM = HKEY_LOCAL_MACHINE
HKU  = HKEY_USERS

続く”x64″は64ビットアプリ用、”x32″はWow6432Nodeと呼ばれる64ビットOSにおける32ビットアプリ用のレジストリデータです。

すべてのレジストリが64ビットと32ビットに分かれているわけではないのでバックアップの多くは重複することになりますが、極力漏らさず保存するためにこのようにしています。


このレジストリバックアップを定期的に自動で行うには、タスクスケジューラーを使う方法が簡単です。

設定方法についてはMicrosoftの以下の記事を参照してください。
“reg_backup.bat”を実行する間隔をトリガーで設定するだけです。

・タスクをスケジュールする
https://technet.microsoft.com/ja-jp/library/cc748993%28v=ws.11%29.aspx


ここから下はかなりの上級者向けの内容です。

保存されたレジストリの利用方法ですが、誤った使い方をするとそれが原因でトラブルが発生してしまうので、まずはレジストリについて十分な知識を身に着けてください。

最悪の場合、アプリの不具合やOS起動不能といった障害を引き起こします。
いつでもクリーンインストールできる覚悟を持ったうえで、自己責任で行ってください。


バックアップされたレジストリファイルをテキストエディタで開き、アプリのベンダー名やexeファイル名、インストールパス等で検索をかけると、そのアプリが使用しているレジストリの情報が見つかります。
レジストリが使われていなければ見つかりませんし、巧妙に隠されている場合もあるので、そういった場合は諦めてください。

基本的には「[HKEY_CURRENT_USER\SOFTWARE\ベンダー名\」か「[HKEY_LOCAL_MACHINE\SOFTWARE\ベンダー名\」にあります。
それ以外で見つかった場合はOSに関わる情報であることが多いので、それらは無視した方が無難です。

復旧したい情報が見つかったら、その部分を別のテキストファイルにコピーして、先頭の行に”REGEDIT4″という文字を付け加えます。
Windowsのバージョンによっては”REGEDIT4″の代わりに”Windows Registry Editor Version 5.00″とする場合もあります。

REGEDIT4

[HKEY_CURRENT_USER\Software\ベンダー名\アプリ名等]
"キー名"="データ"

このファイルの拡張子を”.reg”に変更してダブルクリックすると、レジストリに情報が登録されます。


アプリのコンフィグ等で膨大な設定項目がある場合、このようにレジストリから復旧すると再設定の手間を軽減することができます。

しかし、必ずしもこの方法が使えるというわけではなく、アプリによっては不具合の原因になることも考えられるので、レジストリの復旧には十分に注意してください。

またほとんどの場合、アクティベーション情報はこの方法では復旧できません。
まず通常の手順でアプリのインストールとアクティベーションを行い、アクティベーションに関わる部分を除いた設定情報のみを復旧するといった手順を踏む必要があります。


ちょっと怖い警告文も書いてしまいましたが、「[HKEY_CURRENT_USER\SOFTWARE\ベンダー名\」や「[HKEY_LOCAL_MACHINE\SOFTWARE\ベンダー名\」の下だけに限定すれば、レジストリはそれほど難しいものではありません。

むしろソフトウェア開発者であればいずれは触らなければならないものでもあるので、読み書きを経験しておくのも良いかと思います。

ただし、”Microsoft”や”Windows”とついたレジストリは避けましょう。
下手に書き換えると本当にOSが起動しなくなることがあります。