今回は、バックアップ時に MBR形式だったものを、GTP形式としてリカバリする方法を紹介します。実は本件、バックアップ・リカバリの検証中に発見し「いいブログのネタになる!」と思ったてワクワクしていたのですが、書く前に少し調べたらバックアップ・リカバリの作業をしなくても、 powershell 上から mbr2gpt.exe というものを起動して変換できるようです。そのやり方は以下を参照してください(当方では未検証です)。
https://docs.microsoft.com/ja-jp/windows/deployment/mbr-to-gpt
ということで、「リカバリのためのHDDを大きなものに載せ替えたので GPT形式でリカバリしたい」なんてニーズにお応えするのにこの記事が参考になればうれしいです。
バックアップ方法や通常のリカバリは以下の過去記事を参考にしてください。この記事では 1回目の記事でリモートにバックアップしたバックアップデータを利用して進めますので、1回目のバックアップ方法に関しては目を通しておいてください。
過去記事はこちら↓↓↓(上から順番に 1回目~)
MBR と GPT についておさらい
この記事に検索でたどり着いた方は、こんなことおさらいしなくても GPT で利用したい意図があるのでご存知でしょうから、この章は飛ばしてもらってよいと思います。
確認のためおさらい程度に私の理解で記載しておくと、
MBR(Master Boot Record):
- 昔からある形式。BIOS は MBR形式しかブートできない。
- 容量は2TBまでサポートしており、パーティションの数はプライマリパーティションが最大で4つまで(うち 1つを 拡張パーティションとすれば、論理パーティションは無数にもてる)。
- BIOS が起動するのは active なプライマリパーティションに存在する OS ローダ。
GPT(Globally Unique IDentifier Partition Table):
- 比較的新しい形式。BIOS からはブートできない(UEFI が必要)。
- 容量は8ZB(ゼタバイト)までサポートしており、最大で128個のプライマリパーティションを作成できる。
- UEFI が起動するのは FAT でフォーマットされた EFIシステムパーティションに存在する UEFI アプリケーション(OS ローダ)。ブートするのは 64bit OS である必要がある。
リカバリと GPTへの変換
今回は、VirtualBoxで EFI を有効にし、新しくディスクを用意しました。実PCの場合も、BIOS から UEFI ブートへ変更する必要があります。
事前準備
前回と同じでWindows のインストールメディアか、Windows RE(PEでも可?) を準備します。該当するOSで、リカバリを作っておくなど、バージョンはリカバリーするものに揃えておいたほうがベターだと思いますが、実際そんなベストコンディションはまれだと思うので、この実験では手元にあった Windows 10 の 1709 のインストールメディアを使っています。(特に問題はありませんでした。)
※ 別途 RE や PE の環境でSMB1.0を有効にする方法を検証中です。
リカバリするPC:192.168.56.10/24
バックアップのあるNAS:192.168.56.30/24
バックアップの version:03/28/2019-03:44
以下のコマンドで、パーティションを2つ作成します。efi のパーティションサイズは実は適当です。手持ちの UEFI で動作している PC が 100M と 360M があったので、大きいほうに合わせています。ここでは、ひとまず動くことを目標にしていますので、より詳しくは別のサイトも参考にしてみてください。
format quick fs=fat32 label=system
assign letter=s
create partition primary
format quick fs=ntfs label=windows
assign letter=c
start recovery を用いた C: ドライブのリカバリ
wbadmin get items を利用して、バックアップ時にC: ドライブがマウントされていたディスクのIDを取得します。
以下のコマンドで、C: ドライブにマウントされていた ボリューム だけを、diskpart で c にassign letter した volume 書きだします。(※ この時に、MBR形式時にとったバックアップが GPT形式のディスクに書きだされます。)
-items:で指定するのは、C:ドライブにマウントされていたもののデバイスIDになります。
-recoverytarget:で指定するのは、diskpart で作成し、assign letter=c で指定した文字列になります。(ここでは、c)