2011-08-26

RAIDやLVMが設定されたHDを初期化する方法

Linux によるソフトウェアRAIDやLVMは、HD上のパーティションにメタデータという形で設定を書き込む。これによってHDをマシン間で移動したときなどでも設定ファイル無しに復元できることになる。

ただ、このメタデータは明示的に消去しないとHDを再フォーマットしてもそのまま残り続けて、再度のRAIDやLVMの設定に問題を起こすことがある。例えばインストーラがRAIDやLVMパーティションを誤検知してしまい、訳のわからないことが起こることがある。

Ubuntu のインストーラを用いてこのようなHDをリセット(再初期化)する方法を紹介する。起動ディスクとしてはUbuntuデスクトップインストーラまたはサーバインストーラを用いる。

$ sudo apt-get update
$ sudo apt-get install mdadm

Ubuntuサーバインストーラを使う場合はmdadmが入っているので、レスキューモードを選んでシェルに抜けるだけでよい。

では消去を実行しよう。mdadm には--zero-superblockというオプションがあって、これがメタデータを消去してくれる。

$ for a in /dev/sd[ab]?*; do sudo mdadm --zero-superblock $a; done

LVMも設定している場合は、各パーティションの先頭あたりをきれいにすればよい(lvremoveなどを用いたもっとスマートな方法があるはずだが調べるのが面倒だった...)。

$ for a in /dev/sd[ab]?*; do sudo dd if=/dev/zero of=$a bs=1M count=1; done

この方法で重要なのは、パーティション情報を消去する前に行う必要があるということだ。メタデータの場所はパーティションに対して位置が決まっているからである。もしパーティションを初期化してしまった場合、パーティションの分割を覚えているなら同じ分割でパーティションを設定すれば問題ない。覚えていないならメタデータがありそうな場所(あるいはHD全体)を0で埋める方法をとる必要があるだろう。

メタデータの場所

メタデータがパーティションのどこにあるかを調べてみた。以下のようになっている。

  • RAIDでmetadata=0.9の場合: パーティションのお尻から128K〜64Kの範囲で、64Kアラインされている位置から4Kぶん。
  • RAIDでmetadata=1.xの場合、xによって位置が異なる: 1.0はお尻、1.1は頭、1.2は頭から4Kの場所に位置する(アラインについては不明)。
  • LVMのメタデータはパーティションの先頭にある(RAID上のLVMの場合はもちろんRAIDのメタデータの内側)。

References

RAIDのメタデータの位置について: [RAID superblock formats - Linux Raid Wiki]

LVMのメタデータの位置について: [LVM-on-RAID - The Linux Documentation Project]

0 件のコメント:

コメントを投稿