LPIC-2 - 201試験 - 204:高度なストレージ管理 - 204.3 論理ボリュームマネージャ

Last Update : September 18 2014 21:34:18

     

a. LVMの概要

LVM(logical volume manager)とは、複数のハード・ディスクやパーティションにまたがった記憶領域を一つの仮想的な論理ボリュームとして扱うことのできるディスク管理機能です。

  1. 複数パーティションを結合した「論理的な」パーティションを提供する
     LVMは、ディスク上の複数パーティション(物理パーティション)をひとつの領域としてまとめる役目を担います。その中から「論理パーティション」として領域の切り出しを行います。物理パーティションは複数の物理的なディスクをまたがっても問題はなく、途中で物理パーティションを追加や削除することが可能です。
  2. 「論理的な」パーティションのサイズ変更
     利用しているディスクのファイルシステム(フォーマット)制限にもよりますが、より多くの容量が必要と判断されたパーティションは、領域に残っている部分を割り当てることで「論理的な」パーティションサイズを増減させることができます。

LVMでは、パーティション内を数十Mバイトの多数の小さな領域(物理エクステント)に細かく分割して管理する。(1)物理エクステントの集団を2つに分ける、(2)異なるハード・ディスク上にある物理エクステントを1つにまとめて管理する、ことであたかも1つのハード・ディスクを分割したり、複数のハード・ディスクを結合したかのように利用できる。

LVMを利用するには、ハード・ディスク内にLVM用のパーティションを用意する(図)。このパーティションを物理ボリューム(PV:Physical Volume)と呼ぶ。

LVMに参加する物理ボリュームは、最初に初期化される。初期化時に物理ボリュームは特定の容量の小さな領域に分割される。この小さな領域を、物理エクステント(PE:Physical Extents)と呼ぶ。PEのデフォルト・サイズは、数Mバイトから数10Mバイト程度の場合が多い。

複数の物理ボリュームをまとめて新たに作られる管理単位が、ボリューム・グループ(VG:Volume Group)だ。図では物理ボリューム内の物理エクステントの数と新しく作ったボリューム・グループ内の物理エクステントの数が等しくなっているが、実際には複数の物理ボリュームにある物理エクステントをまとめて一つのボリューム・グループにできる。

最後に、実際のパーティション同様に利用できる論理ボリューム(LV:Logical Volume)を作る。論理ボリュームはボリューム・グループ内にある物理エクステントを必要分だけまとめて構成する。

ユーザーが利用するのは、あくまでも論理ボリュームであって、論理ボリューム以外の要素は利用時には意識しなくて済む。言い換えると、ボリューム・グループは仮想的なハード・ディスク、論理ボリュームは仮想的なパーティションとみなすことができる。

ユーザーは作成した論理ボリュームのデバイス・ファイルを用いてマウントすることで、実際のパーティションのように利用できる。

  • 物理エクステント(PE)
    PEとは、LVMが扱う記憶領域の最小単位です。一般的なLinuxディストリビューションではデフォルトPEサイズは4MBとなっています。  このPEサイズは任意で指定できますが、そのサイズは大き過ぎても、小さ過ぎてもいけません。1つの「LV」(Logical Volume. 後述します)が持てるPE数には上限があり、最大65,536個までとなっています。そのため、PEサイズが4MBでは256GBまでしか扱えないことになります。  といって、逆に大きすぎるとパーティション内のPEサイズで割り切れない分が無駄になります。 例えば、図1のように100MBのLVMパーティションをPEサイズ16MBで初期化した場合には、PEが6つ作られ4MBが余ります。これがPEサイズ64MBの場合ならば、PEが1つしか作れず36MBも余ってしまうことになります。  最近のハードディスクの容量を考慮すると、PEサイズは16MB(上限1TB)か32MB(上限2TB)あたりがちょうどよいかと思います。  PEサイズの設定値の範囲は、8KBから512MBまでです。

  • 物理ボリューム(PV)
    PV(Phygical Volume, 物理ボリューム)とは、物理的な記憶媒体を示します。1つのPVが1つのディスクと対応するのが一般的ですが、LinuxのLVMでは、1つのディスクと対応させることも、1つのLinux LVMパーティションと対応させることも可能です。  Linux LVMパーティションのパーティションIDは8e(16進数)です。fdiskなどで作成する際にはパーティションIDの変更を行わなければ鳴りません。

  • ボリュームグループ(VG)
    VG(Volume Group, ボリュームグループ)とは、複数のPVをまとめるグループです。VGを作成することで、PVをまとめて1つの大きな記憶領域として振る舞わせることができるようになります。つまり、小さなHDDでも複数台用意すれば、1つの大きなHDDとして見せることができるということです。  最近では、ファイルサーバーやデータベースサーバーに1TB以上のデータを格納するケースも珍しくありません。1TBのパーティションが必要な場合、250GBのハードディスクを4つ用意すれば実現できます。

  • 論理ボリューム(LV)
    LV(Logical Volume, 論理ボリューム)とは、実際にファイルシステムを作る入れ物です。従来のパーティションと対応します。  LVは、PEの集まりで出来ています。そのため、PEサイズの倍数で作成する必要があります。たとえば、PEサイズが32MBだった場合、48MBのLVは作成できません。
    ファイルシステムとは、実際にファイルが格納される記憶領域です。従来の環境ではパーティション上に作られますが、LVM環境ではLV上に作られます。  現在、Linuxで使われているファイルシステムには、Linux ext2や、Linux ext3、ReiserFS、JFS、XFSなどがあります。どのファイルシステムにも一長一短があり、それぞれの特徴を活かすも殺すも管理者次第です。


b. LVM の操作

1.LVMパーティションの作成

LVMを利用するには、最初に LVMパーティションが少なくても1つ必要です。パーティションタイプは、16進数で「8e」です。Linux LVMパーティションの作成には、 fdisk や、 cfdisk などパーティション操作が行なえるツールを使います。

# fdisk /dev/sdb
コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 3 領域番号 (1-4): 3 最初 シリンダ (4417-19590, default 4417): Using default value 4417 終点 シリンダ または +サイズ または +サイズM または +サイズK (4417-19590, default 19590): Using default value 19590 コマンド (m でヘルプ): t <--- パーティションタイプの変更のため Partition number (1-4): 3 16進数コード (L コマンドでコードリスト表示): 8e 領域のシステムタイプを 3 から 8e (Linux LVM) に変更しました コマンド (m でヘルプ): p Disk /dev/hda: 10.1 GB, 10110320640 bytes 16 heads, 63 sectors/track, 19590 cylinders Units = cylinders of 1008 * 512 = 516096 bytes デバイス Boot Start End Blocks Id System /dev/hda1 * 1 249 125464+ 83 Linux /dev/hda2 250 4416 2100168 8e Linux LVM /dev/hda3 4417 19590 7647696 8e Linux LVM Command (m for help): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。 警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。 新しいテーブルは次回リブート時に使えるようになるでしょう。 ディスクを同期させます。

再起動するか partprobe コマンドを実行します。
 partprobeコマンドは、Fedora CoreをはじめとするRed Hat系ディストリビューションに含まれるコマンドです。ディスクからパーティションテーブルを読み込み、カーネル内のパーティションテーブルに反映することができます。


2.PVの作成

PVを作成するには、 pvcreate というコマンドを使います。このコマンドを実行することにより、LVMパーティションが区画整備されます。PVがうまく作成されたか確認するには、 pvdisplay コマンドを実行します。

# pvcreate /dev/hda3
Physical volume \"/dev/hda3\" successfully created
# pvdisplay -C
PV VG Fmt Attr PSize PFree /dev/hda2 vg01 lvm2 a- 2.00G 0 /dev/hda3 lvm2 -- 7.29G 7.29G
# pvdisplay /dev/hda3
--- Physical volume --- PV Name /dev/sdb1 VG Name PV Size 1.00 GB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 1RA8bb-JHjJ-KfAO-JobK-QKAg-aYp4-eAdGJ0


3.VGの作成

PVの作成を行った後、PVをまとめるためにVGを作成します。
 VGを作成するには、 vgcreate というコマンドを使います。(図5) このコマンドを実行することによりVGが定義され、同時にPVの中にPEが作成されます。  今回はPEサイズ32MBで作成します。VGが作成されたことを確認するには、 vgdisplay コマンドを実行します。

# vgcreate -s 32m testvg /dev/hda3
Volume group \"testvg\" successfully created
# vgdisplay -C
VG #PV #LV #SN Attr VSize VFree testvg 1 0 0 wz--n 7.28G 7.28G vg01 1 2 0 wz--n 2.00G 0
# vgdisplay testvg
--- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 7.28 GB PE Size 32.00 MB Total PE 233 Alloc PE / Size 0 / 0 Free PE / Size 233 / 7.28 GB VG UUID Sqfqv5-i3s3-CnvX-MZW3-bl9M-bHQA-3WnD1B


4.LVの作成

LVを作成するには、 lvcreate というコマンドを使います。VG「testvg」上に1GBの「opt_lv」というLVを作成します。LVがうまく作成できたか確認するには、 lvdisplay コマンドを実行します。

# lvcreate -L 1G -n opt_lv testvg
Logical volume \"opt_lv\" created
# lvdisplay -C
LV VG Attr LSize Origin Snap% Move Copy% opt_lv testvg -wi-a- 1.00G root_lv vg01 -wi-ao 1.50G swap_lv vg01 -wi-ao 512.00M
# lvdisplay /dev/testvg/opt_lv
--- Logical volume --- LV Name /dev/testvg/opt_lv VG Name testvg LV UUID jsyfKs-Ri3q-cPdt-pTcI-BAX3-chrG-hGP5zl LV Write Access read/write LV Status available # open 0 LV Size 1.00 GB Current LE 32 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:2


5.ファイルシステムの作成

LVを作成した後、その中にファイルシステムを作ります。
 ファイルシステムを作成するには、 mkfs コマンドを使います。  最近ではファイルシステムの種類ごとにmkfs.ext2、mkfs.ext3、mkfs.xfsなどといったコマンドも用意されています。今回は、XFSでフォーマットします。

# mkfs.xfs -f /dev/testvg/opt_lv
meta-data=/dev/testvg/opt_lv isize=256 agcount=8, agsize=32768 blks = sectsz=512 data = bsize=4096 blocks=262144, imaxpct=25 = sunit=0 swidth=0 blks, unwritten=1 naming =version 2 bsize=4096 log =internal log bsize=4096 blocks=2560, version=1 = sectsz=512 sunit=0 blks realtime =none extsz=65536 blocks=0, rtextents=0


6.ファイルシステムをマウントする

従来のパーティション管理と同じく、 mount コマンドを実行します。きちんとマウントされているか、 df コマンドで確認します。

# mount /dev/testvg/opt_lv /opt # df -h /opt/
Filesystem    サイズ 使用 残り  使用% マウント位置 /dev/mapper/testvg-opt_lv 1014M 144K 1014M 1%   /opt

z. 出題範囲概要

●主要な知識範囲
LVMスイートのツール
論理ボリューム、ボリュームグループ、物理ボリュームのサイズ変更、名前変更、作成および削除
スナップショットの作成と維持
ボリュームグループの有効化
●重要なファイル、用語、ユーティリティ
/sbin/pv* /sbin/lv* /sbin/vg* mount /dev/mapper/


  [ 例題 ] 
  1. 201:204.3 問01  論理ボリュームマネージャ
  2. 201:204.3 問02  論理ボリュームマネージャ
  3. 201:204.3 問03  論理ボリュームマネージャー


     

www.it-shikaku.jp