LoginSignup
1
3

More than 5 years have passed since last update.

異なるサイズのディスクイメージを dd で書き出した場合のリカバリー方法(GPT篇)

Last updated at Posted at 2017-02-02

はじめに

 私は、Asus FlipというChromeBookを使っていますが、この機種用にKaliLinuxのUSB(もしくはSD)ブートイメージが公開されています。8GbのUSBメモリー用のものです。
 これは、公式サイトの説明にもあるように、以下のようにしてUSBディスクに書き出して使います。

xzcatt kali-$version-veyron.img.xz | dd of=/dev/sdb bs=512k

 ディスクイメージは、ChromeOSの拡張GPTテーブルに対応したもので、パーテション1にブートイメージ、パーティション2にルートシステムと、2つのパーティションから構成されています。
 さてこのddを、異なるサイズのディスクに対して実行すると、どうなるでしょうか。

実験の結果

 たとえば、64GbのSDに対してこれを実行してみます。
 当たり前ですが、GPTディスクのセカンダリーGPTヘッダが不正な位置に書き込まれて、正常な状態にはなりません。
 もちろん、これは簡単に修復できます。

cgpt repair /dev/mmcblk1

 などと実行すれば、セカンダリーGPTヘッダが修復されて、正常に戻ります。
 これで終わりならば、そもそもこういう文書を投稿する意味もないのですが、実はさにあらず。
 上記で修復されて、確かに正常な状態に戻るのですが、この正常は、少しばかり悲しい正常なのです。
 なぜなら、64Gbの容量がありながら、全体を8GbのディスクとしてGPTが認識しているからです。

 cgptのrepairオプションで、ディスク容量も正常に書き換えてくれれば、こういう悲しいことにはならないのですが、どうもそのようなオプションは無いようです。
 では、他のコマンド、たとえばgdiskで修復したらどうでしょうか。
 実は、これをやるとさらに悲惨なことになります。
 gdiskは、不正なGPTを修復するにあたり、そこに書かれたすべての情報が不正だとみなし、一から新しいGPTを作成してしまいます。つまり、ディスクは初期化した状態となってしまいます。
 こういう状態に陥ったディスクは、どうやって修復するのだろう、といろいろ試してみました。
 もちろん、sgdiskはダメでした。また、GPTに対応済みのfdisk, sfdiskもダメでした。
 高度なオプションを駆使すれば、こうしたツールでも修復できるのかもしれませんが、私には分かりませんでした。

結論

 実は、簡単に修復できるツールがあります。
 gpartedです。
 起動すると、「このディスクは、容量を目一杯使えない設定になっているが、使えるようにするか?」と、聞いてきます。ここで、OKすると、GPTを修正して、64Gbまで使えるように修復してくれます。ただし、セカンダリーGPTの修復は、あらかじめcgptコマンドで済ませておく必要があります。

 もし、対象ディスクが一般的なGPTディスクならば、これで処理は終わりです。
 しかし、ChromeOS拡張に対応したGPTディスクの場合は、もうひと仕事必要です。

 実はgpartedは、非常にうまくディスクを修復してくれますが、ChromeOS拡張などというのは認識しません。
 つまり、priority, tries, successfulのパラメータを、すべて破壊してくれます。
 ということで、これらをcgptで復元する必要があります。パーティション情報のバックアップは、こういう時のために必要です。まあ、適当にブートできるような値を設定して、問題がなければそれでもいいのですが。

 つまり、最初からまとめますと、
 cgptによるセカンダリーGPTヘッダの修復 → gpartedによるディスク容量の修復 → cgptによるブート制御フラグの修復、ということになります。

 私は、64Gbのディスクを4つのパーティションに分割したかったのです。
 p1:kali-boot, p2:kali-root, p3:crouton(ubuntu), p4:data
 ということで、64Gbのディスクにkali8Gbイメージをわざと無理に書き込んだのです。

 もちろん、修復方法については、最初から知っていましたが。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3