GPTヘッダのクリア
By
yuzurihara
FreeBSDのバージョンを8.3にするタイミングで、gstripeで使用していたディスクをZFSで使用するようにしました。 ディスクの初期化を怠ったら、ZFS移行後にgeomからのエラーが出力されるようになってしまいました。 GEOM: ada1: the primary GPT table is corrupt or invalid. GEOM: ada1: using the secondary instead -- recovery strongly advised. GEOM: ada2: the primary GPT table is corrupt or invalid. GEOM: ada2: using the secondary instead -- recovery strongly advised. GEOM_STRIPE: Device gsswap created (id=1066737235). GEOM_STRIPE: Disk ada1p1 attached to gsswap. GEOM_STRIPE: Device gsdblog created (id=1610477017). GEOM_STRIPE: Disk ada1p2 attached to gsdblog. GEOM_STRIPE: Disk ada2p1 attached to gsswap. GEOM_STRIPE: Device gsswap activated. GEOM_STRIPE: Disk ada2p2 attached to gsdblog. GEOM_STRIPE: Device gsdblog activated. GEOM_STRIPE: Cannot add disk gptid/e39d0db3-ce0e-11e0-8ce8-001fd0c05e6b to gsswap (error=17). GEOM_STRIPE: Cannot add disk gptid/e5df9c90-ce0e-11e0-8ce8-001fd0c05e6b to gsdblog (error=17). GEOM_STRIPE: Cannot add disk gptid/35867e75-ce0e-11e0-8ce8-001fd0c05e6b to gsswap (error=17). GEOM_STRIPE: Cannot add disk gptid/38becac6-ce0e-11e0-8ce8-001fd0c05e6b to gsdblog (error=17). GEOM_STRIPE: Disk ada1p2 removed from gsdblog. GEOM_STRIPE: Device gsdblog removed. GEOM_STRIPE: Disk ada1p1 removed from gsswap. GEOM_STRIPE: Device gsswap removed. GEOM_STRIPE: Disk ada2p2 removed from gsdblog. GEOM_STRIPE: Device gsdblog destroyed. GEOM_STRIPE: Disk ada2p1 removed from gsswap. GEOM_STRIPE: Device gsswap destroyed. 上がdmesgの該当部分の抜粋です。 どうやら、geomのメタデータとGPTの情報が両方とも生き残っているようです。 ちなみにZFSでは次のように、ディスク全体を使用しています。 # zpool status zusr pool: zusr state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zusr ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 errors: No known data errors gstripeコマンドでgeomのメタデータを消してみました。 が、以下のようにあえなく失敗。 zpoolをexportした状態ではメッセージが変化するものの、エラーで失敗のままです。 # gstripe clear -v ada1 Can't clear metadata on ada1: Operation not permitted. gstripe: Not fully done. # zpool export zusr # gstripe clear -v ada1 Can't clear metadata on ada1: Invalid argument. gstripe: Not fully done. geomのメタデータはパーティションごとに書かれるようなので、 パーティション自体を削除する方針に変えました。 ただ、gpart destroyもエラーを出すだけなので、ディスクの管理情報を直接削除します。 GPTではMBRの次のセクター(LBA1)にパーティションの情報を格納しているので、そこをゼロフィルしました。 すでにZFSで使用中のディスクなので、この方法はすこし乱暴ですが、zpool create後でも、GPTの情報が残ってしまっているということは、 LBA1は(まだ)ZFSによって使用されていないということなので、大丈夫でしょう。 # dd if=/dev/zero of=/dev/ada1 bs=512 count=1 skip=1 # dd if=/dev/zero of=/dev/ada2 bs=512 count=1 skip=1 上のようにコマンドを実行して、LBA1から1セクタ分をゼロで埋めます。 引数のskip=1が「LBA1から」、count=1が「1セクタ分」、また、bs=512が 1セクタのサイズ(512バイト)を表しています。 実行後に再起動すると、geomからのエラーは出力されなくなりました。 念のため、zpool scrubコマンドでZFSの情報が壊れていないことを確認します。 scrubが完了した後、ステータスを表示すると以下のようになりました。 # zpool status zusr pool: zusr state: ONLINE scan: scrub repaired 0 in 0h2m with 0 errors on Mon May 21 21:30:11 2012 config: NAME STATE READ WRITE CKSUM zusr ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 ada1 ONLINE 0 0 0 ada2 ONLINE 0 0 0 errors: No known data errors 問題ありませんでした。 [おわり]
Read more