LVMってそもそもなんなのさ!? [Linux(LVM/RAID/Storage)]
…と、タイトルみたいな質問をされたのですが、そういえばここには「そもそも…」という話を書いてなかったので、良い機会なので書いておこうかなと思う。
とはいえ、LVMについては他のサイトでもいろいろ解説記事は書かれているのでどの程度書くか…というところが難しいところではあるんだけども。(笑)
LVMというのは、まあ要するに「動的かつ自在にディスクのパーティションを変更できる仕組み」とでも理解してもらうのがとっても簡単かと思う。(多少の補足は必要だけどもね)
ディスクのパーティションというと、Linuxならばfdiskとかpartedとかがぱっと出てくると思うんだけども、LVMもまあこいつらみたいな機能を持っている。fdiskやpartedでも一応パーティションのサイズを広げたり縮小したりすることは出来るけども、その場合は原則的に「連続した領域」でなければならないところ、LVMにはそういった制限が無い。
例えば、あるディスクにパーティションが3個あったとして、それぞれをsdc1、sdc2、sdc3だったとします。通常、1から順にディスクの先頭からパーティションを割り付けて行きます。たとえばこんな感じに。
シリンダ番号(StartとEndのところの数値)が隣接している状態なので、この状態でsdc2を拡張したい!ということになっても、そのままでは拡張できず、sdc3を一旦開放してからsdc2を拡張し、その後にsdc3を再度作成みたいなことをしないといけなくなる。ということは、sdc3が使用中だったりすると、その中身を一旦どこかに待避するなどの作業が必要になってしまう訳。
Windows等の場合には、市販のソフトでそういう操作を全部自動でやってくれるものがあるけども、Linuxの場合にはLVMがそれをやってくれる…ということになる。
また、LVMが突出して優れているのはパーティションを複数のディスクにまたがって作成できるという点。
つまり、この点を強調すると、容量の小さな複数のディスクを1個の大きなディスクに束ねる…みたいな使い方もできるよ!ということ。
ここで、「それってRAIDコントローラが持ってるようなJBOD(スパニング)と何が違うのよ!」という質問が当然に出てくると思うのですが、効能的にはぶっちゃけ一緒です。(笑)ハードRAIDなコントローラにお任せしてしまえばCPUに負荷が掛からないのに対して、LVMだとその辺の処理を全部CPUがやることになるので負荷的には不利と言えば不利になります。が、LVMだとディスクの容量を動的に変更できる点がJBOD(スパニング)に対して優位であると言うことも出来るでしょう。
JBOD(スパニング)の場合にディスクを追加して全体の容量を拡張したいなんて場合には、それこそ先ほどのfdiskやpartedでパーティションのサイズ変更をするのと同じような話になってしまう。つまり、そのディスク上にあるデータを一旦全部どけてからRAID(JBOD)を再構築しなおして…というハメになる訳ですよもう。しかし、LVMだったらディスクを増設したらそのディスクを次々と追加すればよい訳。
また、よっぽどその筋な人でもない限りは、そんな上等なRAIDコントローラカードなんて使わないだろうけども、LVMでディスクを束ねるにあたっては、ディスクを接続するインタフェースをまったく選ばないという点も大きな魅力になってくる。昔からあるパラレルATAだろうと、シリアルATAだろうとIEEE1394接続したディスクだろうとUSB接続したディスクだろうと、Linux上から認識できるディスクはすべからくLVMの管理下に置いてディスクを束ねたり、束ねたディスクから自在にパーティションを切り出して使うことが出来るという訳。
まあ、会社などでビジネスに使うにはアレかもしれないけども、自宅で個人的にLinuxを使ってファイルサーバにする…なんていうケースにおいてはこれほどありがたい物は他にないかもしれない。それくらい、便利な仕組みだったりするんだなこれが。
で、LVMを使うにあたっては特徴的な用語を覚える必要がある。他のサイトでもいろいろと解説されているけども、念のためここにも記載しておく。
① 物理ボリューム
「PV」と省略されて記述されることが多い。要するに、ハードディスクそのものを言うと覚えてもらっても構わないと思う。この物理ボリュームを単位としてLVMの制御下に置くこととなる。ハードディスク全体をLVMの制御下に置くこともできるし、ハードディスクの領域を部分的にLVMの制御下に置くこともできる。その場合は、fdiskやpartedでハードディスクそのものに一度パーティションを切っておき、そのパーティションに対して物理ボリュームを作成する(割り当てる)ことになる。
Linuxをインストールする際にはLVMを使ってディスクを構成することが標準になっているけども、その際、Linuxのインストーラはブートディスクの「/boot」領域をLVMの制御下に置かず、それ以外の領域をLVMの制御下に置くようにセットアップしている。参照してもらうと分かり易いかもしれない。
ちなみに、物理ボリュームの操作に関連するコマンドの多くは、「pv」で始まるコマンド名となっている。
② ボリュームグループ
「VG」と省略されて記述されることが多い。1個以上の物理ボリュームをまとめて一つのボリュームグループを構成する。1個以上の物理ボリュームをまとめて1個の大きなディスクを仮想的に作っていると思えばよく、このボリュームグループが要するにRAIDでいうJBOD(スパニング)が構成された状態…みたいな感じになっている。
ボリュームグループの操作に関連するコマンドの多くは、「vg」で始まるコマンド名となっている。
③物理エクステント
「PE」と省略されて記述されることが多い。LVMはこの物理エクステントを最小の単位として、容量を管理している。要するに、物理エクステントという名前のカゴが沢山ある状態…だと思ってもらうとよい。
物理ボリュームの中をたくさんの物理エクステントに分割している。標準の状態では物理エクステント1個につき4MBで割り当てられている。この大きさはボリュームグループを作成するときに自由に変更することが出来る他、ボリュームグループを作成した後であっても、条件付きで動的に変更することもできる。まあ、ぶっちゃけ今時のハードディスクをLVMの制御下に置くには4MBなんて容量は小さすぎる気がするので、もっと大きな数値にするのが良いと思う。
ちなみに、LVMが自在にパーティションのサイズを変更できる理由も、この物理エクステントにある。パーティションの管理をハードディスクに固有の「シリンダ」でなく、物理エクステントを単位として管理しているため、パーティションが作成されている物理エクステントの位置そのものは連続している必要性が全くない上に、同一のディスク上にある必要性も無い。このため、パーティションを拡張するにしても、ボリュームグループの中に空いている物理エクステントがあればいつでもパーティションの拡張は可能ということになる。
④論理ボリューム
「LV」と省略されて記述されることが多い。論理ボリュームとは、要するに「パーティション」と似たものだと思ってもらえばほぼ問題ないかとおもう。最終的に作成された、この論理ボリュームに対してファイルシステムを作成する操作をする。これはまさに、ハードディスクにfdiskやpartedで作成したパーティションに対してファイルシステムを作成する操作をすることを思えば理解しやすいと思う。
論理ボリュームの大きさは動的に変更することが可能。1点だけ要注意なのは、論理ボリュームを拡張したからといって、ファイルシステムの大きさが自動的に広がるわけではないということ。論理ボリューム(やパーティション)≠ファイルシステムであることに留意が必要。
論理ボリュームの操作に関するコマンドの多くは「lv」で始まるコマンド名になっている。
細かいことはLVMの構築方法(基本編)をみてもらうとして。
LVMを実際に使うための流れとしては…
①LVMの使用に必要なパッケージのインストール(の確認)
②ハードディスクの接続
③接続したハードディスクに物理ボリュームを作成する
④ボリュームグループを作成し、そこに先ほど作成した物理ボリュームを登録する
⑤ボリュームグループから論理ボリュームを切り出す
⑥論理ボリュームにファイルシステムを作成し、マウントして使う
というような手順を踏むことになる。
まあ、「①」については、よほど変なディストリビューションだったり古いバージョンだったりしない限りは問題ないと思うが、念のため確認しておこう。
LVMのパッケージがセットアップされていることがこれで確認できる。
「②」は特に説明不要だと思うのでパス。まあ、接続したハードディスクがLinuxで認識されていることを確認しておこおう。方法は「/proc/partitions」の中をcatコマンドなどで見てみればよい。
他にdmesgとかも見ておこうね。
きちんと認識できているようなら、物理ボリュームを作成してボリュームグループを作成して論理ボリュームを作成してファイルシステムを作成してマウントして/etc/fstabを変更して完了。詳しい手順・コマンドについてはもう面倒くさくなってきたのでLVMの構築方法(基本編)を参照しる。
最後に、LVMとRAIDとの比較を簡単にまとめておく。まあ、参考程度に…ということで。
とはいえ、LVMについては他のサイトでもいろいろ解説記事は書かれているのでどの程度書くか…というところが難しいところではあるんだけども。(笑)
LVMというのは、まあ要するに「動的かつ自在にディスクのパーティションを変更できる仕組み」とでも理解してもらうのがとっても簡単かと思う。(多少の補足は必要だけどもね)
ディスクのパーティションというと、Linuxならばfdiskとかpartedとかがぱっと出てくると思うんだけども、LVMもまあこいつらみたいな機能を持っている。fdiskやpartedでも一応パーティションのサイズを広げたり縮小したりすることは出来るけども、その場合は原則的に「連続した領域」でなければならないところ、LVMにはそういった制限が無い。
例えば、あるディスクにパーティションが3個あったとして、それぞれをsdc1、sdc2、sdc3だったとします。通常、1から順にディスクの先頭からパーティションを割り付けて行きます。たとえばこんな感じに。
デバイス Boot Start End Blocks Id System /dev/sdc1 1 25 200781 83 Linux /dev/sdc2 26 286 2096482+ 83 Linux /dev/sdc3 287 4421 33214387+ 83 Linux
シリンダ番号(StartとEndのところの数値)が隣接している状態なので、この状態でsdc2を拡張したい!ということになっても、そのままでは拡張できず、sdc3を一旦開放してからsdc2を拡張し、その後にsdc3を再度作成みたいなことをしないといけなくなる。ということは、sdc3が使用中だったりすると、その中身を一旦どこかに待避するなどの作業が必要になってしまう訳。
Windows等の場合には、市販のソフトでそういう操作を全部自動でやってくれるものがあるけども、Linuxの場合にはLVMがそれをやってくれる…ということになる。
また、LVMが突出して優れているのはパーティションを複数のディスクにまたがって作成できるという点。
つまり、この点を強調すると、容量の小さな複数のディスクを1個の大きなディスクに束ねる…みたいな使い方もできるよ!ということ。
ここで、「それってRAIDコントローラが持ってるようなJBOD(スパニング)と何が違うのよ!」という質問が当然に出てくると思うのですが、効能的にはぶっちゃけ一緒です。(笑)ハードRAIDなコントローラにお任せしてしまえばCPUに負荷が掛からないのに対して、LVMだとその辺の処理を全部CPUがやることになるので負荷的には不利と言えば不利になります。が、LVMだとディスクの容量を動的に変更できる点がJBOD(スパニング)に対して優位であると言うことも出来るでしょう。
JBOD(スパニング)の場合にディスクを追加して全体の容量を拡張したいなんて場合には、それこそ先ほどのfdiskやpartedでパーティションのサイズ変更をするのと同じような話になってしまう。つまり、そのディスク上にあるデータを一旦全部どけてからRAID(JBOD)を再構築しなおして…というハメになる訳ですよもう。しかし、LVMだったらディスクを増設したらそのディスクを次々と追加すればよい訳。
また、よっぽどその筋な人でもない限りは、そんな上等なRAIDコントローラカードなんて使わないだろうけども、LVMでディスクを束ねるにあたっては、ディスクを接続するインタフェースをまったく選ばないという点も大きな魅力になってくる。昔からあるパラレルATAだろうと、シリアルATAだろうとIEEE1394接続したディスクだろうとUSB接続したディスクだろうと、Linux上から認識できるディスクはすべからくLVMの管理下に置いてディスクを束ねたり、束ねたディスクから自在にパーティションを切り出して使うことが出来るという訳。
まあ、会社などでビジネスに使うにはアレかもしれないけども、自宅で個人的にLinuxを使ってファイルサーバにする…なんていうケースにおいてはこれほどありがたい物は他にないかもしれない。それくらい、便利な仕組みだったりするんだなこれが。
で、LVMを使うにあたっては特徴的な用語を覚える必要がある。他のサイトでもいろいろと解説されているけども、念のためここにも記載しておく。
① 物理ボリューム
「PV」と省略されて記述されることが多い。要するに、ハードディスクそのものを言うと覚えてもらっても構わないと思う。この物理ボリュームを単位としてLVMの制御下に置くこととなる。ハードディスク全体をLVMの制御下に置くこともできるし、ハードディスクの領域を部分的にLVMの制御下に置くこともできる。その場合は、fdiskやpartedでハードディスクそのものに一度パーティションを切っておき、そのパーティションに対して物理ボリュームを作成する(割り当てる)ことになる。
Linuxをインストールする際にはLVMを使ってディスクを構成することが標準になっているけども、その際、Linuxのインストーラはブートディスクの「/boot」領域をLVMの制御下に置かず、それ以外の領域をLVMの制御下に置くようにセットアップしている。参照してもらうと分かり易いかもしれない。
ちなみに、物理ボリュームの操作に関連するコマンドの多くは、「pv」で始まるコマンド名となっている。
② ボリュームグループ
「VG」と省略されて記述されることが多い。1個以上の物理ボリュームをまとめて一つのボリュームグループを構成する。1個以上の物理ボリュームをまとめて1個の大きなディスクを仮想的に作っていると思えばよく、このボリュームグループが要するにRAIDでいうJBOD(スパニング)が構成された状態…みたいな感じになっている。
ボリュームグループの操作に関連するコマンドの多くは、「vg」で始まるコマンド名となっている。
③物理エクステント
「PE」と省略されて記述されることが多い。LVMはこの物理エクステントを最小の単位として、容量を管理している。要するに、物理エクステントという名前のカゴが沢山ある状態…だと思ってもらうとよい。
物理ボリュームの中をたくさんの物理エクステントに分割している。標準の状態では物理エクステント1個につき4MBで割り当てられている。この大きさはボリュームグループを作成するときに自由に変更することが出来る他、ボリュームグループを作成した後であっても、条件付きで動的に変更することもできる。まあ、ぶっちゃけ今時のハードディスクをLVMの制御下に置くには4MBなんて容量は小さすぎる気がするので、もっと大きな数値にするのが良いと思う。
ちなみに、LVMが自在にパーティションのサイズを変更できる理由も、この物理エクステントにある。パーティションの管理をハードディスクに固有の「シリンダ」でなく、物理エクステントを単位として管理しているため、パーティションが作成されている物理エクステントの位置そのものは連続している必要性が全くない上に、同一のディスク上にある必要性も無い。このため、パーティションを拡張するにしても、ボリュームグループの中に空いている物理エクステントがあればいつでもパーティションの拡張は可能ということになる。
④論理ボリューム
「LV」と省略されて記述されることが多い。論理ボリュームとは、要するに「パーティション」と似たものだと思ってもらえばほぼ問題ないかとおもう。最終的に作成された、この論理ボリュームに対してファイルシステムを作成する操作をする。これはまさに、ハードディスクにfdiskやpartedで作成したパーティションに対してファイルシステムを作成する操作をすることを思えば理解しやすいと思う。
論理ボリュームの大きさは動的に変更することが可能。1点だけ要注意なのは、論理ボリュームを拡張したからといって、ファイルシステムの大きさが自動的に広がるわけではないということ。論理ボリューム(やパーティション)≠ファイルシステムであることに留意が必要。
論理ボリュームの操作に関するコマンドの多くは「lv」で始まるコマンド名になっている。
細かいことはLVMの構築方法(基本編)をみてもらうとして。
LVMを実際に使うための流れとしては…
①LVMの使用に必要なパッケージのインストール(の確認)
②ハードディスクの接続
③接続したハードディスクに物理ボリュームを作成する
④ボリュームグループを作成し、そこに先ほど作成した物理ボリュームを登録する
⑤ボリュームグループから論理ボリュームを切り出す
⑥論理ボリュームにファイルシステムを作成し、マウントして使う
というような手順を踏むことになる。
まあ、「①」については、よほど変なディストリビューションだったり古いバージョンだったりしない限りは問題ないと思うが、念のため確認しておこう。
[root@chihiro ~]# rpm -qa | fgrep lvm lvm2-2.02.32-4.el5
LVMのパッケージがセットアップされていることがこれで確認できる。
「②」は特に説明不要だと思うのでパス。まあ、接続したハードディスクがLinuxで認識されていることを確認しておこおう。方法は「/proc/partitions」の中をcatコマンドなどで見てみればよい。
[root@chihiro ~]# cat /proc/partitions major minor #blocks name 8 0 97685784 sda 8 1 265041 sda1 8 2 2096482 sda2 8 3 95321677 sda3 8 32 1271591496 sdc 8 33 1271584881 sdc1 8 16 1953546336 sdb 8 17 1953544131 sdb1 8 64 1122630768 sde 8 65 1122630201 sde1 8 80 1465159752 sdf 8 81 1465152066 sdf1 8 48 625142448 sdd 8 49 625137313 sdd1
他にdmesgとかも見ておこうね。
きちんと認識できているようなら、物理ボリュームを作成してボリュームグループを作成して論理ボリュームを作成してファイルシステムを作成してマウントして/etc/fstabを変更して完了。詳しい手順・コマンドについてはもう面倒くさくなってきたのでLVMの構築方法(基本編)を参照しる。
最後に、LVMとRAIDとの比較を簡単にまとめておく。まあ、参考程度に…ということで。
比較項目 | LVM | RAID JBOD | RAID 0 |
---|---|---|---|
最初の構築 | 少しとっつきにくい | 割と簡単 | 難しくはない |
容量増設 | 簡単で動的にできる | 面倒で動的には出来ない | 面倒で動的には出来ない |
速度 | たかがしれてる | たかがしれてる | ハードRAIDならディスク本数が多いほど高速 |
信頼性 | 高くない。LVMミラーリングも出来るけど… | 高くない | 1本飛んだら全滅 |
費用面 | チープに構築可 | 大抵は「ニコイチ」「ヨンコイチ」ケースが必要 | RAIDコントローラカードが必要。ソフトRAIDなら安いけど速度メリットは出ない。なお、同じ容量のディスクを用意する必要があるので、それ用のディスクを買ってくる必要がある。 |
最大容量 | やろうと思えば256台までディスクを統合できる。USB-HDDを使えばそれこそ鈴なりに(笑)まあ、Linuxの都合でそこまでつなげないとは思うけど。 | 数台を束ねる程度の物なら安価にゲットできる | ハードRAIDするなら4台とか8台とか12台とかそれくらいか? |
コメント 0