当前位置:首页>Linux>Linux & Oracle 磁盘扩容缩容技术手册

Linux & Oracle 磁盘扩容缩容技术手册

  • 2026-10-06 05:26:00
Linux & Oracle 磁盘扩容缩容技术手册

一、Linux 磁盘扩容

1.1 扩容场景分类

┌─────────────────────────────────────────────────────────────────┐│                    Linux 磁盘扩容类型                            │├─────────────────────────────────────────────────────────────────┤│  ┌──────────────────┐    ┌──────────────────┐                  ││  │   方案 A: 云盘扩容  │  │  方案 B: 新增磁盘  │                  ││  │   (推荐)         │    │                  │                  ││  │  1. 控制台扩容    │    │  1. 创建新云盘    │                  ││  │  2. 扩展分区      │    │  2. 挂载到实例    │                  ││  │  3. 扩展文件系统   │    │  3. 格式化使用    │                  ││  │                   │    │                  │                 ││  │  ✅ 在线操作      │    │  ✅ 风险较低      │                 ││  └──────────────────┘    └──────────────────┘                  ││                                                                ││  ┌────────────────────┐    ┌──────────────────┐                ││  │   方案 C: LVM 扩容  │    │  方案 D: 新盘迁移  │                ││  │                    │    │                  │                 ││  │  1. 扩展 VG        │    │  1. 创建新盘       │                ││  │  2. 扩展 LV        │    │  2. 数据迁移       │                ││  │  3. 扩展文件系统    │    │  3. 切换挂载点     │                ││  │                    │    │                  │                 ││  │  ✅ 灵活管理       │    │  ✅ 最安全        │                 ││  └────────────────────┘    └──────────────────┘                 │└─────────────────────────────────────────────────────────────────┘



1.2 方案 A:云盘在线扩容(推荐)

1.2.1 操作流程图

┌─────────────────────────────────────────────────────────────────┐│              云盘在线扩容完整流程                                 │├─────────────────────────────────────────────────────────────────┤│  ① 云平台操作 → 控制台/CLI 扩容云磁盘                              ││       ↓                                                         ││  ② 操作系统识别 → 扫描 SCSI 总线变化                               ││       ↓                                                         ││  ③ 分区扩容 → growpart 或 fdisk                                  ││       ↓                                                         ││  ④ 文件系统扩容 → xfs_growfs 或 resize2fs                         ││       ↓                                                         ││  ⑤ 验证完成 → df -h 确认                                         │└─────────────────────────────────────────────────────────────────┘

1.2.2 详细操作步骤

步骤 1:云平台扩容

# 华为云 CLI 扩容云硬盘hcloud ecs disk resize --disk-id <disk-id> --size 100# 或 AWS CLIaws ec2 modify-volume --volume-id vol-xxxxx --size 100
步骤 2:操作系统识别新容量
# 查看当前磁盘信息lsblkfdisk -l# 扫描 SCSI 总线(无需重启)echo 1 > /sys/class/scsi_device/*/device/rescan# 或使用 rescan-scsi-bus.sh/usr/bin/rescan-scsi-bus.sh# 再次查看,应显示新容量lsblk
步骤 3:扩展分区
# 方法一:使用 growpart(推荐,支持在线)# 安装 growpartyum install -y cloud-utils-growpart    # CentOS/RHELapt-get install -y cloud-guest-utils  # Ubuntu/Debian# 扩展第 1 个分区growpart /dev/vda 1# 验证分区变化fdisk -l /dev/vda
步骤 4:扩展文件系统
# 首先确认文件系统类型df -T# 情况 A:XFS 文件系统(CentOS 7+ 默认)xfs_growfs /# 情况 B:EXT4 文件系统resize2fs /dev/vda1# 验证扩容结果df -h



1.3 方案 C:LVM 逻辑卷扩容

1.3.1 LVM 架构示意

┌─────────────────────────────────────────────────────────────────┐│                      LVM 层次结构                                │├─────────────────────────────────────────────────────────────────┤│  物理层                                                          ││  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              ││  │  /dev/sda   │  │  /dev/sdb   │  │  /dev/sdc   │              ││  │  物理卷 PV   │  │  物理卷 PV   │  │  物理卷 PV   │             ││  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘              ││         └────────────────┼────────────────┘                     ││                          ▼                                      ││  卷组层              ┌─────────────────┐                         ││                      │    卷组 VG       │                        ││                      │   vg_system      │                       ││                      └────────┬────────┘                        ││                               │                                 ││                               ▼                                 ││  逻辑卷层         ┌─────────────────┐  ┌─────────────────┐       ││                  │   逻辑卷 LV      │  │   逻辑卷 LV     │       ││                  │    lv_root      │  │    lv_home      │       ││                  └────────┬────────┘  └────────┬────────┘       ││                           │                    │                ││                           ▼                    ▼                ││  文件系统层         ┌─────────────┐       ┌─────────────┐        ││                    │     /       │      │   /home     │         ││                    └─────────────┘      └─────────────┘         │└─────────────────────────────────────────────────────────────────┘

1.3.2 LVM 扩容操作

# 1. 查看当前 LVM 状态pvs          # 物理卷vgs          # 卷组lvs          # 逻辑卷# 2. 添加新物理卷(假设新盘 /dev/sdb)pvcreate /dev/sdb# 3. 扩展卷组vgextend vg_system /dev/sdb# 4. 查看卷组可用空间vgdisplay vg_system | grep -i "free"# 5. 扩展逻辑卷lvextend -L +50G /dev/vg_system/lv_root# 或扩展到卷组所有可用空间lvextend -l +100%FREE /dev/vg_system/lv_root# 6. 扩展文件系统# XFSxfs_growfs /# EXT4resize2fs /dev/vg_system/lv_root# 7. 验证df -hlvs



二、Linux 磁盘缩容

2.1 缩容风险提示

┌─────────────────────────────────────────────────────────────────┐│  ⚠️  ⚠️  ⚠️  高风险操作警告  ⚠️  ⚠️  ⚠️                        │├─────────────────────────────────────────────────────────────────┤│  缩容操作存在数据丢失风险!                                        ││                                                                 ││  必须遵守的原则:                                                 ││  1. ✅ 操作前完整备份数据                                         ││  2. ✅ 在测试环境验证操作流程                                     ││  3. ✅ 选择业务低峰期执行                                         ││  4. ✅ 确保有足够的可用空间                                       ││  5. ✅ XFS 文件系统不支持缩容!如需缩容必须重建                     │└─────────────────────────────────────────────────────────────────┘

2.2 EXT4 文件系统缩容

2.2.1 缩容操作流程

# 场景:将 100G EXT4 分区缩小到 50G# 1. 备份数据(必须!)rsync -avz /data /backup/data_backup_$(date +%Y%m%d)# 2. 卸载文件系统umount /data# 3. 文件系统检查(必须卸载状态)e2fsck -f /dev/vdb1# 4. 缩小文件系统(先缩小文件系统,再缩小分区)resize2fs /dev/vdb1 45G# 5. 缩小分区(使用 fdisk)fdisk /dev/vdb# 命令序列:d(删除) → n(新建) → p(主) → 1(分区号) → 起始扇区(同原) → +45G → w(写入)# 6. 刷新分区表partprobe /dev/vdb# 7. 重新挂载mount /dev/vdb1 /data# 8. 验证df -hlsblk



2.3 LVM 逻辑卷缩容

# 场景:将 LVM 逻辑卷从 100G 缩小到 50G# 1. 查看当前状态lvdisplay /dev/vg_system/lv_datadf -h /data# 2. 备份数据rsync -avz /data /backup/lv_data_backup# 3. 卸载umount /data# 4. 文件系统检查e2fsck -f /dev/vg_system/lv_data# 5. 缩小文件系统(先 FS,后 LV!顺序不能错!)resize2fs /dev/vg_system/lv_data 45G# 6. 缩小逻辑卷lvreduce -L 45G /dev/vg_system/lv_data# 确认提示时输入 y# 7. 再次检查文件系统e2fsck -f /dev/vg_system/lv_data# 8. 重新挂载mount /dev/vg_system/lv_data /data# 9. 验证lvdisplay /dev/vg_system/lv_datadf -h /data



三、Oracle 数据库磁盘扩容

3.1 Oracle 存储架构

┌─────────────────────────────────────────────────────────────────┐│                  Oracle 存储架构层次                             │├─────────────────────────────────────────────────────────────────┤│  数据库层                                                        ││  ┌─────────────────────────────────────────────────────────┐   ││  │                    表空间 (Tablespace)                   │   ││  │  SYSTEM  │  USERS  │  UNDOTBS1  │  TEMP  │  SYSAUX      │   ││  └─────────┴─────────┴────────────┴────────┴───────────────┘   ││                           │                                     ││                           ▼                                     ││  数据文件层                                                      ││  ┌───────────┐  ┌───────────┐  ┌───────────┐                  ││  │system01.dbf│  │users01.dbf│  │undotbs01.dbf│                ││  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘                  ││        │              │              │                         ││        ▼              ▼              ▼                         ││  操作系统层                                                     ││  ┌─────────────────────────────────────────────────────────┐   ││  │         文件系统 / ASM 磁盘组                             │   ││  │  /u01/app/oracle/oradata/ORCL/                          │   ││  └─────────────────────────────────────────────────────────┘   │└─────────────────────────────────────────────────────────────────┘

3.2 方案 A:向表空间添加数据文件

-- 1. 查看表空间使用情况SELECT     tablespace_name,    SUM(bytes)/1024/1024 AS "Size(MB)",    SUM(maxbytes)/1024/1024 AS "MaxSize(MB)"FROM dba_data_filesGROUP BY tablespace_name;-- 2. 查看表空间数据文件SELECT     file_name,    tablespace_name,    bytes/1024/1024 AS "Size(MB)",    autoextensibleFROM dba_data_filesWHERE tablespace_name = 'USERS';-- 3. 添加新数据文件ALTER TABLESPACE USERS ADD DATAFILE     '/u01/app/oracle/oradata/ORCL/users02.dbf'    SIZE 1G    AUTOEXTEND ON    NEXT 100M    MAXSIZE 10G;-- 4. 验证SELECT file_name, tablespace_name, bytes/1024/1024 AS "Size(MB)"FROM dba_data_filesWHERE tablespace_name = 'USERS';



3.3 方案 B:扩展现有数据文件

-- 方法 1:手动指定新大小ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf'     RESIZE 2G;-- 方法 2:启用自动扩展ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf'    AUTOEXTEND ON    NEXT 100M    MAXSIZE 10G;-- 方法 3:修改现有自动扩展设置ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/users01.dbf'    AUTOEXTEND ON    NEXT 200M    MAXSIZE UNLIMITED;-- 验证SELECT file_name, bytes/1024/1024 AS "Current(MB)",        maxbytes/1024/1024 AS "Max(MB)", autoextensibleFROM dba_data_files;



3.4 方案 C:ASM 磁盘组扩容

-- 1. 查看磁盘组状态SELECT name, state, total_mb, free_mb, (free_mb/total_mb)*100 AS "Free%"FROM v$asm_diskgroup;-- 2. 查看磁盘组成员SELECT group_number, disk_number, name, path, total_mb, free_mbFROM v$asm_disk;-- 3. 添加新磁盘到磁盘组ALTER DISKGROUP DATA ADD DISK '/dev/sdh1';-- 4. 监控再平衡进度SELECT operation, state, power, actual_power, sofar, est_minutesFROM v$asm_operation;-- 5. 验证SELECT name, total_mb, free_mb FROM v$asm_diskgroup;



四、Oracle 数据库磁盘缩容

4.1 缩容方案对比

方案适用场景风险停机时间
删除数据文件表空间有多个文件中短
重建表空间单个大文件高长
数据泵导出导入跨平台/版本低长

4.2 删除数据文件

-- 前提:表空间有多个数据文件,且目标文件为空或数据已迁移-- 1. 查看表空间文件分布SELECT file_name, bytes/1024/1024 AS "Size(MB)", tablespace_nameFROM dba_data_filesWHERE tablespace_name = 'USERS';-- 2. 查看文件使用情况SELECT file_id, tablespace_name, bytes/1024/1024 AS "Used(MB)"FROM dba_extentsWHERE file_id = <目标文件 ID>;-- 3. 迁移数据(如果有)ALTER TABLE table_name MOVE TABLESPACE users_temp;-- 4. 删除数据文件ALTER TABLESPACE USERS DROP DATAFILE '/u01/app/oracle/oradata/ORCL/users02.dbf';-- 5. 操作系统层面删除文件-- !rm /u01/app/oracle/oradata/ORCL/users02.dbf



4.3 重建表空间缩容

-- 1. 创建临时表空间CREATE TABLESPACE users_temp DATAFILE     '/u01/app/oracle/oradata/ORCL/users_temp01.dbf'     SIZE 500M AUTOEXTEND ON;-- 2. 迁移对象ALTER TABLE table_name MOVE TABLESPACE users_temp;ALTER INDEX index_name REBUILD TABLESPACE users_temp;-- 3. 删除原表空间DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;-- 4. 重建表空间(缩小后)CREATE TABLESPACE USERS DATAFILE     '/u01/app/oracle/oradata/ORCL/users01.dbf'     SIZE 500M AUTOEXTEND ON;-- 5. 迁移回对象ALTER TABLE table_name MOVE TABLESPACE USERS;ALTER INDEX index_name REBUILD TABLESPACE USERS;-- 6. 删除临时表空间DROP TABLESPACE users_temp INCLUDING CONTENTS AND DATAFILES;



五、故障排查与常见问题

5.1 Linux 磁盘扩容问题

问题原因解决方案
growpart 失败分区表损坏使用 fdisk 手动调整
xfs_growfs 失败非 XFS 文件系统确认文件系统类型
扩容后容量未变未刷新分区表partprobe 或重启
LVM 无法扩展VG 空间不足添加新 PV 或清理

5.2 Oracle 扩容问题

问题原因解决方案
ORA-01114文件被占用检查进程,必要时重启
ORA-01653无法扩展段检查表空间配额
ASM 再平衡慢磁盘 IO 瓶颈调整 ASM_POWER_LIMIT
空间未释放段未回收执行 SHRINK SPACE

5.3 排查命令速查

# Linux 磁盘状态lsblkdf -hfdisk -l# LVM 状态pvs; vgs; lvs# 文件系统状态xfs_info /dumpe2fs -h /dev/sda1# Oracle 表空间SELECT tablespace_name, SUM(bytes)/1024/1024 AS MB FROM dba_data_files GROUP BY tablespace_name;# Oracle 数据文件SELECT file_name, bytes/1024/1024 AS MB, autoextensible FROM dba_data_files;



六、最佳实践与注意事项

6.1 扩容最佳实践

┌─────────────────────────────────────────────────────────────────┐│                      扩容操作检查清单                             │├─────────────────────────────────────────────────────────────────┤│  □ 1. 操作前完整备份数据                                          ││  □ 2. 在测试环境验证操作流程                                       ││  □ 3. 选择业务低峰期执行                                          ││  □ 4. 通知相关干系人                                              ││  □ 5. 准备回滚方案                                               ││  □ 6. 执行后验证服务和数据                                        ││  □ 7. 更新文档和监控阈值                                          │└─────────────────────────────────────────────────────────────────┘

6.2 监控建议

# 磁盘使用率告警阈值WARNING:  >70%CRITICAL: >85%EMERGENCY: >95%# 配置监控脚本cat > /etc/cron.hourly/disk_check.sh << 'EOF'#!/bin/bashTHRESHOLD=85USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')if [ $USAGE -gt $THRESHOLD ]; then    echo "磁盘使用率告警:${USAGE}%" | mail -s "Disk Alert" admin@example.comfiEOFchmod +x /etc/cron.hourly/disk_check.sh

6.3 文档记录

每次扩容/缩容操作后,更新以下信息:

  • 操作时间和人员

  • 变更前容量

  • 变更后容量

  • 操作步骤摘要

  • 遇到的问题及解决

  • 验证结果

最新文章

随机文章