温馨提示×

Linux分区如何进行扩展缩小

小樊
37
2025-12-08 02:35:42
栏目: 智能运维

Linux 分区扩展与缩小的完整指南

一、核心原则与准备

  • 先明确当前是 LVM 还是 非LVM,以及文件系统类型(ext2/3/4XFS)。扩容与缩容的先后顺序不同:
    • 扩容:先扩大“底层空间”(分区/LV/磁盘),再扩大“文件系统”。
    • 缩容:先缩小“文件系统”,再缩小“底层空间”。
  • 文件系统差异:
    • ext2/3/4:支持在线/离线增大与缩小(缩小前必须检查并离线)。
    • XFS:仅支持在线增大,不支持缩小。
  • 在线与离线:
    • LVM 逻辑卷:多数场景下 LV 可在线扩容;缩小 LV 前需先卸载文件系统。
    • 非LVM 分区:通常需要卸载后才能调整;根分区多需救援模式或 LiveCD 操作。
  • 连续空间要求:
    • 非LVM 要扩容的分区后面需有相邻未分配空间;若空闲在前面,通常需要备份后删除重建分区。
  • 重要提示:
    • 操作前务必完整备份,并在关键步骤前创建快照(云盘/虚拟机环境)。
    • 缩小操作有数据损坏风险,务必确认空闲空间足够且流程正确。

二、LVM 场景

  • 常用命令速览
    • 查看:df -hT、lvs、vgs、pvs
    • 扩容 LV:lvextend -L +10G /dev/vg/lv 或 -l +100%FREE
    • 扩容文件系统:
      • ext2/3/4:resize2fs /dev/vg/lv
      • xfs:xfs_growfs 挂载点
    • 缩小 LV(仅 ext*):先卸载 → e2fsck -f → resize2fs → lvreduce
  • 示例 1(ext4,增大 LV 并同步文件系统)
    1. 扩容 LV lvextend -L +20G /dev/centos/root
    2. 在线扩展 ext4 文件系统 resize2fs /dev/centos/root
  • 示例 2(ext4,缩小 LV 并把空间给 root)
    1. 卸载要缩小的 LV(如 /home) umount /home
    2. 强制检查并缩小文件系统到目标大小(如 200G) e2fsck -f /dev/centos/home resize2fs /dev/centos/home 200G
    3. 缩小 LV 到与文件系统一致 lvreduce -L 200G /dev/centos/home
    4. 重新挂载并检查 mount /home df -h
    5. 将空闲空间扩展到 root lvextend -l +100%FREE /dev/centos/root resize2fs /dev/centos/root
  • 示例 3(xfs,仅能增大)
    1. 扩容 LV lvextend -L +50G /dev/centos/home
    2. 扩展 XFS 文件系统(指定挂载点) xfs_growfs /home
  • 示例 4(swap 扩容)
    1. 关闭 swap swapoff /dev/mapper/vg-swap
    2. 扩容 LV lvextend -L +1G /dev/mapper/vg-swap
    3. 重新格式化并启用 mkswap /dev/mapper/vg-swap swapon /dev/mapper/vg-swap

三、非 LVM 场景

  • 基本思路
    • 扩容:卸载分区 → 调整分区大小(工具如 fdisk/parted/gparted)→ 扩展文件系统 → 重新挂载。
    • 缩容:卸载分区 → 检查并缩小文件系统 → 调整分区大小 →(可选)再次让文件系统填满分区。
  • 示例 1(ext4 缩小分区)
    1. 卸载 umount /dev/sda2
    2. 强制检查 e2fsck -f /dev/sda2
    3. 缩小文件系统到目标大小(如 10G) resize2fs /dev/sda2 10G
    4. 调整分区大小(保持起始扇区不变,仅改结束扇区;可用 parted 的 resizepart) parted /dev/sda (parted) resizepart 2 10G
    5. 让文件系统填满分区(如仍有余量) resize2fs /dev/sda2
    6. 挂载并检查 mount /dev/sda2 /mnt df -h
  • 示例 2(ext4 扩大分区)
    1. 确保分区后侧有相邻未分配空间
    2. 用 fdisk/parted 删除并重建分区(保持起始扇区不变,仅扩大结束扇区),或使用 gparted 在线调整。
    3. 扩展文件系统 resize2fs /dev/sda2
  • 示例 3(xfs 仅能增大)
    1. 扩大分区后执行 xfs_growfs 挂载点
  • 重要限制
    • 非LVM 要扩容的分区必须与其后方的未分配空间相邻;若空闲在前面,通常需要备份数据、删除并重建分区。

四、云盘与系统盘在线扩容

  • 适用于云服务器系统盘(如 ECS 云盘)在控制台扩容后,在系统内扩展分区与文件系统。
  • 步骤
    1. 安装工具
      • CentOS/Alibaba Cloud Linux:yum install -y cloud-utils-growpart xfsprogs
      • Ubuntu/Debian:apt-get install -y cloud-guest-utils xfsprogs
    2. 查看磁盘与分区 fdisk -l df -Th
    3. 扩展分区(growpart 对指定分区号) growpart /dev/vda 1
    4. 扩展文件系统
      • ext2/3/4:resize2fs /dev/vda1
      • xfs:xfs_growfs /
    5. 验证 df -h
  • 注意
    • 内核版本较旧(如 < 3.6.0)可能需要重启完成分区表更新。
    • 操作前创建快照;某些环境需确保分区工具版本匹配。

五、常见问题与排错

  • 无法卸载分区
    • 使用 fuser -mvki 挂载点或 lsof +d 挂载点定位占用进程并终止后再卸载。
  • 缩小失败提示空间不足
    • 目标大小必须大于已用空间;ext4 缩小前先 e2fsck -f 并 resize2fs 到目标值,再缩小分区。
  • XFS 无法缩小
    • XFS 不支持在线/离线缩小;如需缩小,通常需备份数据、重建分区并格式化后再恢复。
  • 根分区调整
    • 非LVM 的根分区多需在救援模式/LiveCD下操作;LVM 的根 LV 可在线扩容,但缩小需先卸载(救援模式)。
  • 分区顺序导致无法扩容
    • 非LVM 扩容要求未分配空间与目标分区相邻且在后方;否则需备份、删除重建分区。
  • 风险提示
    • 分区与文件系统调整存在数据丢失风险;请先完整备份/快照,在维护窗口操作,并逐项校验结果。

0