VirtualBox磁盘扩容

今天发现vagrant的其中一个虚拟机磁盘空间不够了,需要对其进行磁盘扩容,但不期望是通过增加新硬盘的方式,而是直接增加原磁盘容量的方式来无缝扩容。

修改磁盘文件

进入到vm磁盘文件所在的目录~/VirtualBox VMs/dev_default_1531796361866_92956

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% vboxmanage showhdinfo  centos-vm-disk1.vmdk
UUID:           acbb4ffc-0580-40d6-8627-3ed24cd0beff
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       /Users/lvkai/VirtualBox VMs/dev_default_1531796361866_92956/centos-vm-disk1.vmdk
Storage format: VMDK
Format variant: dynamic default
Capacity:       10000 MBytes
Size on disk:   9634 MBytes
Encryption:     disabled
In use by VMs:  dev_default_1531796361866_92956 (UUID: a153957c-e43f-4dd2-8512-f51d42dee3d3)

# 将之前存储的vmdk格式的文件复制一份vdi格式的文件,由于需要复制文件,该命令需要执行一段时间
% vboxmanage clonehd centos-vm-disk1.vmdk new-centos-vm-disk1.vdi --format vdi

# 将vdi格式的文件修改磁盘空间上限大小为80g,但实际占用磁盘空间仍然为之前的大小
% vboxmanage modifyhd  new-centos-vm-disk1.vdi --resize 81920

# 将vdi格式的文件重新转换为vmdk格式,会产生一个新的uuid
% vboxmanage clonehd new-centos-vm-disk1.vdi resized.vmdk --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: 7e454b50-0681-494b-b9ca-81700d217c0a

新的硬盘创建完成后,在virtualbox的界面上将对应虚拟机的硬盘更换为resized.vmdk,并将之前旧的centos-vm-disk1.vmdk给删除掉。

使用fdisk创建新的磁盘分区

以上命令执行完成后,开启虚拟机,进入系统,可以看到磁盘空间大小变更为85.9GB,但挂载的磁盘空间大小仍然为8.3G,新增加的磁盘空间仍然处于未分配状态。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# fdisk -l

Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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 label type: dos
Disk identifier: 0x0000ca5e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20479999     9726976   8e  Linux LVM

Disk /dev/mapper/centos-root: 8866 MB, 8866758656 bytes, 17317888 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 /dev/mapper/centos-swap: 1048 MB, 1048576000 bytes, 2048000 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

# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.3G  7.9G  386M  96% /
devtmpfs                 296M     0  296M   0% /dev
tmpfs                    307M     0  307M   0% /dev/shm
tmpfs                    307M  4.5M  303M   2% /run
tmpfs                    307M     0  307M   0% /sys/fs/cgroup
/dev/sda1                497M  195M  303M  40% /boot
vagrant                  466G  390G   77G  84% /vagrant
vagrant_data             466G  390G   77G  84% /vagrant_data
tmpfs                     62M     0   62M   0% /run/user/1000

接下来需要将未分配的磁盘空间

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# fdisk /dev/sda
# 依次输入可创建新的分区
n
p
回车
回车

# 继续输入p,可以看到磁盘的情况,多出了/dev/sda3
# /dev/sda3的System为Linux,而/dev/sda2的System为Linux LVM
Command (m for help): p

Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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 label type: dos
Disk identifier: 0x0000ca5e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20479999     9726976   8e  Linux LVM
/dev/sda3        20480000   167772159    73646080   83  Linux

# 依次输入将/dev/sda3更改为LVM格式
t
3
8e
p

Disk /dev/sda: 85.9 GB, 85899345920 bytes, 167772160 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 label type: dos
Disk identifier: 0x0000ca5e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048    20479999     9726976   8e  Linux LVM
/dev/sda3        20480000   167772159    73646080   8e  Linux LVM

# 输入w后进行保存操作
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.

将新创建的磁盘分区添加到LVM分区中

将机器重启后,继续执行如下命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# vgdisplay
  --- Volume group ---
  VG Name               centos
  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               9.27 GiB
  PE Size               4.00 MiB
  Total PE              2374
  Alloc PE / Size       2364 / 9.23 GiB
  Free  PE / Size       10 / 40.00 MiB
  VG UUID               cpEmYK-XFew-6ZWT-GEeY-yEou-0vLq-OJiD08

# lvscan
  ACTIVE            '/dev/centos/swap' [1000.00 MiB] inherit
  ACTIVE            '/dev/centos/root' [<8.26 GiB] inherit

# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created.

# vgextend centos /dev/sda3
  Volume group "centos" successfully extended

# lvextend /dev/centos/root /dev/sda3
  Size of logical volume centos/root changed from <8.26 GiB (2114 extents) to <78.49 GiB (20093 extents).
  Logical volume centos/root successfully resized.

# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=541184 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2164736, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 2164736 to 20575232

# 最后执行命令可以看到磁盘空间已经增加
# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   79G  7.9G   71G  11% /
devtmpfs                 296M     0  296M   0% /dev
tmpfs                    307M     0  307M   0% /dev/shm
tmpfs                    307M  4.5M  303M   2% /run
tmpfs                    307M     0  307M   0% /sys/fs/cgroup
/dev/sda1                497M  195M  303M  40% /boot
vagrant                  466G  390G   77G  84% /vagrant
vagrant_data             466G  390G   77G  84% /vagrant_data
tmpfs                     62M     0   62M   0% /run/user/1000