KVM笔记之磁盘扩容


磁盘扩容

关闭KVM虚拟机

virsh shutdown vm-ubuntu-04

扩容磁盘

查看磁盘位置

# virsh domblklist vm-ubuntu-04
Target     Source
------------------------------------------------
vda        /home/kvm/images/ubuntu-04.qcow2

查看磁盘信息

# qemu-img info /home/kvm/images/ubuntu-04.qcow2
image: /home/kvm/images/ubuntu-04.qcow2
file format: qcow2
virtual size: 2.0G (2147483648 bytes)
disk size: 1.7G
cluster_size: 65536
Format specific information:
    compat: 0.10
    refcount bits: 16

可以看出现在虚拟机磁盘大小为 2G

扩容磁盘大小

# qemu-img resize /home/kvm/images/ubuntu-04.qcow2 +28G
Image resized.
# qemu-img info /home/kvm/images/ubuntu-04.qcow2 
image: /home/kvm/images/ubuntu-04.qcow2
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 1.7G
cluster_size: 65536
Format specific information:
    compat: 0.10
    refcount bits: 16

现在磁盘大小已增加到 30G

扩容虚拟机分区

启动虚拟机

virsh start vm-ubuntu-04

查看磁盘大小和格式

root@vm-ubuntu-04:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 88.5M  1 loop /snap/core/7270
vda    252:0    0   30G  0 disk
├─vda1 252:1    0    1M  0 part
└─vda2 252:2    0    2G  0 part /

现在跟分区只分配了 2G 的大小,而当前 vda 磁盘总量为 30G

root@vm-ubuntu-04:~# df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
udev           devtmpfs   4053076       0   4053076   0% /dev
tmpfs          tmpfs       816784     936    815848   1% /run
/dev/vda2      ext4       2028368 1634136    273144  86% /
tmpfs          tmpfs      4083912       0   4083912   0% /dev/shm
tmpfs          tmpfs         5120       0      5120   0% /run/lock
tmpfs          tmpfs      4083912       0   4083912   0% /sys/fs/cgroup
/dev/loop0     squashfs     90624   90624         0 100% /snap/core/7270
tmpfs          tmpfs       816780       0    816780   0% /run/user/0

注意 :不同格式的文件系统扩容磁盘命令 有所不同,比如我的根分区格式为 ext4, 以下将以 ext4 为例

扩容磁盘

  • 安装 cloud-guest-utils

    apt -y install cloud-guest-utils
    
  • 扩容磁盘

    root@vm-ubuntu-base:~# growpart /dev/vda 2
    CHANGED: partition=2 start=4096 old: size=4188160 end=4192256 new: size=62910431,end=62914527
    

    2 为跟分区所在磁盘

    root@vm-ubuntu-base:~# lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    loop0    7:0    0 88.5M  1 loop /snap/core/7270
    vda    252:0    0   30G  0 disk
    ├─vda1 252:1    0    1M  0 part
    └─vda2 252:2    0   30G  0 part /
    
  • 更新且格式化分区 resize2fs 扩容 ext4 文件系统, 其它可参考 https://computingforgeeks.com/extending-root-filesystem-using-lvm-linux/

    root@vm-ubuntu-base:~# resize2fs /dev/vda2
    resize2fs 1.44.1 (24-Mar-2018)
    Filesystem at /dev/vda2 is mounted on /; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 4
    The filesystem on /dev/vda2 is now 7863803 (4k) blocks long.
    
    root@vm-ubuntu-base:~# lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    loop0    7:0    0 88.5M  1 loop /snap/core/7270
    vda    252:0    0   30G  0 disk
    ├─vda1 252:1    0    1M  0 part
    └─vda2 252:2    0   30G  0 part /
    root@vm-ubuntu-base:~# df -hT | grep /dev/vda
    /dev/vda2      ext4       30G  1.6G   27G   6% /
    

磁盘挂载

创建磁盘

创建一块大小为 100G,格式为 qcow2 的磁盘

# qemu-img create -f qcow2 ubuntu-04-disk.qcow2 100G
Formatting 'ubuntu-04-disk.qcow2', fmt=qcow2 size=107374182400 cluster_size=65536 lazy_refcounts=off refcount_bits=16

查看磁盘大小

# qemu-img info ubuntu-04-disk.qcow2
image: ubuntu-04-disk.qcow2
file format: qcow2
virtual size: 100G (107374182400 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

挂载磁盘

挂载命令

virsh attach-disk vm-ubuntu-04 /home/kvm/images/ubuntu-04-disk.qcow2 --driver qemu --subdriver qcow2 vdb --persistent

注:

  • vm-ubuntu-04 为需要扩展的虚拟机名称

  • /home/kvm/images/ubuntu-04-disk.qcow2 为刚创建好的扩展磁盘

  • vdb 为新扩展磁盘的名称

卸载命令

virsh detach-disk vm-ubuntu-04 /home/kvm/images/ubuntu-04-disk.qcow2 --persistent

格式化磁盘

虚拟机内执行

格式化分区

[root@vm-ubuntu-04 ~]# fdisk /dev/vdb
欢迎使用 fdisk (util-linux 2.23.2)

更改将停留在内存中直到您决定将更改写入磁盘
使用写入命令前请三思

Device does not contain a recognized partition table
使用磁盘标识符 0xd01c1c86 创建新的 DOS 磁盘标签

命令(输入 m 获取帮助)n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4默认 1)
起始 扇区 (2048-209715199默认为 2048)
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-209715199默认为 209715199)
将使用默认值 209715199
分区 1 已设置为 Linux 类型大小设为 100 GiB

命令(输入 m 获取帮助)w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘

格式化文件系统

[root@vm-ubuntu-04 ~]# lsblk
[root@vm-ubuntu-04 ~]# mkfs.ext4 /dev/vdb1

挂载磁盘

mkdir /home/data
mount /dev/vdb1 /home/data

FAQ

unexpected output in sfdisk --version

在执行 growpart /dev/vda 1 时报错

unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]

解决方案

LANG=en_US.UTF-8 growpart /dev/vda 1

参考链接

  • https://computingforgeeks.com/how-to-extend-increase-kvm-virtual-machine-disk-size/

  • https://computingforgeeks.com/resize-ext-and-xfs-root-partition-without-lvm/

作者: honmaple
链接: https://honmaple.me/articles/2020/01/KVM笔记之磁盘扩容.html
版权: 知识共享署名-非商业性使用-相同方式共享4.0国际许可协议
wechat