この記事を読むのに必要な時間は約 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
今回は以上です。