読者です 読者をやめる 読者になる 読者になる

らくがきちょう

なんとなく

Cisco VIRL のディスク領域を拡張する

Cisco VIRL

Cisco VIRL を .ova ファイルから ESXi にデプロイすると、デフォルトで自由に使えるディスク領域は 70GB 程度です。これではやや心もとないので、ディスク領域を拡張してみます。今回検証した Cisco VIRL 1.0.26 は「Ubuntu + LVM」で出来ているので、具体的には LVM を拡張することになります。

作業の流れ

作業は概ね、以下の流れで進めます。

  1. ESXi で新規ディスクを追加する
  2. 新規ディスクに fdisk で LVM パーティションを作成する
  3. LVM を拡張する
    1. 新規ディスクに物理ボリュームを作成する
    2. ボリュームグループに新規ディスクを追加する
    3. 論理ボリュームに新規ディスクを追加する
  4. ファイルシステムをリサイズする

事前の状態

作業前のパーティション情報は以下の通りです。ここに後の手順で新規ディスク (/dev/sdb) を追加し、LVM を拡張していくことになります。

$ sudo fdisk -l

Disk /dev/sda: 83.9 GB, 83886080000 bytes
255 heads, 63 sectors/track, 10198 cylinders, total 163840000 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: 0x00075d5b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758   163837951    81668097    5  Extended
/dev/sda5          501760   163837951    81668096   8e  Linux LVM

Disk /dev/mapper/virl--vg-root: 75.2 GB, 75237425152 bytes
255 heads, 63 sectors/track, 9147 cylinders, total 146948096 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: 0x00000000

Disk /dev/mapper/virl--vg-root doesn't contain a valid partition table

Disk /dev/mapper/virl--vg-swap_1: 8388 MB, 8388608000 bytes
255 heads, 63 sectors/track, 1019 cylinders, total 16384000 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: 0x00000000

Disk /dev/mapper/virl--vg-swap_1 doesn't contain a valid partition table

作業前のボリュームグループ情報は以下の通りです。virl-vg の VG Size が 77.88GB になっているのが分かります。

$ sudo vgdisplay
  --- Volume group ---
  VG Name               virl-vg
  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               77.88 GiB
  PE Size               4.00 MiB
  Total PE              19938
  Alloc PE / Size       19938 / 77.88 GiB
  Free  PE / Size       0 / 0
  VG UUID               nXjnp3-b5ai-IBxi-peep-hajU-R1y3-6djhc6

  --- Volume group ---
  VG Name               cinder-volumes
  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               19.53 GiB
  PE Size               4.00 MiB
  Total PE              4999
  Alloc PE / Size       0 / 0
  Free  PE / Size       4999 / 19.53 GiB
  VG UUID               M35SMb-lP2E-qP9B-Harn-pIDa-CW7B-Uf3Qi0

作業前の論理ボリューム情報は以下の通りです。/dev/virl-vg/root の LV Size が 70.07GB になっているのが分かります。

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/virl-vg/root
  LV Name                root
  VG Name                virl-vg
  LV UUID                gbgup2-FDJ5-Q0R6-6y28-TJff-AvNH-WFW1s3
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 1
  LV Size                70.07 GiB
  Current LE             17938
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/virl-vg/swap_1
  LV Name                swap_1
  VG Name                virl-vg
  LV UUID                f0zdIS-r3db-I3Wy-63Yf-4eA1-hP1Y-kFdaAX
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 2
  LV Size                7.81 GiB
  Current LE             2000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

ESXi 上からディスクを追加する

ここからは仮想マシンの電源をオフにしてから作業を行います。ESXi から VIRL 仮想マシンの構成を編集します (私の環境に合わせて、スクリーンショットと説明は英語表示です)。Hardware タブから Add... をクリックします。

f:id:sig9:20160410225310p:plain

Hard Disk を選択し、Next をクリックします。

f:id:sig9:20160410225316p:plain

新規ディスクを作成 (追加) しますので、Create a new virtual disk が選択されたままの状態で Next をクリックします。

f:id:sig9:20160410225322p:plain

Disk Size は任意で指定します。今回は 200GB としました。Disk Provisioning は Thin Provision を選択しました。Next をクリックします。

f:id:sig9:20160410225329p:plain

Virtual Device Node は SCSI のまま、Next をクリックします。

f:id:sig9:20160410225334p:plain

ここまでの設定値一覧が表示されます。問題無ければ Finish をクリックします。

f:id:sig9:20160410225343p:plain

追加されたディスクは New Hard Disk (adding) として表示されます。OK を押して構成編集を終了し、仮想マシンを開始します。

f:id:sig9:20160410225352p:plain

VIRL が起動したらディスクが追加されたか、確認します。2 つ目のディスクなので、/dev/sdb が増えていれば OK です。

$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb

fdiskパーティション情報を確認すると以下のように「パーティション情報が無い」と表示されるはずです。この後の手順でパーティションを作成していきます。

$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 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: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

パーティションを作成する

fdisk で新規に追加したディスクにパーティションを作成します。今回はディスク全体を丸ごとひとつのパーティションとして扱います。まず、fdisk を開始して対話的に設定を進めていきます。

$ sudo 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 0xfcea88bf.
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)

n を入力して新規パーティションの作成を開始します。

Command (m for help): n

Primary パーティションを作成するので、p を入力します。

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

パーティション番号は 1 を入力します。

Partition number (1-4, default 1): 1

セクター開始位置ですが、デフォルトで最小値(先頭)になっていますので、そのままエンターを入力します。

First sector (2048-419430399, default 2048):
Using default value 2048

同様にセクター終了位置もデフォルトでは最大値(最後尾)になっていますので、そのままエンターを入力します。

Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399):
Using default value 419430399

一旦、p を入力してパーティションテーブルを確認してみます。/dev/sdb1 が作成されたことが分かります。

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 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: 0xfcea88bf

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   419430399   209714176   83  Linux

作成したパーティションを LVM として扱う為、パーティション ID を変更します。t を入力します。

Command (m for help): t
Selected partition 1

8e を入力します (8e は Linux LVM)。

Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

再度、p を入力してパーティションテーブルを表示し、ID が 8e (Linux LVM) に変更されていることを確認します。

Command (m for help): p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders, total 419430400 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: 0xfcea88bf

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048   419430399   209714176   8e  Linux LVM

パーティションテーブルを書き込んで終了です。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

LVM を拡張する

次は LVM を拡張します。まず、pvcreate で新規作成したディスク /dev/sdb1 に物理ボリュームを作成します。

$ sudo pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created

pvscan で物理ボリュームの状態を確認すると、/dev/sdb1 が追加されたことが分かります。

$ sudo pvscan
  PV /dev/sda5    VG virl-vg          lvm2 [77.88 GiB / 0    free]
  PV /dev/sdb1    VG virl-vg          lvm2 [200.00 GiB / 200.00 GiB free]
  PV /dev/loop0   VG cinder-volumes   lvm2 [19.53 GiB / 19.53 GiB free]
  Total: 3 [297.41 GiB] / in use: 3 [297.41 GiB] / in no VG: 0 [0   ]

次はボリュームグループに /dev/sdb1 を追加します。追加前にボリュームグループの状態を確認しておきます。

$ sudo vgdisplay
  --- Volume group ---
  VG Name               virl-vg
  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               77.88 GiB
  PE Size               4.00 MiB
  Total PE              19938
  Alloc PE / Size       19938 / 77.88 GiB
  Free  PE / Size       0 / 0
  VG UUID               nXjnp3-b5ai-IBxi-peep-hajU-R1y3-6djhc6

  --- Volume group ---
  VG Name               cinder-volumes
  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               19.53 GiB
  PE Size               4.00 MiB
  Total PE              4999
  Alloc PE / Size       0 / 0
  Free  PE / Size       4999 / 19.53 GiB
  VG UUID               M35SMb-lP2E-qP9B-Harn-pIDa-CW7B-Uf3Qi0

virl-vg に /dev/sdb1 を追加し、ボリュームグループを拡張します。

$ sudo vgextend virl-vg /dev/sdb1
  Volume group "virl-vg" successfully extended

再度、ボリュームグループの状態を表示します。VG Size が /dev/sdb1 (200GB) の分、拡張されているのが分かります。

$ sudo vgdisplay
  --- Volume group ---
  VG Name               virl-vg
  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               277.88 GiB
  PE Size               4.00 MiB
  Total PE              71137
  Alloc PE / Size       19938 / 77.88 GiB
  Free  PE / Size       51199 / 200.00 GiB
  VG UUID               nXjnp3-b5ai-IBxi-peep-hajU-R1y3-6djhc6

  --- Volume group ---
  VG Name               cinder-volumes
  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               19.53 GiB
  PE Size               4.00 MiB
  Total PE              4999
  Alloc PE / Size       0 / 0
  Free  PE / Size       4999 / 19.53 GiB
  VG UUID               M35SMb-lP2E-qP9B-Harn-pIDa-CW7B-Uf3Qi0

次は論理ボリュームに /dev/sdb1 を追加します。追加前に論理ボリュームの状態を確認しておきます。

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/virl-vg/root
  LV Name                root
  VG Name                virl-vg
  LV UUID                gbgup2-FDJ5-Q0R6-6y28-TJff-AvNH-WFW1s3
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 1
  LV Size                70.07 GiB
  Current LE             17938
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/virl-vg/swap_1
  LV Name                swap_1
  VG Name                virl-vg
  LV UUID                f0zdIS-r3db-I3Wy-63Yf-4eA1-hP1Y-kFdaAX
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 2
  LV Size                7.81 GiB
  Current LE             2000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

/dev/virl-vg/root に /dev/sdb1 を追加し、論理ボリュームを拡張します。

$ sudo lvextend /dev/virl-vg/root /dev/sdb1
  Extending logical volume root to 270.07 GiB
  Logical volume root successfully resized

再度、論理ボリュームの状態を表示します。VG Size が /dev/sdb1 (200GB) の分、拡張されているのが分かります。

$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/virl-vg/root
  LV Name                root
  VG Name                virl-vg
  LV UUID                gbgup2-FDJ5-Q0R6-6y28-TJff-AvNH-WFW1s3
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 1
  LV Size                270.07 GiB
  Current LE             69137
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/virl-vg/swap_1
  LV Name                swap_1
  VG Name                virl-vg
  LV UUID                f0zdIS-r3db-I3Wy-63Yf-4eA1-hP1Y-kFdaAX
  LV Write Access        read/write
  LV Creation host, time virl, 2016-02-12 00:28:17 +0000
  LV Status              available
  # open                 2
  LV Size                7.81 GiB
  Current LE             2000
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1

最後にファイルシステムをリサイズします。ファイルシステムは XFS なので、xfs_growfs を使います。

$ sudo xfs_growfs /dev/virl-vg/root
meta-data=/dev/mapper/virl--vg-root isize=256    agcount=4, agsize=4592128 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=18368512, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=8969, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 18368512 to 70796288

状態確認

df でディスク容量情報を表示します。/dev/mapper/virl--vg-root の容量が拡張されているのが分かります。

$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
udev                        32G  4.0K   32G   1% /dev
tmpfs                      6.3G  3.9M  6.3G   1% /run
/dev/mapper/virl--vg-root  271G   50G  221G  19% /
none                       4.0K     0  4.0K   0% /sys/fs/cgroup
none                       5.0M     0  5.0M   0% /run/lock
none                        32G   80K   32G   1% /run/shm
none                       100M  4.0K  100M   1% /run/user
/dev/sda1                  236M   79M  146M  36% /boot