本教程所使用的分区格式为GPT,文件系统为EXT4。LMV的分区扩容方式与GPT方式不同。
1. 扩容
扩容操作可以在线进行,但缩容操作不可以。
扩容分为三个部分。首先是对硬盘进行扩容,此时使用lsblk可以看到硬盘的实际容量变大,但是硬盘下的分区没有变大。之后是对分区进行扩容,此时lsblk可以看到硬盘内的分区也变大,但是df命令看到的可用空间没有变大。最后是对分区内的文件系统进行扩容,此时df命令可以看到分区的可用容量变大。
1.1 硬盘空间扩容
vmdk文件可以直接在虚拟机内修改大小进行扩容。VMWare Workstation Pro以及ESXi都支持这样的操作,但都仅限于对硬盘进行扩容,直接缩小硬盘的大小是不被允许的。


此时使用lsblk可以看到硬盘被扩容。
1.2 分区扩容
使用parted /dev/<device>命令进行修改,将<device>替换为对应的硬盘设备。
操作过程中可能会提示需要修复,按照提示进行修复即可。
1 |
|
此时再次使用lsblk命令可以看到分区已经被扩容。
1.3 文件系统扩容
使用 resize2fs /dev/<device><num> 对文件系统进行扩容,device为硬盘的编号,num为分区的编号,具体可以在lsblk中进行查看。
此时,使用df命令可以看到可用空间已经顺利变大。
2. 缩容
!!!缩容操作可能会导致数据丢失,必须严格按照步骤进行操作。
!!!最好先把对应的vmdk文件备份一份以免没有办法补救。
2.1 文件系统缩容
使用 resize2fs /dev/<device><num> <size> 对分区进行缩容,<size>可以是xxK/M/G,如10G。
操作之后使用 df -h 命令查看缩小后的空间。
2.2 分区缩容
同样使用parted进行缩容。
unit s 指定的是扇区,也可以使用 unit MB unit MiB 指定单位为数据大小。具体可以参考 parted单位支持详解及使用示例-CSDN博客。
!!!由于1000进制和1024进制的问题,GB级别上的容量差异约为95.4%,TB级别上的差异约为93.1%。因此安全起见建议先按照90%差异进行分区缩容,如文件系统缩容后为90GB,那么分区先按照100GB进行缩小。完成后使用lsblk查看分区,然后再决定是否继续缩小。
2.3 新建硬盘并分区
经过测试,此时直接对硬盘空间进行截断依然会导致分区损坏,因此只能按照预期缩小后的硬盘大小新建一块硬盘,然后按照原来的分区重新分区,使用dd命令进行完成分区内容的迁移。
为了保证复制过程的数据一致性,建议不要在硬盘挂载的情况下进行分区复制的操作,如果需要复制的是系统盘建议使用ubuntu的安装镜像以试用方式启动后进行操作。
1 |
|
使用lsblk命令可以看到新硬盘的分区与源硬盘相同。
2.4 分区数据复制
分区复制的命令如下,逐个对分区进行复制。
1 |
|
2.5 修改UUID
在2.4完成后,数据已经完成了迁移,但相应的uuid并没有被迁移。部分文件系统的挂载是根据UUID进行的,因此需要对UUID进行复制。
使用blkid可以获取磁盘的UUID、分区的UUID、文件系统的UUID,依次修改新硬盘使其与源硬盘相同。
使用 gdisk /dev/<新硬盘编号> 编辑分区和硬盘。
1 |
|
使用 tune2fs /dev/<新硬盘编号><分区编号> -U <uuid> 修改ext4文件系统的uuid,仅针对ext4文件系统,其他的文件系统的分区无需进行该操作。
至此,所有工作完成,移除源硬盘,只使用新硬盘,启动虚拟机。
3. 补充
3.1 空间不够新建硬盘
将vmdk和vmdk-flat文件一同拷贝到其他设备,在新设备上操作。如果是缩容,新建硬盘的操作也要在原始机器上新建后再拷贝出来,否则可能会出现vmdk虚拟机版本不兼容的问题。操作时如果提示需要转换vmdk文件切记不要转换!