引言
虚拟机磁盘扩缩容需遵循“先调整底层存储(虚拟机软件)→ 再调整分区/逻辑卷 → 最后调整文件系统”的流程。以下按扩容和缩容两大类,结合文件系统类型(ext4/xfs/btrfs)和分区方案(传统分区/lvm)详细说明,确保无歧义。
一、磁盘扩容(扩展容量)
前提:已在虚拟机软件(vmware/virtualbox/kvm)中扩展虚拟磁盘容量(如从 20gb→40gb),虚拟机处于关机或运行中(部分场景需重启识别新容量)。
(一)按文件系统类型与分区方案分类
1. 传统分区(非lvm,如/dev/sda1)
适用场景:磁盘直接分区(无lvm),文件系统为 ext4/xfs/btrfs。
| 文件系统 | 详细步骤 | 验证命令 |
|---|---|---|
| ext4 | ① 重新扫描磁盘(识别新容量): `echo 1 | sudo tee /sys/class/block/sda/device/rescan(sda为虚拟机磁盘)<br>② **扩展分区**:<br>sudo growpart /dev/sda 1(扩展第1分区,如/dev/sda1)<br>③ **扩展文件系统**:<br>sudo resize2fs /dev/sda1`(自动扩展到分区最大容量) |
| xfs | ① 重新扫描磁盘(同上) ② 扩展分区: sudo growpart /dev/sda 1③ 扩展文件系统(需指定挂载点): sudo xfs_growfs /mount_point(如根分区挂载点为/,则sudo xfs_growfs /) | lsblk /dev/sda1df -ht |
| btrfs | ① 重新扫描磁盘(同上) ② 扩展分区: sudo growpart /dev/sda 1③ 扩展文件系统(需指定挂载点): sudo btrfs filesystem resize max /mount_point | lsblk /dev/sda1df -ht |
2. lvm 逻辑卷(推荐生产环境)
适用场景:磁盘通过lvm管理(物理卷pv→卷组vg→逻辑卷lv),文件系统为 ext4/xfs/btrfs。
| 文件系统 | 详细步骤 | 验证命令 |
|---|---|---|
| ext4 | ① 重新扫描磁盘(同上) ② 扩展物理卷(pv): sudo pvresize /dev/sda2(假设pv为/dev/sda2,新增空间已分配)③ 扩展逻辑卷(lv): sudo lvextend -l +100%free /dev/vg_name/lv_name(vg_name为卷组名,lv_name为逻辑卷名,如vg0/root)④ 扩展文件系统: sudo resize2fs /dev/vg_name/lv_name | pvs(看pv容量)lvs(看lv容量)df -ht |
| xfs | ① 重新扫描磁盘(同上) ② 扩展pv: sudo pvresize /dev/sda2③ 扩展lv: sudo lvextend -l +100%free /dev/vg0/root④ 扩展文件系统(指定挂载点): sudo xfs_growfs /mount_point(如/) | pvs/lvs/df -ht |
| btrfs | ① 重新扫描磁盘(同上) ② 扩展pv: sudo pvresize /dev/sda2③ 扩展lv: sudo lvextend -l +100%free /dev/vg0/root④ 扩展文件系统(指定挂载点): sudo btrfs filesystem resize max /mount_point | pvs/lvs/df -ht |
(二)特殊说明
- 云虚拟机(如aws ec2):底层磁盘为云盘(ebs),需先在云平台控制台扩展云盘,再通过
growpart扩展分区(如nvme磁盘/dev/nvme0n1p1)。 - 在线扩容:lvm+ext4/xfs/btrfs支持在线扩容(无需卸载文件系统);传统分区需确保分区未挂载(或根分区通过live cd操作)。
二、磁盘缩容(减小容量)
风险提示:缩容需先缩小文件系统,再缩小分区/lv,数据丢失风险极高,务必先备份!xfs文件系统不支持缩容,需用迁移数据替代。
(一)按文件系统类型与分区方案分类
1. 传统分区(非lvm,ext4/btrfs支持缩容,xfs不支持)
适用场景:ext4/btrfs文件系统,非lvm分区(如/dev/sda1)。
| 文件系统 | 详细步骤 | 验证命令 |
|---|---|---|
| ext4 | ① 备份数据:tar czvf /backup/data.tar.gz /mount_point(如/mount_point为/data)② 卸载文件系统: sudo umount /mount_point③ 检查错误: sudo e2fsck -f /dev/sda1(强制检查)④ 缩小文件系统(目标容量需>已用空间): sudo resize2fs /dev/sda1 20g(缩小至20gb)⑤ 缩小分区(用parted): sudo parted /dev/sda→(parted) resizepart 1→输入新结束位置(如20gb)→(parted) quit⑥ 重新挂载: sudo mount /dev/sda1 /mount_point | df -ht(看容量)lsblk /dev/sda1 |
| btrfs | ① 备份数据(同上) ② 卸载文件系统: sudo umount /mount_point③ 缩小文件系统: sudo btrfs filesystem resize 20g /mount_point(缩小至20gb)④ 缩小分区(用parted,同上) ⑤ 重新挂载 | df -ht/lsblk |
| xfs | 不支持缩容!替代方案: ① 备份数据到外部存储 ② 新建小分区(如20gb),格式化xfs: sudo mkfs.xfs /dev/sda1③ 恢复数据到新分区 ④ 修改/etc/fstab切换挂载点 | - |
2. lvm 逻辑卷(ext4/btrfs支持缩容,xfs不支持)
适用场景:ext4/btrfs文件系统,lvm逻辑卷(如vg0/root)。
| 文件系统 | 详细步骤 | 验证命令 |
|---|---|---|
| ext4 | ① 备份数据(同上) ② 卸载文件系统(根分区需进救援模式或用live cd) ③ 检查错误: sudo e2fsck -f /dev/vg0/root④ 缩小文件系统: sudo resize2fs /dev/vg0/root 20g(缩小至20gb)⑤ 缩小逻辑卷(lv): sudo lvreduce -l 20g /dev/vg0/root(lv容量需≥文件系统容量)⑥ 重新挂载 | lvs(看lv容量)df -ht |
| btrfs | ① 备份数据(同上) ② 卸载文件系统 ③ 缩小文件系统: sudo btrfs filesystem resize 20g /mount_point④ 缩小lv: sudo lvreduce -l 20g /dev/vg0/root⑤ 重新挂载 | lvs/df -ht |
| xfs | 不支持缩容!替代方案: ① 备份数据到外部存储 ② 新建小lv: sudo lvcreate -l 20g -n new_lv vg0③ 格式化xfs: sudo mkfs.xfs /dev/vg0/new_lv④ 恢复数据到新lv ⑤ 修改/etc/fstab切换挂载点 | - |
(二)swap分区扩缩容(独立说明)
扩容(文件形式swap):
# ① 创建swap文件(如新增2gb) sudo fallocate -l 2g /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # ② 永久生效(/etc/fstab添加):echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
缩容(文件形式swap):
sudo swapoff /swapfile # 关闭swap sudo rm /swapfile # 删除文件 # 从/etc/fstab删除对应行
三、关键注意事项
- 备份优先:缩容前必须用
tar/rsync备份数据,避免不可逆损失。 - 文件系统限制:xfs仅支持扩容,不支持缩容;ext4/btrfs支持扩缩容(需先缩小文件系统再缩小分区)。
- 分区与文件系统顺序:扩容时“先分区后文件系统”,缩容时“先文件系统后分区”。
- 虚拟机磁盘类型:动态分配磁盘(thin provision)缩容需先清理碎片(如
virt-sparsify工具),固定大小磁盘(thick provision)缩容需虚拟机软件支持(如vmware需“压缩磁盘”功能)。
按上述步骤操作,可安全完成linux虚拟机磁盘的扩缩容,确保数据完整与系统稳定。
以上就是linux虚拟机磁盘扩缩容的操作指南(按文件系统分类)的详细内容,更多关于linux磁盘扩缩容的资料请关注代码网其它相关文章!
发表评论