LVMは、論理ボリュームマネージャである。下位層の物理パーティションを隠蔽(一つに束ねたりする)したり、上位に提供する論理パーティションを自由に分割・サイズ定義して提供することができる。
ESX側の概念説明ページでは省略した部分を詳細に解説する。
LVMは、内部に3つの層を概念的に持つことで、前述した2つの大項目を実現している。
- ボリュームグループ(VG)と言う単位で物理パーティション(PV)を束ねる。VGの個数に制限はなく図のように複数のVGもできるし、単一のVGにまとめることもできる。
- VGからLV(論理ボリューム)を切り出して、これをパーティションとしてOSに提供することで、これにファイルシステムを作成する。VGの中から自由なサイズで、好きな個数切り出しを行える。
LVMの確認コマンド
まずは、インストーラーが自動的に設定したLVMの内容を確認しましょう。
最初はパーティーション
[root@fed1 ~]# fdisk -l | grep Disk
Disk /dev/sdc doesn’t contain a valid partition table
Disk /dev/dm-0 doesn’t contain a valid partition table
Disk /dev/dm-1 doesn’t contain a valid partition table
Disk /dev/sda: 8589 MB, 8589934592 bytes
Disk identifier: 0x00078c7f
Disk /dev/dm-0: 7839 MB, 7839154176 bytes
Disk identifier: 0x00000000
Disk /dev/dm-1: 536 MB, 536870912 bytes
Disk identifier: 0x00000000
HDD1台構成なので、sdaが接続されています。次はパーティションを確認してみましょう
[root@fed1 ~]# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00078c7fDevice Boot Start End Blocks Id System
/dev/sda1 * 63 409662 204800 83 Linux
/dev/sda2 409663 16771859 8181098+ 8e Linux LVM
LVMはブートに非対応なので、sda1をブート用に/bootとして割り当てていますね。次にsda2がLinux LVMとなっており、これがLVMで利用しているパーティションです。
次にPV(Physical Volume:物理ボリューム)を確認してみましょう。
[root@fed1 ~]# pvdisplay
— Physical volume —
PV Name /dev/sda2
VG Name VolGroup
PV Size 7.80 GiB / not usable 1.35 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1997
Free PE 0
Allocated PE 1997
PV UUID 93iQsl-dAsx-dWwE-oTcI-iugR-M9cZ-4Im3Aq
/dev/sda2がPVとして登録されており、7.8GBだというのがわかります。
さらに、VG(Volume Group)を確認しましょう。
[root@fed1 ~]# vgdisplay
— Volume group —
VG Name &nbs
p; VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 7.80 GiB
PE Size 4.00 MiB
Total PE 1997
Alloc PE / Size 1997 / 7.80 GiB
Free PE / Size 0 / 0
VG UUID FzceDk-gVg8-nCVv-3c1F-beKH-nG1E-D1u3pL
このコマンドだけでは、どのPVがこのVGに登録されているのかわかりませんが、VolGroupという名前で定義されたVGがひとつあり、7.8GBであるというのがわかります。また、AllocとFreeから、LV(LogicalVolume)で全領域使われているというのがわかります。
最後に、LV(LogiclaVolume)を確認しましょう。
[root@fed1 ~]# lvdisplay
— Logical volume —
LV Name /dev/VolGroup/lv_root
VG Name VolGroup
LV UUID dI6evm-PczS-YBWo-dvmz-uvGi-zqf7-emxkti
LV Write Access read/write
LV Status available
# open 1
LV Size 7.30 GiB
Current LE 1869
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0— Logical volume —
LV Name /dev/VolGroup/lv_swap
VG Name VolGroup
LV UUID oNxotm-7xJd-8dgq-yAwh-I2ap-YrrV-nkztDc
LV Write Access read/write
LV Status available
# open 1
LV Size 512.00 MiB
Current LE 128
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1
これによると、lv_rootとlv_swapの2つが7.3Gと512Mの割合で切りだされているというのがわかります。デフォルトインストールでは、ルートだけの1パーティションになるようなので、通常はこれを増やすことでボリューム不足を補えます。
サイズを増やす
やっと本題のここまできました。ESXを利用していない人もいるかと思うので、HDDを追加するパターンで解説します。まずは、ESXのHDDを好きな容量で一つ追加してください。そして再起動してからを解説します。
再起動後Diskを確認してみましょう。
[root@fed1 ~]# fdisk -l | grep Disk
Disk /dev/sdb doesn’t contain a valid partition table
Disk /dev/dm-0 doesn’t contain a valid partition table
Disk /dev/dm-1 doesn’t contain a valid partition table
Disk /dev/sda: 8589 MB, 8589934592 bytes
Disk identifier: 0x00078c7f
Disk /dev/sdb: 8589 MB, 8589934592 bytes
Disk identifier: 0x00000000
Disk /dev/dm-0: 7839 MB, 7839154176 bytes
Disk identifier: 0x00000000
Disk /dev/dm-1: 536 MB, 536870912 bytes
Disk identifier: 0x00000000
正しくsdbが追加されていましたね。これにパーティションを設定しましょう。
[root@fed1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x27cc8541.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): p (Pで表示して確認)
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x27cc8541Device Boot Start End Blocks Id System
(なにもありませんから作りましょう)
Command (m for help): n (nで新規作成)
Command action
e extended
p primary partition (1-4)
p (新しいDiskなのでpで作成)
Partition number (1-4, default 1): 1 (わかりやすく若番の1をつけます。これがsdb1の数字になります)
First sector (2048-16777215, default 2048): (エンターで2回進めると自動的に全領域になります。)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215Command (m for help): w (最後にwで書き込みして終了です)
The partition table has been altered!Calling ioctl() to re-read partition table.
Syncing disks.
ここまででsdb1パーティションが作成できており使えるようになりました。
これをLVMに登録しましょう。まずはLVMにこのパーティションをPVとして利用する宣言をします。
[root@fed1 ~]# pvcreate /dev/sdb1
Physical volume “/dev/sdb1” successfully created
PVに登録できたので、これをVGに登録するのですが、VGに登録する際にはVGの名前が必要になります。複数のVGが合った場合に、どのVGに登録するか選択するためです。
[root@fed1 ~]# vgdisplay
— Volume group —
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 7.80 GiB
PE Size 4.00 MiB
Total PE 1997
Alloc PE / Size 1997 / 7.80 GiB
Free PE / Size 0 / 0
VG UUID FzceDk-gVg8-nCVv-3c1F-beKH-nG1E-D1u3pL
これで、VGの名前はVolGroupということがわかりました。これを利用して追加してみましょう。
[[root@fed1 ~]# vgextend VolGroup /dev/sdb1
Volume group “VolGroup” successfully extended
これで、/dev/sdb1がVolGroupに追加されました。再度vgdisplayで追加されたか確認してみましょう。
[root@fed1 ~]# vgdisplay
— Volume group —
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 15.80 GiB
PE Size 4.00 MiB
Total PE 4044
Alloc PE / Size 1997 / 7.80 GiB
Free PE / Size 2047 / 8.00 GiB
VG UUID FzceDk-gVg8-nCVv-3c1F-beKH-nG1E-D1u3pL
VG Sizeが正しく15.80GiBになっていますね。これでVGが大きくなりました。次に、LVへの割り当てサイズを拡張しましょう。まずは、LVの状態を確認します。
[root@fed1 ~]# lvdisplay
— Logical volume —
LV Name /dev/VolGroup/lv_root
VG Name VolGroup
LV UUID dI6evm-PczS-YBWo-dvmz-uvGi-zqf7-emxkti
LV Write Access read/write
LV Status available
# open 1
LV Size 7.30 GiB
Current LE 1869
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0— Logical volume —
LV Name /dev/VolGroup/lv_swap
VG Name VolGroup
LV UUID oNxotm-7xJd-8dgq-yAwh-I2ap-YrrV-nkztDc
LV Write Access read/write
LV Status available
# open 1
LV Size 512.00 MiB
Current LE 128
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1
この結果によると、2つのLVが定義されています。以前の段階で解説してありますので、今回はlv_rootに追加することにします。
[root@fed1 ~]# lvextend -L 15.80G /dev/VolGroup/lv_root
Rounding up size to full physical extent 15.80 GiB
Extending logical volume lv_root to 15.80 GiB
Insufficient free space: 2176 extents needed, but only 2047 available
-Lにて、増分でなく使いたいサイズのボリュームを指定します。ここでFreeと同じ領域を指定しましたが、GiB表記では誤差がでるため、同じ値を指定しても確保できませんので、ここのエラーメッセージを見ながら少しずつ少なくしてください。
[root@fed1 ~]# lvextend -L 15G /dev/VolGroup/lv_root
Extending logical volume lv_root to 15.00 GiB
Logical volume lv_root successfully resized
15Gで指定するとうまく言ったようです。successflllyの文字が見えました。
LVのサイズを確認しましょう。
[root@fed1 ~]# lvdisplay
— Logical volume —
LV Name /dev/VolGroup/lv_root
VG Name VolGroup
LV UUID dI6evm-PczS-YBWo-dvmz-uvGi-zqf7-emxkti
LV Write Access read/write
LV Status available
# open 1
LV Size 15.00 GiB
Current LE 3840
Segments 2
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0— Logical volume —
LV Name /dev/VolGroup/lv_swap
VG Name VolGroup
LV UUID oNxotm-7xJd-8dgq-yAwh-I2ap-YrrV-nkztDc
LV Write Access read/write
LV Status available
# open 1
LV Size 512.00 MiB
Current LE 128
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1
lv_rootが正しく15Gになっています。
ファイルシステムの拡張
ここまでで、LVのサイズが大きくなりました。ただ、この状態をファイルシステムは知るすべがありません。ext3やext4にこれを教えるために以下のコマンドを実行します。自動的にパーティションの最大サイズに拡張されます。拡張するコマンドは、ファイルシステムごとに違うのでGFSや、XFSを利用する場合には別途コマンドを調べてください。
[root@fed1 ~]# resize2fs /dev/VolGroup/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VolGroup/lv_root to 3932160 (4k) blocks.
The filesystem on /dev/VolGroup/lv_root is now 3932160 blocks long.