GPT table is corrupt or invalid というエラーメッセージが出た際の対処

この記事を読むのに必要な時間は約 5 分です。

FreeNAS を 9.2 → 9.3 に更新する際にあれこれやっていたら、以下のエラーメッセージが出てしまいました。

GEOM: da1: the secondary GPT table is corrupt or invalid.
GEOM: da1: using the primary only -- recovery suggested.

以下のコマンドを実行することで、取り敢えず治ったようですので、メモしておきたいと思います。

# gpart recover da1
da1 recovered

環境

OS : FreeNAS 9.3

Disk : USB メモリ (da0, da1 の 2つを挿入)

何をしていたか

FreeNAS 9.3 で、システム用 USB メモリの二重化用に、ミラー pool を作成しようとしていました。

FreeNAS 9.3 インストール済みの USB メモリ (da0) で起動し、gpart で、ミラーに追加しようとしている USB メモリ (da1) のパーティションを切って、glabel でラベルを付与していました。

da1 を da0 と同じようにパーティションを切って、glabel でラベル付与する際に、#glabel label xxx da1p2 とすべきところを、先に誤って #glabel label yyy da1  としてしまいました。

構わず、#zpool attach freenas-boot 999999 label/xxx  等とミラーへ追加していたりしたら、気がついたら冒頭のエラーメッセージが出ていました。

gpart show  で見てみても [CORRUPT] と表示されています。

[user@nas] ~> gpart show da1
=>      34  15950525  da1  GPT  (7.6G) [CORRUPT]
        34      1024    1  bios-boot  (512k)
      1058         6       - free -  (3.0k)
      1064  15819703    2  freebsd-zfs  (7.6G)
  15820767    129792       - free -  (63M)

エラーの内容としては、GPT table は、primary (ディスクの頭) と secondary (ディスクのおしり) と 2 つ保持していて、secondary がおかしいよ、primary のみを利用するけど、recovery 推奨だよ、ということのようです。

gpart recovery  というコマンドがあるようですので、実行してみたら、治りました。

/dev/label/ を見てみると、da1 に設定していた yyy というラベルはなくなり、da1p2 に設定していた xxx というラベルのみが残っています。

gpart show  で確認してみると、[CORRUPT] は消えています。

[root@nas] ~# gpart show da1
=>      34  15950525  da1  GPT  (7.6G)
        34      1024    1  bios-boot  (512k)
      1058         6       - free -  (3.0k)
      1064  15819703    2  freebsd-zfs  (7.6G)
  15820767    129792       - free -  (63M)

gpart recovery が出来ない場合

システムで利用していて、 device busy の場合は、以下のような方法があるかも知れません。

  • 対象をアンマウントする。
  • zfs 等であれば、detach して一旦切り離す。
  • システムをシャットダウンして、VM 等の別システム上で認識させ、マウントしないで recovery する。

最終手段としては、dd を利用して、gpt table を直接消去して、作成し直す方法になるかも知れません。以下をご参考に。

HDDを増設したところGPTテーブルが壊れた – 嫁がEmacsを使いたいなんて言い出すから

参考

SOLVED – GPT table is corrupt or invalid error on bootup | FreeNAS Community


今回は以上です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です