ubuntu虚拟机扩容
2024-02-26 15:13:18

背景

之前创建了一台 ubuntu 虚拟机,当时想的是临时用一下,就给了它默认的 32 g 硬盘,结果没想到开发一段时间后不够用了,但是上面又保存了我的开发环境,以及各种代码。我不想重新配置环境,所以只能考虑对虚拟机的磁盘进行扩容。

检查环境

当 docker 给出了空间不足的报错以后,执行以下指令查看存储情况。

1
df -h

其中有一个名为 /dev/mapper/ubuntu--vg-ubuntu--lv 的存储已经使用完了,这就是虚拟机的虚拟磁盘,我们扩容主要就是对它扩容。

增加新的硬盘并分区

通过虚拟机管理软件,可以插入一块新的硬盘,设置为自己需要的大小。具体不同的软件的操作页面有些不同,自行查看设置即可。

列出存储设备

1
2
3
4
5
6
7
8
9
10
11
12
lsblk

NAME MAJ:MIN rm SIZE RO type mountpoint
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 46.6G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 190M 0 part /boot
├─sda6 8:6 0 3.7G 0 part [SWAP]
├─sda7 8:7 0 93.1G 0 part /data
└─sda8 8:8 0 89.2G 0 part /personal
sr0 11:0 1 1024M 0 rom

格式化磁盘

此处格式化为 ext4,如果需要其它格式,自行查一下对应的指令。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@linuxcool ~]# mkfs.ext4 -c /dev/sdb
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 2468ba17-0d37-4900-b67e-5f3a24084fc5
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000

Checking for bad blocks (read-only test): 0.00% done, 0:00 elapsed. (0/0/0 errdone
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

调整分区类型

1
2
3
4
5
6
7
8
9
10
# 调整分区类型为LVM,也就是8e类型
fdisk /dev/sdb
# 选定分区后使用 t 选项,然后选择8e类型

# 通知内核重读分区表
partx -a /dev/sdb

# 查看
cat /proc/partitions
lsblk

扩容

可使用 lvextend 命令对虚拟存储卷进行扩容

1
2
3
4
5
6
7
8
# 执行命令 
lvextend -L 40G /dev/mapper/ubuntu--vg-ubuntu--lv

# -L num+G 即扩容到多大的空间
# 此处将docker对应空间扩容到40G

# 返回信息
Size of logical volume ubuntu-vg/ubuntu-lv changed from 24.50 GiB (6272 extents) to 40.00 GiB (10240 extents). Logical volume ubuntu-vg/ubuntu-lv successfully resized.

重新计算磁盘空间

1
2
3
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 
# 返回信息
resize2fs 1.44.1 (24-Mar-2018) Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required old_desc_blocks = 4, new_desc_blocks = 5 The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 10485760 (4k) blocks long.

检查

1
df -h

总结

当虚拟机存储空间不足的时候,可以先挂载一块新的硬盘,然后格式化该硬盘并对硬盘进行分区。最后使用 lvextend 命令对虚拟机存储卷进行扩容。