LVMでのファイルシステム容量追加

LVMでのファイルシステム容量追加

LVMは、論理ボリュームマネージャである。下位層の物理パーティションを隠蔽(一つに束ねたりする)したり、上位に提供する論理パーティションを自由に分割・サイズ定義して提供することができる。

ESX側の概念説明ページでは省略した部分を詳細に解説する。

imageLVMは、内部に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: 0x00078c7f

   Device 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: 0x27cc8541

   Device 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 16777215

Command (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.

LVMでのファイルシステム容量追加

留下评论