SSブログ

LVMの構築方法(基本編) [Linux(LVM/RAID/Storage)]

●mixiからの転記(&加筆)

 HDDがアフォみたいに安くなってくる一方で、動画ファイルとか使う方もサイズがでっかくなってくるので、「ニコイチ」とか「ヨンコイチ」とかああいうディスクケースを使ったりRAIDしたりする訳ですが、特にUSBのHDDを使い出すと、だんだんPCにディスクが「鈴なり」状態に、ディスクスペースが細切れ状態になってきて微妙にもったいなかったり、使いづらかったりする訳ですよ。

 で、そこで複数のディスクをガッチャンコしちゃおうという目的でLinuxでLVMしちまおう…ということでこのエントリーとあいなった訳ですよ。

 基本路線としては、
 ・LinuxでSambaな環境を構築して、Windowsには「ネットワークドライブ」という形で見せよう
 ・ネットワークドライブがいっぱいになるのはかんべんな
 ・バックアップとか考えると頭が痛くなるので、本当ならRAID5とかしたい訳だが、失業した古いHDDを再利用してでっかいディスクとして見せたいので、「壊れたら壊れたであきらめる」前提とする(ちゃんと守りたいデータは新しいディスクを買ってきてRAIDしる!)

 ということで。

 なお、当方の環境の都合上話は全てCentOS5.2とかその辺の上で進行しますので念のため。



 で、lvmを使うにはおおざっぱにいって3段階の手順とか必要になる。
 ①ハードディスクに「物理ボリューム」を作成する。
    →まずは全部のハードディスクに物理ボリュームを作成することになる
 ②作成した物理ボリュームを、「ボリュームグループ」に登録する。
    →この「ボリュームグループ」は「1個の巨大なハードディスク」みたいな感じに見えることになる。
 ③複数の物理ボリュームが登録されたボリュームグループから、必要に応じて「論理ボリューム」を切り出す。
    →ボリュームグループは「1個の巨大なハードディスク」なら、「物理ボリューム」は「パーティション」に相当すると考えるとよろし。今回のような目的で使うなら、「1個のハードディスクに1個のパーティション」みたいな感じになるですよ。

 これ以降は、普通にファイルシステムを作成してマウントして使えるですよ。
 これだけならまあRAID0したり「テラタワー」みたいな製品を使えばいいじゃんということになるんだろうけども、lvmにしておけば…
 メリット1:あとからハードディスクを追加して、ボリュームグループとか論理ボリュームを大きくできる
 メリット2:ディスクの「交換」にも割と柔軟に対応できる(ダメな時はダメぽ…ということもあるけどなー)
 メリット3:SASだろうとSATAだろうとUSBなHDDだろうとお構いなしに全部「がっちゃんこ」できる

 要するに、RAIDよりもずーっと敷居が低い訳ですよ。いろんな意味で。(特に資金的にも!)まあ、その分、RAID1とかRAID5とかのようにファイルをがっちり守るとかはちょっとアレな面も。(lvmでミラーリングもできるけどなー)


 そんな訳で、lvm構築方法を以下に書き殴っておく。

ステップ0:準備・lvmに必要なパッケージは入っているかな?&ディスクをつなごう~!

 おそらく、普通にCentOSをセットアップしておけば標準で入ってくるような気がする今日この頃ですが、パッケージは入っているかな?チェックしてみませう。

[root@server1 root]# pvdisplay --version
  LVM version:     2.02.28 (2007-08-24)
  Library version: 1.02.22 (2007-08-21)
  Driver version:  4.5.0


 コマンドが入っててLVM versionの表示が2以降なら多分問題ない希ガス。必要なパッケージは…

[root@server1 root]# rpm -qa | fgrep lvm
lvm2-2.02.28-0vl0.1


 入ってない場合は、yumでさくっと入れてしまいませう。

[root@server2 ~]# yum search lvm
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
 * addons: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
lvm2.i386 : ユーザーランド論理ボリューム管理ツール
system-config-lvm.noarch : A utility for graphically configuring Logical Volumes
lvm2.i386 : Userland logical volume management tools
lvm2-cluster.i386 : Cluster extensions for userland logical volume management tools


 ということなので、

[root@server2 ~]# yum install lvm2.i386


 ですな。なお、Vineなお友達は…

[root@server1 root]# apt-cache search lvm
lvm2 - 論理ボリューム管理ツール
lvm - Linux Logical Volume Manager utilities.
ocaml - Objective Caml コンパイラとプログラミング環境


 つーことなので

[root@server1 root]# apt-get install lvm2


 とするよろし。



 で、ディスクをざくざく接続するですよ。OSから認識できているディスクについてはdmesgで確認するとか/proc/partitionsを見るとかしませう。

[root@server1 root]# cat /proc/partitions
major minor  #blocks  name

   8     0  312570167 sda
   8     1     104391 sda1
   8     2  312464250 sda2
   8    16  976762584 sdb
   8    17  976760001 sdb1
   8    32  312571224 sdc
   8    33    2040223 sdc1
   8    34  310528417 sdc2
   8    48  976762584 sdd
   8    49  976760001 sdd1
   8    64  976762584 sde
   8    65  976760001 sde1
   8    80  976762584 sdf
   8    81  976760001 sdf1
   9     0 2930279808 md0
   8    96  976762584 sdg
   8    97  976760001 sdg1
   8   112  976762584 sdh
   8   113  976760001 sdh1
   8   128  976762584 sdi
   8   129  976760001 sdi1
   8   144  976762584 sdj
   8   145  976760001 sdj1
   8   160  245117376 sdk
   8   161  245111706 sdk1
   8   176  245117376 sdl
   8   177  245111706 sdl1
   8   192  245117376 sdm
   8   193  245111706 sdm1
   8   208  245117376 sdn
   8   209  245111706 sdn1
 253     0 4887461888 dm-0
   8   224 1464845256 sdo
   8   225 1464838798 sdo1


 まあ、健全なパソコンオタクちゃんならこれくらいはディスクが鈴なりになっているんじゃなかろうかと思います。健全でない「マル廃」なオタクちゃんの場合はきっと「すげー高級なRAIDカード」とか使っていそうなのでそういう「マル廃本仕込み」なオタクちゃんはどっか他いくよろし。

 ちなみにこのマシンの場合、sdaとsdcがマザボに接続されているHDD、sdoはRAID5なUSB-HDD(具体的にはバッキャローのUSBなアレ)で今回「がっちゃんこ」する対象外。md0はLinuxのソフトウェアRAIDなデバイスで、sdf、sde、sdd、sdbを4本束ねてRAID5してるので、これも今回の「がっちゃんこ」する対象外。

 そんな訳で、sdg、sdh、sdi、sdj、sdk、sdl、sdm、sdnの8本がlvmで「がっちゃんこ」される対象となるですよ。
 では、さっそく「がっちゃんこ」してまいります。


ステップ1:ハードディスクに「物理ボリューム」を作成する
 えーと、本当はいらないんだけど、私はコレを省略するとどーしても気持ちが悪いのでやってますが、よい子のみんなはやってもやらなくてもどっちでもいいお。

 それぞれのディスクにパーティションを切ります。おきまりの「fdisk」ですな。(サンプル中のデバイス名は適宜読み替えよう。)

[root@server1 root]# fdisk /dev/sdg

このディスクのシリンダ数は 121601 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sdg: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

 デバイス Boot      Start         End      Blocks   Id  System
/dev/sdg1               1      121601   976760001   8e  Linux LVM

コマンド (m でヘルプ):


 1個のハードディスクを丸ごと1個のパーティションにしておいて、パーティションのIDを変更します。「n」して「t」して「8e」にして「w」すればオッケーです。(リサイクルだという場合は最初に「d」してくだちい。)何のことかさっぱりわからんという人はお帰りください。

 lvmで「がっちゃんこ」したい全てのディスクにLinuxLVMのパーティションを作成したら、いよいよlvmの操作に入ります。

 lvmの「物理ボリューム」の作成には pvcreate コマンドを使います。基本形としては…

[root@server1 root]# pvcreate /dev/sdg1


 です。いちいちコマンド8回も実行するのは面倒くさいので
[root@server1 root]# pvcreate /dev/sd[g-n]1


 とでもしておけば8本全部に物理ボリュームが作成されるですよ。

 物理ボリュームが作成されたかどうかチェックするには pvdisplay コマンド。

[root@server1 root]# pvdisplay -v /dev/sdg1
    Using physical volume(s) on command line
    Wiping cache of LVM-capable devices
  --- Physical volume ---
  PV Name               /dev/sdg1
  VG Name               vgtera
  PV Size               931.51 GB / not usable 3.19 MB
  Allocatable           yes (but full)
  PE Size (KByte)       4096
  Total PE              238466
  Free PE               0
  Allocated PE          238466
  PV UUID               abEiuq-JRcs-3AOl-qxEB-BP8k-QSmx-8YxlUA



 すでにこのサーバではLVMでボリュームを作成してあるのでFree PEが0になってますが、作成したばっかりの状態だとFree PEになんらかの数値が入っていることでせう。VG Nameも表示されなはずですお。


ステップ2:作成した物理ボリュームを、「ボリュームグループ」に登録する。
 複数ある「物理ボリューム」を「ボリュームグループ」に登録して、「1個の巨大なハードディスクのようなもの」を作成します。
 このボリュームグループには何か分かり易そうな名前を付けておきます。で、使用するコマンドは vgcreate です。引数として、「ボリュームグループ名」と「登録する物理ボリュームのデバイス名」を続けて書きます。
 今回の例として、「ボリュームグループ名」に「vgtera」と名前を付けることにします。

[root@server1 root]# vgcreate vgtera /dev/sdg1


 なんてことになりますが、最初から複数の物理ボリュームを追加しつつ新規作成できますので、その場合は物理ボリュームのデバイス名を書き並べることになります。

[root@server1 root]# vgcreate vgtera /dev/sdg1 /dev/sdx1 /dev/sdy1


 たとえば↑こんな感じ。ちなみに今回のケースだと

[root@server1 root]# vgcreate vgtera /dev/sd[g-n]1


 と、なる訳です。

 ちなみに、「初めてだから1個だけ登録してみた~」とか「やっう゛ぇー。デバイス名書き忘れてしまった~」みたいな場合は、 vgextend コマンドで既存のボリュームグループに物理ボリュームを追加します。

[root@server1 root]# vgextend vgtera /dev/sdz1


 とかこんな感じで。
 ディスクが「がっちゃんこ」された様子を見たい場合は、 vgdisplay コマンドで表示されます。

[root@server1 root]# vgdisplay vgtera
  --- Volume group ---
  VG Name               vgtera
  System ID
  Format                lvm2
  Metadata Areas        8
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                8
  Act PV                8
  VG Size               4.55 TB
  PE Size               4.00 MB
  Total PE              1193228
  Alloc PE / Size       1193228 / 4.55 TB
  Free  PE / Size       0 / 0
  VG UUID               RBEJZT-k2Vo-AKtl-OIYq-imHx-gnca-RDbvUU



 ↑上記の例だと、すでにlvmが以下略なのでFree PE/Sizeが以下略ですが、ボリュームグループを作成した直後の場合は以下略。
 なお、コマンドにボリュームグループ名「vgtera」を付けてますが、これを省略するとそのマシンで作成されている全てのボリュームグループの情報が表示されます。また、「-v」オプションを付けると登録されている物理ボリュームの情報とかも全て表示されます。

[root@server1 root]# vgdisplay -v vgtera
    Using volume group(s) on command line
    Finding volume group "vgtera"
  --- Volume group ---
  VG Name               vgtera
  System ID
  Format                lvm2
  Metadata Areas        8
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                8
  Act PV                8
  VG Size               4.55 TB
  PE Size               4.00 MB
  Total PE              1193228
  Alloc PE / Size       1193228 / 4.55 TB
  Free  PE / Size       0 / 0
  VG UUID               RBEJZT-k2Vo-AKtl-OIYq-imHx-gnca-RDbvUU

  --- Logical volume ---
  LV Name                /dev/vgtera/lva
  VG Name                vgtera
  LV UUID                suPCyY-vhXr-ptAP-sQph-TZFY-8msV-Km4cJa
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                4.55 TB
  Current LE             1193228
  Segments               8
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:0

  --- Physical volumes ---
  PV Name               /dev/sdg1
  PV UUID               abEiuq-JRcs-3AOl-qxEB-BP8k-QSmx-8YxlUA
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdh1
  PV UUID               ztiGC4-cO3A-He3a-2f2x-Dz82-qBPY-Imc45D
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdi1
  PV UUID               Sz7dZh-LkUM-ltYw-gKaY-PKn8-PpMY-La3TGa
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdj1
  PV UUID               FNhgGT-22dc-W0HJ-qDYQ-ye3L-SEG6-hn4XEi
  PV Status             allocatable
  Total PE / Free PE    238466 / 0

  PV Name               /dev/sdk1
  PV UUID               mLw2JO-emCp-3auI-if98-cw4u-e82r-6znQ5D
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  PV Name               /dev/sdl1
  PV UUID               lDPisv-2kgJ-kt32-OLeZ-V4uo-3Eqx-lG1rv1
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  PV Name               /dev/sdm1
  PV UUID               UjFfgA-XQgx-6xvl-PJ1m-aalI-HkIo-pv2kBB
  PV Status             allocatable
  Total PE / Free PE    59841 / 0

  PV Name               /dev/sdn1
  PV UUID               Pp0EZz-2dNy-y5G3-Y92a-UZ7H-5pMA-RyM9rA
  PV Status             allocatable
  Total PE / Free PE    59841 / 0



 ↑上記の例だと、すでにlvmが以下略なので論理ボリュームの情報が表示されていたり以下略ですが新規に作成したばっかりの状態だと以下略。


ステップ3:複数の物理ボリュームが登録されたボリュームグループから、必要に応じて「論理ボリューム」を切り出す。
 ここまでで、ディスク8本を「がっちゃんこ」して約4.5TBのでっかい領域が作成されてニヨニヨしてますが、これではまだ不完全で、ここから「論理ボリューム」を作成します。

 さきほと vgdisplay コマンドで…
  Total PE              1193228

 という表示があったと思う。この「PE」という物は「物理エクステンド」という物で、ボリュームグループをデフォルトで4MB単位のブロックに区切り、そのブロックの個数を示しています。この物理エクステンドのサイズは変更することが出来るのだけども、ぶっちゃけ、lvm2を使っている限りあんまり意味はないです。
 大きくするとディスク容量の端数が無駄になりやすいとかあったり、小さくすると物理エクステンドの個数がやたら多くなってパフォーマンスが低下するとかありますが、まあ、USB-HDDを使ってる時点でパフォーマンス云々言うのは筋違いかなと思うところではありますが。(笑)

 で、論理ボリュームにこの「物理エクステンド」を何個割り当てます…みたいな指定をやることで、ようやくファイルシステムをそこに作成できるようになるわけです。

 今回は8個全てのディスクを「がっちゃんこ」して1個の広大な領域にしたいので、1個の論理ボリュームに全ての物理エクステンドを割り当てることになります。
 使用するコマンドは lvcreate です。「-l」オプションと「-n」オプションを併用します。「-l」オプションに続けて使用する物理エクステンドの個数を、「-n」オプションに続けて論理ボリュームの名前を指定します。最後に切り出す元となるボリュームグループ名です。なお、「-n」オプションを省略するとデフォルトで変な名前が割り当てられます。別にそっちでも構わないのですがね。

[root@server1 root]# lvcreate -l 1193228 -n lva vgtera


 今回の例でいくとこんな具合になる訳ですな。これで、論理ボリュームが作成されました。
 この論理ボリュームに対して、ファイルシステムを作成したり、マウントしたりする訳ですが、デバイス名の組み立て方としては…

 /dev/(ボリュームグループ名)/(論理ボリューム名)

 ということになります。今回の場合は、ボリュームグループ名に「lvtera」、論理ボリューム名に「lva」と名前を付けたので、「/dev/lvtera/lva」というデバイス名が付くことになります。


ステップ4:あとはもうファイルシステムを作成してマウントしる。

 あとはもう詳しく説明するのもアレなんですが、mke2fs -j /dev/lvtera/lva して、tune2fs -c 0 -i 0 /dev/lvtera/lva して、お好みに応じてe2label /dev/lvtera/lva DATAAREA とかやってからmkdir -p /mnt/mountpoint でマウントポイントを適宜作成してmount /dev/lvteta/lva /mnt/mountpoint とかやるよろしね。
 これで、4.5TBの領域がウヒヒヒヒ…

[root@server root]# df -h
ファイルシステム    サイズ  使用  残り 使用% マウント位置
/dev/sda2             294G  4.3G  275G   2% /
(見せられないよ! ><)
/dev/mapper/vgtera-lva
                      4.5T  3.1T  1.4T  69% /mnt/mountpoint
(見せられないよ ><)


 まあ、もう実際に使用しているので容量がアレですが以下略。



 なお、こんな場末なblogの落書きを見てしまった識者の方で指摘とかツッコミとかありましたらコメントよろしこです。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。