背景 之前创建了一台 ubuntu 虚拟机,当时想的是临时用一下,就给了它默认的 32 g 硬盘,结果没想到开发一段时间后不够用了,但是上面又保存了我的开发环境,以及各种代码。我不想重新配置环境,所以只能考虑对虚拟机的磁盘进行扩容。
检查环境 当 docker 给出了空间不足的报错以后,执行以下指令查看存储情况。
其中有一个名为 /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.
检查
总结 当虚拟机存储空间不足的时候,可以先挂载一块新的硬盘,然后格式化该硬盘并对硬盘进行分区。最后使用 lvextend 命令对虚拟机存储卷进行扩容。