VMホストでDISK領域を拡張する方法 ※追記あり

· 7 min read
VMホストでDISK領域を拡張する方法 ※追記あり

※3/18追記
どうやらfdiskを使うやり方は少々古いようです。
partedコマンドでDISK領域を増やす方法があったので、こちらもご紹介します。

partedのインストール

デフォルトだとpartedコマンドがないのでインストールします。

# yum install parted 

拡張前の状態を確認する

dfだと3.9GBしか認識されていませんが、sda領域自体はトータル10GBありますね。

[root@db ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_templete-lv_root
                      3.9G  1.3G  2.4G  35% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             477M  101M  351M  23% /boot

[root@db ~]# lsblk
NAME                           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                              8:0    0   10G  0 disk 
├─sda1                           8:1    0  500M  0 part /boot
└─sda2                           8:2    0  4.5G  0 part 
  ├─vg_templete-lv_root (dm-0) 253:0    0    4G  0 lvm  /
  └─vg_templete-lv_swap (dm-1) 253:1    0  512M  0 lvm  [SWAP]
sr0                             11:0    1 1024M  0 rom  

fdiskでパーティションを確認。一部しか割当たっていない状態。残りはフリー。

[root@db ~]# fdisk -l /dev/sda  

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000a9c6d

   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         653     4729856   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

partedでパーティション切り直し

partedコマンドで早速パーティションを切り分けしていきましょう。

[root@db ~]# parted /dev/sda
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)   

初期の段階では、セクタの単位がバラバラになので
以下のコマンドでメガバイト単位に固定した方が見やすいかと。

(parted) unit MB
(parted) print                                                          
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 10737MB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1.05MB  525MB   524MB   primary  ext4         boot
 2      525MB   5369MB  4843MB  primary               lvm


2 のパーティション削除します。
なにやら物騒なエラー出力がでましたが、実際に領域が消失した訳ではないのでご安心を。

(parted) rm 2                                                             
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until
after reboot.

(parted) print                                                            
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 10.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  525MB  524MB  primary  ext4         boot

全容量を使えるようにパーティションを再作成。増えてますね。

(parted) mkpart primary 525MB 10.7GB 

(parted) print                                                                                                                                                          
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 10.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  525MB   524MB   primary  ext4         boot
 2      525MB   10.7GB  10.2GB  primary

作成したパーティションにLVMフラグをセット。

(parted) set 2 lvm on  

(parted) print                                                                                                                                                          
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 10.7GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  525MB   524MB   primary  ext4         boot
 2      525MB   10.7GB  10.2GB  primary               lvm

最後に quit でpartedを抜けます。

あとは下記にある通り、新パーティションを既存ボリュームに追加する方法を行えば
DISK領域が拡張されます。rebootいらずで更に楽ちんでした。


ふと見たら検証機のDISKの使用量が100%になってました。。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      3.9G  3.7G  4.8M 100% /

不要なファイルを削除してみましたが、それでも容量がなかなか変わらないので
DISK容量の増設をしてみたいと思います。その時の覚書です。

VM管理画面上でDISKを増設

物理的なDISKの容量を拡張します。

※VMWAREの場合
VMwareのメニューから仮想マシン→ハードディスク(IDE)→ハードディスク(IDE)設定を選択
⇒適当に増やしたい分だけ増やしておきます。

※Hyper-Vの場合
Hyper-Vのメニューからディスクの編集…→ ディスクの場所(仮想マシンのDISK)→ 拡張(E)を選択
⇒適当に増やしたい分だけ増やしておきます。

今回は5GB程容量を増やしてみました。
ちなみに増設にはサーバが停止している必要があります。

fdiskでDISKを増やす

増設したらサーバを起動します。
rootでログインしたらfdiskコマンドでちゃんと増えているか確認。

[root@test ~]# fdisk -l /dev/sda

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bd63d

   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         653     4729856   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

元のDISK容量が3.9GBでしたが、総容量が10.7GBに増えてます。
しかし、実際に使える領域は増えてません。

パーティションを切り直します。Windowsで言うところのフォーマットですね。
※念のためバックアップやスナップショットは取りましょう。

[root@test ~]# fdisk /dev/sda

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

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): 

入ったらまず既存のパーティションを一旦消します。

[root@test ~]# 
[root@test ~]# fdisk /dev/sda

The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.

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): d
Partition number (1-4): 2

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bd63d

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

消えたので作り直します。

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (64-1305, default 64): 
Using default value 64
Last cylinder, +cylinders or +size{K,M,G} (64-1305, default 1305): 
Using default value 1305

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bd63d

   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        1305     9969388+  83  Linux

LVMなので変更します。

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x000bd63d

   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        1305     9969388+  8e  Linux LVM

これで新しいディスク領域が使えるようになりました。
確認して大丈夫だったら保存して抜けます。

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)
Syncing disks.

そしてマシンを再起動します。

# reboot

新しいパーティションを既存ボリュームに追加する

再起動した直後はまだDISK領域は増えてませんので、ディスクを拡張します。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      3.9G  3.7G  4.6M 100% /

最後の仕上げです。
物理ボリュームをリサイズします。

[root@test ~]# pvresize /dev/sda2
  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

論理ボリュームを拡張します。
lvextendを実行することで、拡張されたVGの未使用領域をLVに追加できます。
以下はVG上の未使用領域のすべてをLVに追加する場合の実行例。

[root@test ~]# lvextend -l +100%FREE /dev/mapper/VolGroup-lv_root                                                                                                      
  Size of logical volume VolGroup/lv_root changed from 4.01 GiB (1026 extents) to 9.00 GiB (2305 extents).
  Logical volume lv_root successfully resized.

resize2fsを実行してファイルシステムを拡張します。

[root@test ~]# resize2fs /dev/mapper/VolGroup-lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/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/mapper/VolGroup-lv_root to 2360320 (4k) blocks.
The filesystem on /dev/mapper/VolGroup-lv_root is now 2360320 blocks long.

こちらで作業が完了になります。

[root@test ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                      8.8G  3.7G  4.7G  44% /

DISKの使用量が100%から44%まで減少しました。成功ですね。

※参考サイト
http://d.hatena.ne.jp/tatz_tsuchiya/20140202/1391328269
http://qiita.com/2or3/items/501f206a6091a4ce895f
http://qiita.com/g_maeda/items/3602dc2f7af3f711f9c4
http://yomon.hatenablog.com/entry/2016/04/22/233825