LVMとは・VMware ESXi 環境のディスク拡張方法

1.LVM(Logical Volume Manager)とは

LVMとはUNIX系OSなどで利用できるディスク管理機能です。LVMを利用すると物理ディスクとは別に仮想ディスクを作成することができ、その仮想ディスクの上にext4,ext3などのファイルシステムを構築できます。

1-1.LVMのメリット

記憶領域の管理を柔軟に行うことができ、たとえば、各論理ボリューム(LVM を利用しない場合のパーティションに相当)のサイズを後から変更したり、ハードディスク(LVM ではPV呼ぶ)の容量を超えるサイズの論理ボリュームを作ったり、後から新たな物理ボリュームを追加してボリュームグループ全体のサイズを増やしたりといったことが可能です。またLVMを利用すると複数の物理的なディスクを束ね、一本の大きなディスクとして使うことも可能でき(物理的な制約が軽減されます。)、ディスクを追加した際など、簡単にパーティションサイズの拡張ができます。

1-2.LVMの用語

用語 説明
PV(Physical Volume)
物理的なブロックデバイス。仮想ディスクを作成するためにはまず、この物理ディスクはLVMで使う物理ディスクだよ~と宣言する必要があります。
VG(Volume Group)
PVから切り出したブロックデバイス。仮想的なハードディスクのようなもの。
LV(Logical Volume)
VGから切り出した仮想的なパーティション領域。従来のパーティションと同じように、この論理ボリューム上にファイルシステムを作って利用可能
PE(Physical Extent)
LVMによる領域管理の最小単位。
デフォルトでは、4MBとなる。PEが小さいほど、エクステント数は多くなりやすくなる。ただしエクステント数が多くなってもディスクパフォーマンスを悪化させる原因にはならない模様。また、エクステントサイズが多きすぎると、無駄に容量を消費しがちになります。結局のところデフォルト(4MB)を保持すべきとベンダーのページには記載が載っていました。なお、ひとつのVGには異なるサイズのエクステントは混在できないため注意が必要。

1-3.LVMのバージョンとエクステント制約

LVMはバージョン1と2があり、現在の主流はLVM2です。(LVM2には LVM1 との下位互換性があり。)VGはvgconvert コマンドを使用して LVM1 形式から LVM2 形式に変換することができます。また、LVMはPV/LVあたり65535ですが、LVM2では、PV/LV あたりの最大エクステント数に制限はありません

1-4.LVMのコマンド

LVMを操作するためのコマンドは以下のとおりです。LVMを使用して仮想ディスクを作成したり拡張する場合には、

1.PVの作成
2.PVをVGとしてグルーピング
3.LVにVGから容量を切り出す

イメージで作業を進めますが、フェーズによって以下のコマンドを使い分けます。

PV関連のコマンド
  • pvcreate
  • pvremove
  • pvmove
  • pvdisplay
VG関連のコマンド
  • vgcreate
  • vgremove
  • vgextend
  • vgreduce
  • vgdisplay
LV関連のコマンド
  • lvcreate
  • lvremove
  • lvextend
  • lvreduce

2.ESXi環境でのディスク拡張方法

2-1.作業前のディスクの確認・ESXiのディスク追加

今回はESXi上でLVMを使用した仮想マシンが稼働している環境で、ディスク拡張を行う手順を紹介していきます。想像してたよりもめんどくさい…。

はじめに対象となる仮想マシンを停止し、vSphere Clientでディスクの割り当て量を増やします。今回は16GBから20GBまで容量を増やす事にしました。
※スナップショットがあるとディスクサイズの変更ができないようです。ある場合は消しましょう。
参考:仮想マシンのディスクがオンラインでもオフラインでも容量を拡張出来ない。VMwareでディスクサイズがグレーアウト

esxi_disk

起動し、OSが認識している(まだ使える状態になってないけど)ディスク容量を確認します。

[root@kvm-tagutagu ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_tagutagutest-lv_root
 ext4 14G 829M 13G 7% / ←メイン領域 LVの上でext4ファイルシステムが作成されている。
tmpfs tmpfs 939M 0 939M 0% /dev/shm
/dev/sda1 ext4 477M 30M 422M 7% /boot

(ESXi側でディスクの割り当てを増やす前)

[root@kvm-tagutagu ~]# fdisk -l

Disk /dev/sda: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00083b85

 Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2089 16264192 8e Linux LVM

Disk /dev/mapper/vg_tagutagutest-lv_root: 14.9 GB, 14935916544 bytes
255 heads, 63 sectors/track, 1815 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_tagutagutest-lv_swap: 1715 MB, 1715470336 bytes
255 heads, 63 sectors/track, 208 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

(ESXi側でディスクの割り当てを増やした後)

/dev/sdaの容量が増えました。ディスクを伸長させるとOSから見ると1本のディスクの使用していない領域が増えてます。この「使用していない領域」を区切って新たにパーティションを追加します。

[root@kvm-tagutagu ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes ← 物理ディスクが増えています。
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00083b85

 Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2089 16264192 8e Linux LVM

Disk /dev/mapper/vg_tagutagutest-lv_root: 14.9 GB, 14935916544 bytes
255 heads, 63 sectors/track, 1815 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_tagutagutest-lv_swap: 1715 MB, 1715470336 bytes
255 heads, 63 sectors/track, 208 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

2-2.パーティションの切り出し・パーティションへのLVMの適用

次は増やしたディスクをOSから利用できるようにするための作業です。増やした領域を新たにパーティションとして使えるようにします。windowsとかでもありますねハイ。
現在はsdaというディスクが一本見えていて、その中でsda1とsda2というパーティションがあるのがわかります。ESXi側から増やしたパーティション化されていない領域がsdaにありますのでこれをパーティショニングします。

[root@kvm-tagutagu ~]# ll /dev/sda
sda sda1 sda2

パーティションを追加する場合は、fdiskコマンドを利用します。"n"を押してパーティション作成にはいり、さらにパーティション番号である"3"、そのあとどのくらいの容量(シリンダ指定)をパーティションに割り当てるかの質問には何も入力せずエンターを押します。これで勝手に使えるだけ割り当ててくれます。最後に"w"で変更適用を行います。なにやらアラートで、再起動後に新たなパーティションは認識されるよ~とわめいていますが、ウルセェ!進みます。

[root@kvm-tagutagu ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
 switch off the mode (command 'c') and change display units to
 sectors (command 'u').

Command (m for help): n
Command action
 e extended
 p primary partition (1-4)
3
Invalid partition number for type `3'
Command action
 e extended
 p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (2089-2610, default 2089):
Using default value 2089
Last cylinder, +cylinders or +size{K,M,G} (2089-2610, default 2610):
Using default value 2610

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 or after you run partprobe(8) or kpartx(8)

fdisk -lでディスク状態を参照すると先ほどまで見えなかったsda3が認識されています。ヤッタ

[root@kvm-tagutagu ~]# fdisk -l
抜粋~
 Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2089 16264192 8e Linux LVM
/dev/sda3 2089 2610 4187609 83 Linux

しかし、まだパーティションを新たにぶった切っただけです。次に作成したパーティションのファイルシステムを指定し、フォーマットします。フォーマットにはcfdiskというコマンドユーティリティを使用します。(fdiskでも似たようなことはできます。)今回は/dev/sda3を選択し、cfdiskで 8E すなわちLINUX LVMに指定の上、フォーマットを行いました。

※パーティションタイプとは、システム ID、OS インジケータとも呼ばれ、そのパーティションを使用している OS の種類やファイルシステム等を数値で表します。

[root@kvm-tagutagu ~]# cfdisk
cfdisk (util-linux-ng 2.17.2)

 Disk Drive: /dev/sda
 Size: 21474836480 bytes, 21.4 GB
 Heads: 255 Sectors per Track: 63 Cylinders: 2610

 Name Flags Part Type FS Type [Label] Size (MB)
 -------------------------------------------------------------------------------------------------------------------------------------------------------
 Pri/Log Free Space 1.05 *
 sda1 Boot Primary Linux ext3 524.29 *
 sda2 Primary Linux LVM 16654.54 *
 sda3 Primary Linux 4288.12 *

 01 FAT12 14 Hidden FAT16 <32M 51 OnTrack DM6 Aux1 84 OS/2 hidden C: drive B7 BSDI fs EE GPT
 02 XENIX root 16 Hidden FAT16 52 CP/M 85 Linux extended B8 BSDI swap EF EFI (FAT-12/16/32)
 03 XENIX usr 17 Hidden HPFS/NTFS 53 OnTrack DM6 Aux3 86 NTFS volume set BB Boot Wizard hidden F0 Linux/PA-RISC boot
 04 FAT16 <32M 18 AST SmartSleep 54 OnTrackDM6 87 NTFS volume set BE Solaris boot F1 SpeedStor
 05 Extended 1B Hidden W95 FAT32 55 EZ-Drive 88 Linux plaintext BF Solaris F4 SpeedStor
 06 FAT16 1C Hidden W95 FAT32 (LB 56 Golden Bow 8E Linux LVM C1 DRDOS/sec (FAT-12) F2 DOS secondary
 07 HPFS/NTFS 1E Hidden W95 FAT16 (LB 5C Priam Edisk 93 Amoeba C4 DRDOS/sec (FAT-16 < FB VMware VMFS
 08 AIX 24 NEC DOS 61 SpeedStor 94 Amoeba BBT C6 DRDOS/sec (FAT-16) FC VMware VMKCORE
 09 AIX bootable 39 Plan 9 63 GNU HURD or SysV 9F BSD/OS C7 Syrinx FD Linux raid autodetec
 0A OS/2 Boot Manager 3C PartitionMagic recov 64 Novell Netware 286 A0 IBM Thinkpad hiberna DA Non-FS data FE LANstep
 0B W95 FAT32 40 Venix 80286 65 Novell Netware 386 A5 FreeBSD DB CP/M / CTOS / ... FF BBT
 0C W95 FAT32 (LBA) 41 PPC PReP Boot 70 DiskSecure Multi-Boo A6 OpenBSD DE Dell Utility
 0E W95 FAT16 (LBA) 42 SFS 75 PC/IX A7 NeXTSTEP DF BootIt
 0F W95 Ext'd (LBA) 4D QNX4.x 80 Old Minix A8 Darwin UFS E1 DOS access
 10 OPUS 4E QNX4.x 2nd part 81 Minix / old Linux A9 NetBSD E3 DOS R/O
 11 Hidden FAT12 4F QNX4.x 3rd part 82 Linux swap / Solaris AB Darwin boot E4 SpeedStor
 12 Compaq diagnostics 50 OnTrack DM 83 Linux AF HFS / HFS+ EB BeOS fs


 Enter filesystem type: 8E

 cfdisk (util-linux-ng 2.17.2)

 Disk Drive: /dev/sda
 Size: 21474836480 bytes, 21.4 GB
 Heads: 255 Sectors per Track: 63 Cylinders: 2610

 Name Flags Part Type FS Type [Label] Size (MB)
 -------------------------------------------------------------------------------------------------------------------------------------------------------
 Pri/Log Free Space 1.05 *
 sda1 Boot Primary Linux ext3 524.29 *
 sda2 Primary Linux LVM 16654.54 *
 sda3 Primary Linux LVM 4288.12 * Pri/Log Free Space 6.86 *

TYPEがLinux LVMに変更されたことを確認し、[Write]を選択し、yesを実行する。
   Are you sure you want to write the partition table to disk? (yes or no): yes

無事に変更されました。

[root@kvm-tagutagu ~]# fdisk -l
抜粋~
 Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2089 16264192 8e Linux LVM
/dev/sda3 2089 2610 4187609 8e Linux LVM
ディスク上のパーティションテーブルが変更されたことを OSに反映させるためサーバ再起動を実施します。※ただし、partedツールを利用すれば再起動をせず反映させることができます。
[root@kvm-tagutagu ~]# reboot

【partedツールで再起動をせずパーティション変更を反映させる方法】

[root@kvm-tagutagu ~]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 May 13 08:14 /dev/sda
brw-rw---- 1 root disk 8, 1 May 13 08:14 /dev/sda1
brw-rw---- 1 root disk 8, 2 May 13 08:14 /dev/sda2

【partedツールで再起動をせずパーティション変更を反映させる方法】

パーティションテーブルの一覧を表示します。

[root@kvm-tagutagu ~]# partx -l /dev/sda
# 1: 2048- 1026047 ( 1024000 sectors, 524 MB)
# 2: 1026048- 33554431 ( 32528384 sectors, 16654 MB)
# 3: 33554432- 41929649 ( 8375218 sectors, 4288 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)

【partedツールで再起動をせずパーティション変更を反映させる方法】

対象のディスクを読み込み、すべてのパーティションをシステムに登録します。※すでに登録されているパーティションはエラーとして表示されます。
[root@kvm-tagutagu ~]# partx -v -a /dev/sda
device /dev/sda: start 0 size 41943040
gpt: 0 slices
dos: 4 slices
# 1: 2048- 1026047 ( 1024000 sectors, 524 MB)
# 2: 1026048- 33554431 ( 32528384 sectors, 16654 MB)
# 3: 33554432- 41929649 ( 8375218 sectors, 4288 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
added partition 3

【partedツールで再起動をせずパーティション変更を反映させる方法】

パーティションを認識しました。
[root@kvm-tagutagu ~]# ll /dev/sda*
brw-rw---- 1 root disk 8, 0 May 13 08:20 /dev/sda
brw-rw---- 1 root disk 8, 1 May 13 08:19 /dev/sda1
brw-rw---- 1 root disk 8, 2 May 13 08:19 /dev/sda2
brw-rw---- 1 root disk 8, 3 May 13 08:23 /dev/sda3

2-3.LVMによるLVの拡張

いよいよLVMのディスク操作にはいります。まずLVMに対してPVを新たに作認識させます。

[root@kvm-tagutagu ~]# pvcreate /dev/sda3
 Physical volume "/dev/sda3" successfully created
新たに認識させた(作成した)PVの情報を取得する。現在使用しているデバイスが/dev/sda2で今回新たに作った/dev/sda3があるのがわかる
[root@kvm-tagutagu ~]# pvdisplay
 --- Physical volume ---
 PV Name /dev/sda2
 VG Name vg_tagutagutest ←所属しているVGを表示する。
 PV Size 15.51 GiB / not usable 3.00 MiB
 Allocatable yes (but full)
 PE Size 4.00 MiB
 Total PE 3970
 Free PE 0
 Allocated PE 3970
 PV UUID 9k08ic-uENM-oXu7-2Gw8-THp5-DW2q-pVoAUr

 "/dev/sda3" is a new physical volume of "3.99 GiB"
 --- NEW Physical volume ---
 PV Name /dev/sda3
 VG Name                 ←まだVGに追加していないので何も表示されない。
 PV Size 3.99 GiB
 Allocatable NO
 PE Size 0
 Total PE 0
 Free PE 0
 Allocated PE 0
 PV UUID a2B0Ek-glq2-HBDn-FA8j-0uru-HOVO-KVP0ak

次にVGに作成したPVを追加します。vgextendコマンドのあとにはすでに存在するvgを指定します。上記コマンドのVG Nameを参照してください。そのあと、pvdisplayで新たに追加したsda3がvg_tagutagutestに追加されたことを確認しました。

[root@kvm-tagutagu ~]# vgextend vg_tagutagutest /dev/sda3
 Volume group "vg_tagutagutest" successfully extended

[root@kvm-tagutagu ~]# pvdisplay
 --- Physical volume ---
 PV Name /dev/sda2
 VG Name vg_tagutagutest
 PV Size 15.51 GiB / not usable 3.00 MiB
 Allocatable yes (but full)
 PE Size 4.00 MiB
 Total PE 3970
 Free PE 0
 Allocated PE 3970
 PV UUID 9k08ic-uENM-oXu7-2Gw8-THp5-DW2q-pVoAUr

 --- Physical volume ---
 PV Name /dev/sda3
 VG Name vg_tagutagutest ←追加された。
 PV Size 3.99 GiB / not usable 1.46 MiB
 Allocatable yes
 PE Size 4.00 MiB
 Total PE 1022
 Free PE 1022
 Allocated PE 0
 PV UUID a2B0Ek-glq2-HBDn-FA8j-0uru-HOVO-KVP0ak

次にVGをLVに追加します。まずは現在の論理ボリューム(LV)を確認します。当然増えてはいません。そしてこのLVにはVG vg_tagutagutestが使用されていることがわかります。

[root@kvm-tagutagu ~]# lvdisplay
 --- Logical volume ---
 LV Path /dev/vg_tagutagutest/lv_root
 LV Name lv_root
 VG Name vg_tagutagutest
 LV UUID uLOUPy-KusF-cThD-OXeW-e9Gu-foTb-f4mox2
 LV Write Access read/write
 LV Creation host, time tagutagu-test, 2016-05-07 09:35:33 +0900
 LV Status available
 # open 1
 LV Size 13.91 GiB
 Current LE 3561
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

次にLVに対してVGの使用していない領域を全て割り当てます。"lvextend -l +100%FREE"で指定した論理グループで利用しているボリュームグループの残り容量すべてを、同一の論理グループに割り当てることができます。

[root@kvm-tagutagu ~]# lvextend -l +100%FREE /dev/vg_tagutagutest/lv_root
 Size of logical volume vg_tagutagutest/lv_root changed from 13.91 GiB (3561 extents) to 17.90 GiB (4583 extents).
 Logical volume lv_root successfully resized

これでLVMの仮想ディスクの容量が無事に増えました。lvdisplayとfdiskで期待どおりの容量となっていることを確認します。

[root@kvm-tagutagu ~]# lvdisplay /dev/vg_tagutagutest/lv_root
 --- Logical volume ---
 LV Path /dev/vg_tagutagutest/lv_root
 LV Name lv_root
 VG Name vg_tagutagutest
 LV UUID uLOUPy-KusF-cThD-OXeW-e9Gu-foTb-f4mox2
 LV Write Access read/write
 LV Creation host, time tagutagu-test, 2016-05-07 09:35:33 +0900
 LV Status available
 # open 1
 LV Size 17.90 GiB
 Current LE 4583
 Segments 2
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

[root@kvm-tagutagu ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes ←増えた
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00083b85

 Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2089 16264192 8e Linux LVM
/dev/sda3 2089 2610 4187609 8e Linux LVM

Disk /dev/mapper/vg_tagutagutest-lv_root: 19.2 GB, 19222495232 bytes
255 heads, 63 sectors/track, 2337 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_tagutagutest-lv_swap: 1715 MB, 1715470336 bytes
255 heads, 63 sectors/track, 208 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
あとはresize2fs コマンドで/dev/sdaの領域を増やしておしまいです。(ext4はマウントしたままresizeが可能です。)
[root@kvm-tagutagu ~]# resize2fs /dev/vg_tagutagutest/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_tagutagutest/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/vg_tagutagutest/lv_root to 4692992 (4k) blocks.

The filesystem on /dev/vg_tagutagutest/lv_root is now 4692992 blocks long.

[root@kvm-tagutagu ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_tagutagutest-lv_root 18G 838M 16G 5% / ←増えた
tmpfs 939M 0 939M 0% /dev/shm
/dev/sda1 477M 30M 422M 7% /boot

 

以上です。

Copyright © 2021 たぐたぐ.com. All rights reserved.