How to shrink disk for KVM
如何expand虚拟机磁盘分区相对于shrink比较简单:
1. 创建一个要扩展size大小的目标img文件
2. 选择要扩展的分区
3. virt-resize --expand /dev/sda1 source.img target.img
要保证target比source的文件大。
shrink稍微复杂一些,因为考虑到内部文件系统的使用量,如果过度缩小会破坏文件系统。
首先要查看确定文件系统的使用量,和将要缩小的size
1. virt-df source.img
使用guestfish 读取source.img (不要加-i 自动挂载,对文件系统做操作,不要保持这个设备在使用)
2. guestfish -a source.img
输入run,正式加载磁盘文件
3. run
下面和bash下的操作类似,扫描分区
4. e2fsck-f /dev/vda1
调整分区大小,一定要保证调整后的大小要比内部文件系统的使用量大,否则会出错。
5. resize2fs-size /dev/vda1 5G
调整完成,退出
6. exit
创建shrink的目标文件,因为缩小了分区,但是磁盘的大小还是原先的,占用量并没有变化。
7. qemu-img create -f raw target.img 5G
使用guestfish的工具virt-resize 缩减磁盘文件的大小,原理相当于同时挂载两个镜像,然后将一个磁盘文件的全部内容和修改的部分拷贝到另一个磁盘中。(不过此方法不适用与直接缩减分区,如果有进展会将新的进度更新)
8. virt-resize --shrink /dev/sda1 source.img target.img
查看新的磁盘文件的状态。
9. qemu-img info target.img
查看调整后的磁盘内部文件系统的使用量。
10. virt-df target.img