调整 KVM 虚拟硬盘大小
最简单的办法是使用 GParted,挂载 gparted-live iso 文件后启动图形化界面操作分区,很容易:
# kvm -m 512 -hda disk.0 -cdrom /root/gparted-live-0.12.1-5.iso -boot d -vnc :1
这里主要介绍不用 GParted 的办法,分区用 fdisk 就可以了,没有必要也不适合在服务器上使用图形化工具。扩大硬盘镜像:
# qemu-img resize disk.0 +100GB
找一个空闲的 loop 设备并挂上硬盘镜像:
# losetup -f
/dev/loop0
# losetup /dev/loop0 disk.0
用 fdisk 把以前的分区都删除,然后重新创建分区,如果有 swap 区依然要用类型 82 标注,boot 区要标明 bootable,要非常小心:
# fdisk /dev/loop0
挂载硬盘里面的 LVM 分区、强制校验文件系统并扩大文件系统:
# kpartx -av /dev/loop0
# e2fsck -f /dev/mapper/loop0p1
# resize2fs -f /dev/mapper/loop0p1
用 mount 测试一下扩大后的文件系统是否能正常 mount:
# mount /dev/mapper/loop0p1 /mnt
# ls /mnt
卸载和清理:
# umount /mnt
# kpartx -dv /dev/loop0
# losetup -d /dev/loop0
把上面的步骤弄个小脚本,只对 http://cloud-images.Ubuntu.com/ 下载的镜像有效,如果是自己做的镜像需要调整 fdisk 分区时候的指令。注意这里 fdisk 分区的时候 d 是删除分区 n 是创建分区 p 是主分区 1 是第1个 2是第2个 w 是保存,具体看 fdisk 帮助:
#!/bin/bash
DISK=$1
SIZE=$2
qemu-img resize $DISK $SIZE
losetup /dev/loop0 $DISK
fdisk /dev/loop0 <<EOF
d
n
p
1
2
w
EOF
kpartx -av /dev/loop0
e2fsck -f /dev/mapper/loop0p1
resize2fs -f /dev/mapper/loop0p1
kpartx -dv /dev/loop0
losetup -d /dev/loop0