Windowsの(NTFS)起動パーティションの移動とHidden Sectors

作業した時にはさんざん困ったのに、メモを残していなかったので、有用であれ、という意図のもとに公開メモとします。

以下Unixのddユーティリティを普通に使える程度のスキルを想定した説明です。

NTFSパーティションは、ddでまるごとコピーしても一応問題なく読み書きできるようですが(ntfsprogsにあるユーティリティを使うと、未使用セクタを除いた穴開きファイルにすることもできる)、起動パーティションとして使う場合は修正が必要です。

具体的にはパーティションの先頭セクタ(PBR)中にあるBIOS Parameter Block(BPB)内のHidden Sectorsという要素の値で、場所はPBRの先頭からのオフセットで0x1C~0x1Fの4バイトです。ここにはそのパーティション自身の位置(名前としては、ディスクの先頭からその直前のセクタまでのセクタ数)が書き込まれています(作業される際は、作業を始める前に元の状態でどうなっているか、よく確認してください)。

マイクロソフトの技術資料では、単に「使われていない」としているようですが、Windows自身は参照しないのかもしれませんが、ブートプロセス中で使っているため、これを正しくしないと、ブートできません。

ここの値は、なぜかWindows添付のユーティリティ類や修復機能では再設定できるものが無いようで(サードパーティ製品にはあるらしい)、作業者が手作業で書き換える必要があります。

具体的方法は、ddでの作業ができる人であれば特に問題ないと思いますが、ddでパーティションの先頭セクタを読出してファイルにし、バイナリエディタ等で書換え、書戻す、という感じになるでしょう。