0

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

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です