treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(1/2)ブート情報を操作する技術メモ

今日はデュアルブート環境でブート情報を操作することがあったので、その時の備忘録をご報告します。
簡単に言うとbcdbootコマンドを使ってブートメニューを表示させる方法です。

発端

何かの拍子にデュアルブートしていたコンピュータのOSブートメニューが減ってしまいました。
いつもは、
図:いつものブートメニュー

f:id:treedown:20161118140745p:plain

このような感じでHyper-V ServerとWindows Serverの二つが表示されているはずが、
図:問題発生時

f:id:treedown:20161118140755p:plain

Windows Serverの表記が消えてしまいました。
ちなみに対処しているときにはHyper-V Serverが消えた、というのもあります。

構成

このPCでは内蔵ドライブにHyper-V ServerのOSをインストールし、c:\の特定フォルダにVHDを用意してWindows ServerをVHDブートしている、という環境です。
図:構成図

f:id:treedown:20161118140813p:plain

要するに評価版の検証目的なのでVHDブートで評価期間終了後はVHDを消して環境をきれいにできる、という狙いなのですが、こうデュアルブートしているとブート項目がなくなっちゃった、という状況です。

前提条件

これ以降の操作手順はどっちの手順においても、Windowsのシステム回復メニューから詳細オプションでコマンドプロンプトを選択して起動します。
図:回復メニューのコマンドプロンプト

f:id:treedown:20161118140840p:plain

この画面での操作、という前提で。

復旧その1

復旧その1は通常の内蔵ドライブにインストールしていたOSが表示からなくなった場合です。VHDブート側のOSは表記が残っているが内蔵ドライブにインストールしたOSの表記が消えてしまった、という場合。
ここの例では内蔵ドライブにインストールしていたのはHyper-V ServerというOSの方です。
この場合は実に簡単でして、、、
diskpartコマンドでディスクの状況を見ます。
--------------------------------------------------------------

DISKPART> list disk

ディスク    状態    サイズ  空き ダイナ GPT
###                   ミック 
------------    -------------  -------  -------  ---  ---
ディスク 0   オンライン 119 GB  46 B

DISKPART> list volume

Volume ###  Ltr   Label        Fs   Type    Size   Status Info
----------    ---   --------------------    ----   ----------   -------   --------- --------
Volume 0   C   システムで予約済み  NTFS  Partition  350 MB  正常
Volume 1   E              NTFS  Partition  72 GB    正常

DISKPART>exit
--------------------------------------------------------------
ここまでで、どういう状況か確認できたので、復旧させるためのコマンドを入れ込みます。
どうやらVHDブート側のOSパーティションは表示されないようで、混乱せずに済みました。
対象の(消えた)OSはEドライブとして認識しています。72 GBの容量のボリュームです。ここにWindowsフォルダが存在しています。ブート構成情報はCドライブに格納されています。つまり、CドライブにEドライブから起動するためのOS情報を書き込んでやることで、OSのブートメニューが元に戻ることになります。

----------------------------------------------
> bcdboot E:\windows /l ja-jp /s c:
----------------------------------------------

これだけを実行すればOKです。bcdbootコマンドで「E:\windows」にあるOS起動ファイルたちを使って起動するOS、という情報を/sオプションでcドライブに書込みしています。/lオプションでja-jpを指定するのは、指定しないとブートメニューがデフォルトのままで実行することで英語画面になってしまうため、です。

次のVHDブートメニューは

明日に続きます。