【Linux知识】Linux 虚拟机磁盘扩缩容操作指南(按文件系统分类)

Linux 虚拟机磁盘扩缩容操作指南(按文件系统分类)

Linux 虚拟机磁盘扩缩容操作指南(按文件系统分类)

虚拟机磁盘扩缩容需遵循"先调整底层存储(虚拟机软件)→ 再调整分区/逻辑卷 → 最后调整文件系统 "的流程。以下按扩容 和缩容 两大类,结合文件系统类型 (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/sda1 df -hT
Btrfs ① 重新扫描磁盘 (同上) ② 扩展分区 : sudo growpart /dev/sda 1 ③ 扩展文件系统 (需指定挂载点): sudo btrfs filesystem resize max /mount_point lsblk /dev/sda1 df -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):
bash 复制代码
# ① 创建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):
bash 复制代码
sudo swapoff /swapfile  # 关闭Swap  
sudo rm /swapfile       # 删除文件  
# 从/etc/fstab删除对应行  

三、关键注意事项

  1. 备份优先 :缩容前必须用tar/rsync备份数据,避免不可逆损失。
  2. 文件系统限制:XFS仅支持扩容,不支持缩容;ext4/Btrfs支持扩缩容(需先缩小文件系统再缩小分区)。
  3. 分区与文件系统顺序:扩容时"先分区后文件系统",缩容时"先文件系统后分区"。
  4. 虚拟机磁盘类型 :动态分配磁盘(Thin Provision)缩容需先清理碎片(如virt-sparsify工具),固定大小磁盘(Thick Provision)缩容需虚拟机软件支持(如VMware需"压缩磁盘"功能)。

按上述步骤操作,可安全完成Linux虚拟机磁盘的扩缩容,确保数据完整与系统稳定。

相关推荐
无奈笑天下3 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla6 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
火云代理6 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
威嵌神州6 小时前
嵌入式排故实录:高并发下串口数据“超时丢包”的根因剖析与架构优化
运维·服务器·嵌入式硬件·缓存
Decay__7 小时前
SQLServer 索引与 SQL 优化 —— 聚集索引、非聚集索引、覆盖索引、碎片维护与执行计划
运维·数据库·sql·mysql·架构
java_logo8 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
火云代理10 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
坤坤子吖10 小时前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
AI_Gump10 小时前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
星恒随风12 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql