Manager難しいLVM?新しくサーバーを導入するのを機会にLVMを使ってみることにしました。LVM自体の導入はそれほど難しいものではなかったのですが、ルートパーティションをLVMと共に使おうとすると結構苦労するようです。8以降とか)では、インストールのときにlvmが使えるらしいので、こんな苦労は要らないのかもしれませんが。lvmを使ってみました。この1つのパーティションに仮想的に複数のファイルシステムを作れることに注目したかと言うと、今回はソフトウエアでRAID1(ミラー)を構成したのですが、lvmを使わずに、普通にパーティションを分割してファイルシステムを構築した場合、LinuxのソフトウエアRAIDでは、それぞれのパーティション毎にRAIDを構成しなければならず少々面倒ですが、lvmを使えば物理的には単一のRAIDディスクを作れば済んでしまいます。メモ今回は、富士通のRX100という1Uのラックマウントサーバーにインストールを行ないました。実は、このマシンを注文する時に、RAIDはソフトウエアで組むので、RAIDコントローラー無しの物を注文したはずなのですが、何故かFastTrack?が搭載されているモデルで、まずこれでつまづいてしまいました。最初は、仕方がないので真面目にFastTrack?用のドライバを組み込んで、これを利用しようかとも思ったのですが、現在はPromiseではバイナリしか用意さてれおらず、またパフォーマンスも低いとの事なので、これを使うのは止めにしました。Promiseのドライバを使わない場合には、FastTrack?のBIOS設定で構成をspanにし、ドライブを1台だけ割り当てれば通常のIDEコントローラーとして使用できます。1台目のHDDにLinuxをインストール取り敢えず、片方のディスクに普通にLinuxをインストールします。このインストールされたファイルを元に、2台目のディスクにlvmを使った環境を構築することにします。今回は、/bootとswapは通常のパーティションに作成し、これ以外のファイルシステムをlvmで構成することにしました。LVMこのうち、hdg1とhdg5をRAID1で二重化し、片方のディスクが壊れた場合には、もう一方のディスクで起動できるようにします。/etc/raidtabを編集/etc/raidtabを作成してRAID(ミラー)を構成します。md1)をアクティブにします。Native(0x82)にしてあるので、-R(--really-force)オプションをつけないと文句を言われます。md1(/dev/hdg5)は、パーティションのタイプがLVM(0x8e)なので、特に何もオプションをつけなくても大丈夫です。n今回は、ルートファイルシステム(/)までlvmで構成するのでinitrdを作り、この中でlvmのモジュールのロードとlv(論理ボリューム)のアクティベーションを行なうので、この記述は追加しなくとも問題ありませんが、もしファイルシステムの一部だけをlvmを使って構成し、initrdを使った論理ボリュームのアクティベーションをしないなら、この記述を行なうことで起動時に論理ボリュームのアクティベーションを行なえます。vgscanlvmをインストールしたら、vgscanを実行することでlvmに必要なディレクトリなどが作成されます。/dev/md1先程作成したRAIDディスク上に物理ボリュームを作成します。今回は、物理ボリュームを1つだけ作成しましたが、システムに複数のディスクが搭載されているなら、物理ボリュームを複数作り、これを1つにまとめて利用する事もできます。ボリュームグループでは、複数の物理ボリュームを一まとめにして仮想的に1つのボリューム(ディスクやパーティションのようなもの)として扱うことができます。ここでは、物理ボリュームは1つしかないので、raid1というボリュームグループに物理ボリューム/dev/md1を追加しています。物理ボリュームのブロックサイズを指定しています。1つの論理ボリュームでは、最大で65535のブロックしか扱えないので、物理ボリュームのブロックサイズを小さくしすぎると最大で扱えるボリュームサイズが小さくなってしまうし、大きくしすぎると無駄が多くなってしまいます。オプションの2番目はボリュームグループの名前です。ここでは、raid1という名称を付けていますが、利用目的に合わせて適当な名前を与えます。....vgcreateで作成したボリュームグループに論理ボリュームを作成します。lvmでは、この論理ボリュームが通常のパーティションの様に扱われます。後の値は、論理ボリュームに割り当てるボリュームグループ中の容量です。後の値は論理ボリュームの名前です。論理ボリュームを利用するときには、この名前を使いアクセスします。最後のパラメータは、論理ボリューム名を作成するボリュームグループの名前です。作成した論理ボリュームはlvscanコマンドで状態を確認できます。....一度、論理ボリュームを作成すれば、後は普通のパーティションと同じように扱えます。ここではext3ファイルシステムを作成していますが、reiserfsでも、ext2でも、あるいはminixでも、好きなフォーマットでファイルシステムを作れますが、lvmの動的にリサイズ可能な利点を考えたなら、ファイルシステムのフォーマットもリサイズ可能なものにするのが得策です。....1台目のディスクにインストールされているシステムをコピーするために、2台目のディスクに作成した論理ボリュームをマウントします。この例では、この後のinitrd作成作業などのことも考え、/mnt/misc以下に実際の運用時と同じ構成で論理ボリュームをマウントしています。}マウントした論理ボリュームへのシステムのコピーには定石通りtarを利用しました。/procや/mnt、/initrdなどの特殊なマウントポイントは-excludeで除外して、コピーが終った後で作成しています。今回は、ルートファイルシステムまで含めてlvmで構成しましたから、カーネルの起動時にinitrdを使いlv(論理ボリューム)をアクティブにしないとルートファイルシステムがマウントできません。Hat系のディストリビューションに標準で用意されているmkinitrdスクリプトでinitrdの作成を行ないます。/mnt/misc2台目のディスク(論理ボリューム)で起動した状態に合わせてinitrdを作成するために、chrootでコピーしたシステムを仮想的にルートにします。/procchrootした直後は/procがマウントされていないので、これをマウントします。mkinitrdでは、これを元にlvmが使われている事が検知されるので忘れずに。Hatの新しいものなどでは不要なのかもしれません。2.4.19-1.8h4.1mkinitrdコマンドで新しくinitrdを作成します。うまく起動できなかった場合に備えて、オリジナルのinitrdとは名前を変えて作成します。mkinitrdがちゃんとlvmに対応したものなら、lvmに対応したinitrdが作られるはずです。chrootを終了し、もとの環境に戻ります。/initrd-lvm-2.4.19-1.8h4.1.img※mkinitrdでinitrdのサイズを変更したなら、ramdiskのサイズに注意すること。標準だと4Kブロックまでのinitrdしかロード出来ないので、ramdisk=8192として容量を増やしている。ここまでの作業が終ったら、システムを再起動して、テスト用の設定を使いシステムを起動してみます。仕上げうまく起動するのを確認したら、2台目のディスク(lvmで構築した方)でシステムを起動して、1台目(元のシステム側)のディスクのパーティションを切り直します。※この手順を失敗すると、システムを立ち上げられなくなってしまう可能性が大きいので、grubやliloなどの起動ディスクを作っておくと安心です。今回のケースでは、2台のディスクでミラーを行なうので、1台目のディスクも2台目と同じ構成でパーティションを作成します。これで、1台目のディスクは以前と構成が変わってしまったので、下手をすればgrubはうまく動いてくれないかもしれません。次に、/etc/raidtabを編集して、/bootファイルシステム(md0)のfailed-diskをraid-diskに変更し、/dev/hde1をアクティブにします。/dev/hde1パーティションのサイズにもよりますが、暫くすると2台目のディスク(/dev/hdg1)の内容が1台目のディスク(/dev/hde1)にコピーされるはずです。/proc/mdstatの内容でミラー処理の進行具合を確認できます。状態となれば大丈夫です。