LVM(ロジカルボリュームマネージャ)

最近のディストリビューションでは既におなじみのLVM(logical volume manager)について、簡単な説明と実際の操作について解説します。
旧来はLinuxでファイルシステムを利用する場合は、デバイスファイル(/dev/hda1など)に直接ファイルシステムを構築していました。
最近では、デバイスファイル上にLVMを設定して、そこにファイルシステムを構築しています。
LVMを利用すると、オンラインでの容量の変更、スナップショットの取得、複数のハードディスクを1つの領域として利用する事などが可能になります。

 

 

LVMの概要

LVMを利用するには、ハードディスク上にLVMパーティションを用意する必要があります。

さらに、LVMパーティションに対してLVMの設定を行って行きます。

 

PV(Physical Volume)

PV(物理ボリューム)とは、パーティションと対になるもので、LVMを利用する為のパーティションのベースと考えてください。

通常、fdiskなどでパーティションを作成すると思いますが、その場合のパーティションIDは8e(Linux LVM)になります。

 

PE(Physical Extents)

PE(物理エクステント)とは、LVMが扱う記憶領域の最小単位で、LV領域はPEの指定容量で小分けに分割されます。(LVについては後述します)

PEサイズは任意で指定できますが、1つのLVが持てるPE数には上限があり、最大65,536個までとなっています。

最近のハードディスク容量を考慮すると、16MB(上限1TB)、32MB(上限2TB)あたりが適当だと思います。

なお、PEの指定範囲は、8kbから512MBです。

 

例えば、128MBのLV領域を作成しPEに32MBを指定した場合は、LV領域は以下のように分割されます。

-----------------------------
| 32MB | 32MB | 32MB | 32MB |
-----------------------------
|           LV00            |
-----------------------------

 

VG(Volume Group)

VG(ボリュームグループ)とは、複数のPVをまとめるグループです。VGを作成しPVをまとめて1つの大きな記憶領域として利用する事が可能になります。

すなわち、複数のディスクやパーティションに作成したPVを、VGでまとめて1つのパーティショに見せる事が可能になります。

Linuxのインストール時に自動設定される場合は、PV1つに対してVGが1つ設定されると思います。

また、VG上には複数のLVを作成することが可能です

 

LV(Logical Volume)

LV(論理ボリューム)とは、VG上に作成する論理ボリュームで、実際にファイルシステムを構築する領域です。これは、従来のパーティションと等価だと考えれば理解しやすいでしょう。

LVは、VGの容量が許す限り複数作成する事が可能です。また、作成したLVは実際にext3などのファイルシステムを構築し利用します。

なお、LVはPEの集まりで出来ていますので、PEサイズの倍数で作成することをお勧めします。

 

LVMの全体イメージ

LVMの全体イメージは以下のようになります。LVにext3などのファイルシステムを作成し、//homeなどでマウントして利用します。

----------------------------------
| PV:物理ボリューム ( dev/hda1 )  |
----------------------------------
| VG:ボリュームグループ            |
----------------------------------
| LV(0)    | LV(1)    | LV(2)   |
----------------------------------

 

ファイルシステム

ファイルシステムとは、実際にファイルが格納される記憶領域で、従来の環境では/dev/hda1などのパーティション上に作られますが、LVM環境ではLV上に作られます。

Linuxでは、現在はext3がもっともポピュラーなファイルシステムだと思いますが、ext2、ReiserFS、JFS、XFSなども利用可能です。

 

 

LVMの作成

LVM領域を作成し、ファイルシステムを作成するまでの手順を記載します。
なお、前提条件として単一のハードディスクで以下の状態であると仮定します。

/dev/hda
-------------------------
| /dev/hda1 ext3 /boot  |
-------------------------
| /devhda2 LVM          |
| /VG00/LV00,/VG00/LV01 |
|-----------------------|
| 未使用領域            |
-------------------------

これを、以下のような構成にします。

/dev/hda
-------------------------
| /dev/hda1 ext3 /boot  |
------------------------
| /devhda2 LVM          |
| /VG00/LV00,/VG00/LV01 |
|-----------------------|
| /dev/hda3 LVM         |
| /VG01/LV00            |
------------------------

 

LVMパーティションの作成

LVMパーティションの作成を、fdiskを用いて行います。パーティションタイプはLinux LVM(8e)に設定します。

fdisk /dev/hda
fdiks起動時のメッセージ
The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

現状のパーティションを確認
Command (m for help):p
Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14         842     6658942+  8e  Linux LVM

新規パーティションの作成
Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4):3
First cylinder (843-1044, default 843):[enter]
Using default value 843
Last cylinder or +size or +sizeM or +sizeK (843-1044, default 1044): [enter]
Using default value 1044

パーティションタイプの変更
Command (m for help):t
Partition number (1-4):3
Hex code (type L to list codes):8e
Changed system type of partition 3 to 8e (Linux LVM)

パーティションの確認
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14         842     6658942+  8e  Linux LVM
/dev/hda3             843        1044     1622565   8e  Linux LVM

パーティション情報を保存して終了
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

fdiskの基本操作コマンド

m = 操作コマンドのヘルプを表示する

p = 現在の状態を確認する

n = 新規にパーティションを作成する

t = パーティションタイプを変更する

w = 変更を保存し終了する

q = 変更を破棄し終了する

fdiskでパーティションの作成が完了したら、一度再起動します。

 

PV(Physical Volume)の作成

PV(物理ボリューム)を作成します。作成するパーティションは、先ほどfdiskで作成した/dev/hda3に対して行います。

PVを作成するには、pvcreateコマンドを使用します。

pvcreate /dev/hda3

Physical volume “/dev/hda3” successfully created と表示されれば終了です。

 

作成したPVを確認するには、pvdisplayコマンドを使用します。

pvdisplay /dev/hda3
 "/dev/hda3" is a new physical volume of "1.55 GB"
  --- NEW Physical volume ---
  PV Name               /dev/hda3
  VG Name
  PV Size               1.55 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vEsHuY-jrJF-ofcY-ZfAB-FXrY-Ww0H-aXCm1d

 

VG(Volume Group)の作成

VG(ボリュームグループ)を作成します。ここで作成するVGは、/dev/hda3に作成したPVを利用するVGで、VG01という名称で作成します。

VGを作成するには、vgcreateコマンドを使用します。

この時PEも作成します。今回は32MBでPEを作成します。

vgcreate -s 32m VG01 /dev/hda3

Volume group “VG01” successfully created と表示されれば終了です。

 

作成したVGを確認するには、vgdisplayコマンドを使用します。

vgdisplay -C
  VG   #PV #LV #SN Attr   VSize VFree
  VG00   1   2   0 wz--n- 6.34G    0
  VG01   1   0   0 wz--n- 1.53G 1.53G

 

vgdisplay VG01
  --- Volume group ---
  VG Name               VG01
  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               1.53 GB
  PE Size               32.00 MB
  Total PE              49
  Alloc PE / Size       0 / 0
  Free  PE / Size       49 / 1.53 GB
  VG UUID               ahUEBo-R4m0-iTtf-ZcqZ-O9og-5zrx-1pKMup

 

LV(Logical Volume)の作成

LV(論理ボリューム)を作成します。ここで作成するLVは、VG01の領域を全て使いLV00と言う名称で作成します。

LVを作成するには、lvcreateコマンドを使用します。

lvcreate -L 1.53G -n LV00 VG01

Logical volume “LV00” created と表示されれば終了です。

 

作成したLVの確認は、lvdisplayコマンドで確認します。

lvdisplay /dev/VG01/LV00
  --- Logical volume ---
  LV Name                /dev/VG01/LV00
  VG Name                VG01
  LV UUID                578IYe-MYhd-lAUP-0snR-Bl9w-lUmP-mpXskS
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1.53 GB
  Current LE             49
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

 

ファイルシステムの構築

LVが作成出来たら、ようやくファイルシステムの構築が可能になります。

ファイルシステムの構築には、mkfsコマンドを利用します。

ここでは、ext3ファイルシステムをジャーナリング機能付きで作成します。

mkfs.ext3 -j /dev/VG01/LV00

 

ファイルシステムの手動マウント

作成したLVM領域をマウントするには、以下のコマンドで行います。なお、ここでは、/dataにマウントします。

マウントポイントの作成

mkdir /data

マウントの実行

mount /dev/VG01/LV00 /data

 

ファイルシステムの自動マウント

ファイルシステムを自動でマウントするには、/etc/fstabに記載します。

/dev/VG01/LV00	/data	ext3	defaults	1	2

 

 

 

LVMパーティションの操作

LVMパーティションはオンラインでの領域の拡大縮小(リサイズ)に対応しています。

ここでは、リサイズの手順を記載します。

 

LVのリサイズ

LVのリサイズを行うには、lvresize、lvreduceコマンドを使います。

また、一般的なファイルシステムではオンラインリサイズができます。

 

LVの拡大

LVの拡大を行う場合は、まずLVのサイズを拡大し、その後ファイルシステムサイズを拡大します。

LVのサイズを拡大には、lvresizeコマンドを使います。

なお、ファイルシステムはext3を利用している場合を記載します。

 

LV領域を1GB拡大します。

lvresize -L +1G /dev/VG01/LV00

 

次に、ext3ファイルシステムを拡大します。サイズを指定しないと自動的にLVのサイズに合わせて拡大します。

resize2fs /dev/VG01/LV00

 

 

LVの縮小

LVを縮小する為には、アンマウントしてオフラインで作業する必要があります。

縮小する時の手順は、アンマウント、ファイルシステムチェック、ファイルシステム縮小、LV縮小です。

アンマウントします。

umount /data

 

ファイルシステムチェック

fsck.ext3 -f /dev/VG01/LV00

 

ファイルシステム縮小

resize2fs /dev/VG01/LV00 8G

 

LV縮小

lvreduce -L 8G /dev/VG01/LV00

*ここでは、8Gとして8GBにする様に指定してありますが、-L -1Gとして1GB縮小するといった指定も可能です。

 

最後にマウントして利用可能な状態にします。

mount /dev/VG01/LV00 /data

 


LVMパーティション容量の追加例

VMWare ESXiなどの仮想環境でディスク容量を増やした場合や、ハードディスクを増設した場合に、LVMパーティションの容量を増やす手順についてご紹介します。

なお、現状のパーティション構成は以下の通りとし、/ パーティションの/dev/mapper/VolGroup00-LogVol00の容量を追加します。

Filesystem           1M-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                         45536      2767     40419   7% /
/dev/sda1                   99        19        76  20% /boot
tmpfs                      742         0       742   0% /dev/shm

 

fdiskでLVM用のパーティションを作成

仮想環境でディスク容量を増やしたり、ハードディスクの増設が完了したら、fdiskで新しいディスク領域にLVMパーティションを作成します。

 

今回は、仮想環境でディスク容量を増やした場合の例です。

fdisk /dev/sda

 

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

現状のパーティションを確認
コマンド (m でヘルプ): p

Disk /dev/sda: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        6527    52323705   8e  Linux LVM

新規パーティションの作成
コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 3
最初 シリンダ (6528-13054, default 6528): [enter]
Using default value 6528
終点 シリンダ または +サイズ または +サイズM または +サイズK (6528-13054, default 13054): [enter]
Using default value 13054

パーティションタイプの変更
コマンド (m でヘルプ): t
領域番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 3 から 8e (Linux LVM) に変更しました

パーティションの確認
コマンド (m でヘルプ): p

Disk /dev/sda: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        6527    52323705   8e  Linux LVM
/dev/sda3            6528       13054    52428127+  8e  Linux LVM

パーティション情報を保存して終了
コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。

fdiskが終了したらOSを再起動します。

shutdown -r now


PV(Physical Volume)の作成

先ほど作成したパーティションにPVを作成します。

pvcreate /dev/sda3


VG(Volume Group)の作成

VGを作成します。今回は、既存のVGの容量を増やすために同一名のVGを作成します。

vgextend VolGroup00 /dev/sda3

 

作成したVGを確認するには、vgdisplayコマンドを使用します。

元のVolGroup00に、作成したVolGroup00の容量が足されて、VGの容量増えていることを確認してください。

vgdisplay VolGroup00

 

 

 

LV(Logical Volume)の容量変更

次に、VGにあるLV(LogVol00)の容量を増加させます。

lvextend -L +40Gb /dev/VolGroup00/LogVol00

 

ファイルシステムのリサイズをします。

resize2fs /dev/VolGroup00/LogVol00

 

最後に容量が増えたか確認します。

df -h
Filesystem           1M-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                         94144      2775     86516   4% /
/dev/sda1                   99        19        76  20% /boot
tmpfs                      742         0       742   0% /dev/shm

これで、LVMのパーティション容量の追加作業は終了です。

 

 

ここまで、LVMの基本的な利用方法を説明してきました。LVMには、ほかにもPVのリサイズや構成変更、スナップショットの作成など、いろいろな機能があります。

単なるファイルシステムとしてだけでなく、調べてみると面白いと思います。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">