FEMU/QEMU 磁盘扩容

这是一篇在命令行环境下对虚拟机镜像进行扩容的小教程,FEMU 和 QEMU 的扩容方法是一样的

cow2 扩容

首先需要对 cow2 格式的镜像进行扩容,cow2 格式的镜像是 QEMU 的原生格式,这一步相当于对虚拟机的硬盘进行扩容,扩容的方法如下:

1
2
3
4
5
6
7
8
9
10
# 1. 查看当前镜像大小
# 我目前的镜像大小是80G,我想扩容至256G
qemu-img info u20s.qcow2
# 2. 扩容镜像
# u20s.qcow2是需要扩容的镜像
# +176G表示扩容176G(注意不要有空格
qemu-img resize u20s.qcow2 +176G
# 3. 查看镜像信息
# 此时应该可以看到镜像的大小已经增加了176G了
qemu-img info u20s.qcow2

查看分区情况

在扩容完镜像后,我们需要打开虚拟机,对分区进行扩容,我希望把新增的空间直接增加到原有的分区中,而不是新建一个分区

首先使用 fdisk 命令查看当前分区情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 查看当前分区情况
lsblk
# 得到如下信息
# ==================================================
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# fd0 2:0 1 4K 0 disk
# loop0 7:0 0 55.4M 1 loop /snap/core18/2855
# loop1 7:1 0 55M 1 loop /snap/core18/1880
# loop2 7:2 0 63.8M 1 loop /snap/core20/2501
# loop3 7:3 0 63.8M 1 loop /snap/core20/2571
# loop4 7:4 0 71.3M 1 loop /snap/lxd/16099
# loop5 7:5 0 91.9M 1 loop /snap/lxd/32662
# loop6 7:6 0 50.9M 1 loop /snap/snapd/24505
# loop7 7:7 0 44.5M 1 loop /snap/snapd/23771
# # sda设备显示有256G的空间,但sda1+sda2分区不足256G
# # 这说明该设备有未分配的空间
# sda 8:0 0 256G 0 disk
# ├─sda1 8:1 0 1M 0 part
# └─sda2 8:2 0 80G 0 part /
# nvme0n1 259:0 0 16G 0 disk
# ===================================================

扩容分区

接下来使用 parted 命令对分区进行扩容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 2. 使用parted命令对分区进行扩容
# 输入命令后会进入parted命令行模式
# 注意:在使用parted命令时,可能会提示需要使用root权限
parted /dev/sda

# 3. 查看当前分区情况
# (parted) 是parted命令行模式的提示符,不需要输入
(parted) print
# 得到如下信息
# ===================================================
# Model: QEMU QEMU HARDDISK (scsi)
# Disk /dev/sda: 275GB
# Sector size (logical/physical): 512B/512B
# Partition Table: gpt
# Disk Flags:
# Number Start End Size File system Name Flags
# 1 1049kB 2097kB 1049kB bios_grub
# 2 2097kB 85.9GB 85.9GB ext4
# ===================================================

# 4. 输入分区扩容命令
(parted) resizepart
# 得到如下提示
# Partition number?

# 5. 输入分区号
# 这里是2,对应print中的Number
2
# 得到如下提示
# Warning: Partition /dev/sda2 is being used. Are you sure you want to continue?
# Yes/No?

# 6. 输入yes
yes
# 得到如下提示
# End? [ 85.9GB]?

# 7. 输入新的分区大小
# 我们直接使用最大值即可
100%

# 8. 查询分区情况
(parted) print
# 得到如下信息
# ===================================================
# Model: QEMU QEMU HARDDISK (scsi)
# Disk /dev/sda: 275GB
# Sector size (logical/physical): 512B/512B
# Partition Table: gpt
# Disk Flags:

# Number Start End Size File system Name Flags
# 1 1049kB 2097kB 1049kB bios_grub
# # 可以看到sda2的大小已经变成了275GB了,虽然和想象的256GB不一样
# # 但毕竟是扩容成功了
# 2 2097kB 275GB 275GB ext4
# ===================================================

# 9. 退出parted命令行模式
(parted) quit

# 10. 查看分区情况
lsblk
# 得到如下信息
# ===================================================
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# fd0 2:0 1 4K 0 disk
# loop0 7:0 0 55.4M 1 loop /snap/core18/2855
# loop1 7:1 0 55M 1 loop /snap/core18/1880
# loop2 7:2 0 63.8M 1 loop /snap/core20/2501
# loop3 7:3 0 63.8M 1 loop /snap/core20/2571
# loop4 7:4 0 71.3M 1 loop /snap/lxd/16099
# loop5 7:5 0 91.9M 1 loop /snap/lxd/32662
# loop6 7:6 0 50.9M 1 loop /snap/snapd/24505
# loop7 7:7 0 44.5M 1 loop /snap/snapd/23771
# # 可以看到sda2的大小已经变成了256G了
# sda 8:0 0 256G 0 disk
# ├─sda1 8:1 0 1M 0 part
# └─sda2 8:2 0 256G 0 part /
# nvme0n1 259:0 0 16G 0 disk
# ===================================================

格式化分区

接下来我们需要对分区进行格式化,格式化的方法如下:

1
2
3
4
5
6
resize2fs /dev/sda2
# 得到如下信息
# resize2fs 1.45.5 (07-Jan-2020)
# Filesystem at /dev/sda2 is mounted on /; on-line resizing required
# old_desc_blocks = 10, new_desc_blocks = 32
# The filesystem on /dev/sda2 is now 67108347 (4k) blocks long.

使用 df -h 命令查看分区情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
df -h
# 得到如下信息
# ======================================================
# Filesystem Size Used Avail Use% Mounted on
# udev 16G 0 16G 0% /dev
# tmpfs 3.2G 1.1M 3.2G 1% /run
# /dev/sda2 252G 48G 194G 20% /
# tmpfs 16G 0 16G 0% /dev/shm
# tmpfs 5.0M 0 5.0M 0% /run/lock
# tmpfs 16G 0 16G 0% /sys/fs/cgroup
# /dev/loop1 55M 55M 0 100% /snap/core18/1880
# /dev/loop2 64M 64M 0 100% /snap/core20/2501
# /dev/loop0 56M 56M 0 100% /snap/core18/2855
# /dev/loop4 72M 72M 0 100% /snap/lxd/16099
# /dev/loop7 45M 45M 0 100% /snap/snapd/23771
# /dev/loop3 64M 64M 0 100% /snap/core20/2571
# /dev/loop6 51M 51M 0 100% /snap/snapd/24505
# /dev/loop5 92M 92M 0 100% /snap/lxd/32662
# tmpfs 3.2G 0 3.2G 0% /run/user/1000
# ======================================================

可以看到分区已经成功扩容了,又可以继续快乐的使用了


FEMU/QEMU 磁盘扩容
http://ciliphen.github.io/FEMU-QEMU-磁盘扩容/
作者
Felix
发布于
2025年5月22日
更新于
2025年6月25日
许可协议