当前位置:首页>Linux>Linux平台Oracle数据库磁盘运维实战手册从磁盘识别到ASM在线扩容,一文打尽日常运维痛点【Oracle数据库分享--0x19】

Linux平台Oracle数据库磁盘运维实战手册从磁盘识别到ASM在线扩容,一文打尽日常运维痛点【Oracle数据库分享--0x19】

  • 2026-10-11 08:14:59
Linux平台Oracle数据库磁盘运维实战手册从磁盘识别到ASM在线扩容,一文打尽日常运维痛点【Oracle数据库分享--0x19】

Linux平台Oracle RAC磁盘运维实战手册

从磁盘识别到ASM在线扩容,一文打尽日常运维痛点

磁盘虽小乾坤大,共享存储系万家Multipath里藏玄机,ASM盘中映晚霞扩容无需惊重启,运维从容笑群侠Linux深处探究竟,DBA从此不白发

各位老铁,大家好。我是Acdante。话说DBA这行干久了,你会发现:百分之八十的问题都跟磁盘打交道。不是存储满了,就是共享盘不认;不是多路径断了,就是ASM磁盘offline。其中存储空间爆满应该是占比最大的,无论是临时归档日志暴增、还是数据暴增、日志问题、亦或者是备份文件问题,磁盘空间、存储空间问题,一直都是运维的重点关注项。扩容,也就成了日常运维必备技能。上周就遇到个案例:客户的生产库凌晨报警,说/u01空间不足85%。当时值班的兄弟一看,卧槽,Oracle_HOME所在的lv只剩2GB了。正常流程是:申请停机窗口→备份→扩展存储→扩容LV→扩展文件系统→验证。这套下来,少说也得半小时到一小时。但客户的生产库怎么可能停机!于是远程接入,三分钟内搞定在线扩容,天亮之前系统恢复正常。怎么做到的?今天这篇文章,我就把压箱底的磁盘运维十八般武艺都抖落出来。

📋 文章目录

    01. Linux扫描磁盘总线原理

    02. 磁盘识别与共享存储识别

    03. Multipath多路径配置完整指南

    04. 不重启扫描新增磁盘

    05. LVM在线扩容(ext4/xfs)

    06. ASM磁盘权限配置(udev)

    07. ASM磁盘在线扩容实战

    08. 日常运维检查清单

    01.Linux扫描磁盘总线原理

    作为一个在生产环境摸爬滚打多年的DBA,我深知理解底层原理的重要性。很多朋友只会敲命令,遇到问题就抓瞎。要想从根本上解决磁盘相关的问题,必须搞懂Linux是如何发现和管理磁盘的。

    1.1 SCSI子系统工作原理

    Linux内核通过SCSI子系统来管理存储设备。SCSI(Small Computer System Interface)是一套用于连接主机与存储设备的接口标准。

    1.2 HBA扫描机制与/sys/class/scsi_host/

    当HBA卡检测到光纤通道(FC)或iSCSI网络上的存储设备时,会通过扫描通道来发现新设备。/sys/class/scsi_host/目录下每个host对应一个HBA卡端口。

    1.3 "echo '- - -' > scan" 三个横杠的含义

    这是个面试常考题,也是生产环境的必备知识。写入scan文件的格式是:"Channel Target Lun"

    参数
    含义
    说明
    第一个"-"
    Channel(通道)
    扫描所有通道
    第二个"-"
    Target(目标)
    扫描所有目标ID
    第三个"-"
    LUN(逻辑单元)
    扫描所有LUN

    💡 原理图解: 扫描机制就是告诉SCSI中间层:"这个通道上有新设备,帮我枚举一下"。用"- - -"表示扫描所有可能的新设备。

    02.磁盘识别与共享存储识别

    搞定了原理部分,接下来进入实战环节。RAC环境中,正确识别磁盘是配置多路径和ASM的第一步。

    2.1 查看磁盘信息的基础命令

    2.2 识别HBA卡和WWN号

    WWN(World Wide Name)是存储设备的全球唯一标识符,相当于网卡的MAC地址。在RAC环境中,必须确保所有节点的HBA能看到相同的WWN。也是FC SAN网络中的“MAC”地址,唯一标识符。传统FC SAN共享存储中的主机启动器就是这个玩意,对应单一唯一主机FC端口。

    2.3 multipath -ll 查看多路径状态

    对于配置了多路径的环境,使用multipath -ll可以直观看到每条路径的状态和聚合后的逻辑设备。

    03.Multipath多路径配置完整指南

    终于到了Multipath配置这个重头戏。这玩意儿配置对了,存储的高可用就成功了一半;配置错了,轻则路径漂移,重则数据丢失。

    3.1 安装multipath-tools

    3.2 /etc/multipath.conf 配置详解

    配置文件分三个部分:defaults(默认配置)、blacklist(黑名单)、multipaths(路径绑定)。

    📄 配置文件:/etc/multipath.conf 完整示例

    3.3 验证Multipath配置

    04.不重启扫描新增磁盘

    这是DBA最常用的技能之一。当存储管理员给你分配了新LUN,必须掌握这个技能。

    4.1 基础扫描方法

    4.2 刷新分区表

    4.3 不重启扩容扫描(核心技能!)

    这个技能是生产环境的必备绝技。当存储管理员扩展了LUN容量,而你又不能重启服务器时,用这个方法让系统识别到新容量。

    ⚠️ 核心原理:不是扫描新设备,而是让现有设备向存储重新查询容量信息。这是"扩容扫描"和"新盘扫描"的本质区别。

    05.LVM在线扩容(ext4/xfs两种格式)

    终于到了最激动人心的章节——LVM在线扩容。这也是生产环境中DBA最常执行的操作之一。

    5.1 ext4在线扩容完整步骤

    ext4文件系统支持在线扩容,无需卸载文件系统!

    5.2 xfs在线扩容完整步骤

    xfs是Oracle 12c+推荐的文件系统。注意:xfs只能扩容,不能缩容!

    5.3 ext4 vs xfs 对比表

    特性
    ext4
    xfs
    最大文件系统大小
    1EB (50TB单文件)
    16EB (8EB单文件)
    在线扩容
    ✅ 支持(resize2fs)
    ✅ 支持(xfs_growfs)
    在线缩容
    ✅ 支持(resize2fs)
    ❌ 不支持
    大文件性能
    良好
    优秀
    Oracle推荐
    ✅ 支持
    ✅ 推荐(12c+)

    5.4 pvresize处理底层存储扩容

    06.ASM磁盘权限配置(udev方式)

    在Oracle RAC环境中,ASM磁盘必须被grid用户正确访问。udev是配置持久化磁盘权限的标准方法。

    6.1 为什么需要udev

    RAC环境中,所有节点必须对ASM磁盘有完全一致的所有权和权限。传统方式存在设备名漂移风险。udev通过WWN绑定设备名,确保即使/dev/sd*变化,权限配置依然正确。

    6.2 识别ASM磁盘WWN

    6.3 创建udev规则文件

    📄 配置文件:/etc/udev/rules.d/99-oracle-asm.rules

    6.4 重载udev规则并验证

    07.ASM磁盘在线扩容实战

    这是Oracle DBA必须掌握的高阶技能。当ASM磁盘组空间不足时,需要在线添加新磁盘或扩展现有磁盘。

    7.1 方案一:LVM+ASM方式

    这种方式适合需要灵活管理磁盘空间的场景。底层用LVM,上层是ASM。

    7.2 方案二:纯RAW磁盘ASM扩容

    这种方式适用于直接使用ASM管理裸设备的场景。

    7.3 ASM磁盘操作黄金命令

    08.日常运维检查清单

    作为DBA,预防胜于治疗。下面这些检查命令,建议加入每日巡检清单。

    8.1 每日检查命令

    #!/bin/bash#========================================# Oracle RAC # Acdante-Zhang# connect to acdante.com#========================================LOGFILE=/tmp/oracle_storage_check_$(date +%Y%m%d).logALERT_EMAIL=dba@example.comecho "========== Oracle RAC 存储巡检 $(date) ==========" | tee -a $LOGFILE# 1. 多路径状态检查echo "[1/6] 检查多路径状态..." | tee -a $LOGFILEmultipath -ll | grep -E "fail|offline|ghost" >> $LOGFILEif [ $? -eq 0 ]; then    echo "⚠️ 警告: 发现异常路径!" | tee -a $LOGFILEelse    echo "✓ 多路径状态正常" | tee -a $LOGFILEfi# 2. ASM磁盘空间检查echo "[2/6] 检查ASM磁盘空间..." | tee -a $LOGFILEsqlplus -s / as sysasm <> $LOGFILESET LINESIZE 200SET PAGESIZE 100SELECT name, total_mb/1024 AS total_gb, free_mb/1024 AS free_gb,       ROUND((total_mb-free_mb)/total_mb*100, 2) AS pct_usedFROM v\$asm_diskgroup;EOF# 3. 文件系统空间检查echo "[3/6] 检查文件系统空间..." | tee -a $LOGFILEdf -h | awk '$5 > 80 {print "⚠️ 警告: "$1" 使用率"$5}' >> $LOGFILE# 4. ASM磁盘状态检查echo "[4/6] 检查ASM磁盘状态..." | tee -a $LOGFILEsqlplus -s / as sysasm <> $LOGFILESELECT disk_number, name, mode_status, stateFROM v\$asm_disk WHERE mode_status != 'ONLINE';EOF# 5. CRS状态检查echo "[5/6] 检查CRS状态..." | tee -a $LOGFILE$GRID_HOME/bin/crsctl check crs >> $LOGFILE 2>&1# 6. LVM状态检查echo "[6/6] 检查LVM状态..." | tee -a $LOGFILEvgs -o vg_name,pfree,lv_name | grep -v "100.00" >> $LOGFILEecho "========== 巡检完成 ==========" | tee -a $LOGFILE# 发送告警邮件(如果有问题)if grep -q "⚠️" $LOGFILE; then    mail -s "[警告] Oracle RAC存储巡检异常" $ALERT_EMAIL < $LOGFILEfi

    8.2 故障排查路径

    故障现象
    可能原因
    解决思路
    磁盘不识别
    HBA未连接/LUN未映射
    检查FC连接、存储 zoning
    multipath失败
    配置错误/LUN掩码
    检查multipath.conf/LUN掩码设置
    ASM磁盘offline
    权限问题/磁盘头损坏
    检查udev权限/kfed修复
    IO卡顿/超时
    路径丢包/存储过载
    调大dev_loss_tmo/联系存储
    磁盘运维非小事,防微杜渐是根本扫描扩容虽小技,关键时刻救乾坤ASM盘中藏数据,LVM层里见真金愿君熟读此手册,运维路上少烦心

    好了,各位老铁,这篇文章就到这里。总结一下今天的内容:1. 扫描原理:理解了"- - -"的含义,就掌握了磁盘扫描的精髓2. 多路径配置:multipath.conf三段式配置,配合WWN绑定告别设备漂移3. 在线扩容:echo 1 > rescan,让存储感知变化;lvextend+resize2fs/xfs_growfs,让文件系统跟上4. ASM扩容:SQL语句在线添加磁盘,REBALANCE完成数据重分布纸上得来终觉浅,绝知此事要躬行。建议大家有空在测试环境多练练,把这些命令变成肌肉记忆。有任何问题,欢迎在评论区留言,我们一起探讨。我是Acdante,我们下期再见!👋

    📌 作者:Acdante💼 小白 Oracle DBA,专注数据库架构与运维📧 微信公众号:Acdante

    🔗 本文参考:Oracle官方文档 - Oracle Automatic Storage ManagementRed Hat官方文档 - LVM Administration GuideRed Hat官方文档 - Device Mapper Multipath

    Acdante历史文章合集链接:

    Oracle生产级别备份脚本分享——逻辑备份和物理备份(expdp&RMAN)【Oracle数据库分享--0x01】

    Oracle数据加密技术演进与实践指南从10g到26ai的安全之道【Oracle数据库分享--0x02】

    Oracle数据库表空间与数据文件实战指南【Oracle数据库分享--0x03】

    Oracle ADG单机部署实战指南【Oracle数据库分享--0x04】

    Oracle DataGuard搭建信息收集清单和ADG自动化部署脚本(单机版本)免费开放【Oracle数据库分享--0x05】

    Oracle表空间使用率自动检测与智能扩容实战——Shell脚本监控告警及自动扩展数据文件与ASM磁盘组管理基础知识【Oracle数据库分享--0x06】

    Oracle数据库监听机制深度解析-Listener解密【Oracle数据库分享--0x07】
    Oracle19c-最新补丁19.30别着急更新有BUG已被抛弃-最新19.31已发布【Oracle技术分享-0x08】
    Oracle数据库等级保护(三级)安全配置实战指南-用户密码策略、审计和Linux系统账户安全配置实战操作【Oracle数据库分享--0x09
    Oracle数据快速恢复与还原实战指南:闪回功能与expdp逻辑备份【Oracle数据库分享--0x10】
    Oracle数据库日志体系-诊断和排查问题第一步-找到故障表现以及如何联动排查实战从11g-26ai【Oracle数据库分享--0x11】
    Oracle数据库节前巡检脚本分享——基础Shell巡检实践&自动化DB巡检系统分享【Oracle数据库分享--0x12】
    Oracle ADG故障处理指南ORA-01111:数据文件名未知的紧急恢复实战【Oracle数据库分享--0x13】
    Oracle RAC 三节点集群在线替换 ASM 磁盘组底层存储实战【Oracle数据库分享--0x14】
    Oracle容灾平台引发的思考-Acdante四层云原生容灾平台架构构思【架构构思分享--0x1】

    Oracle 26ai数据库架构体系结构与新特性浅显分享【Oracle数据库分享--0x15】

    Oracle 8i 迁移到11g-exp/imp 实战记录引发的六大数据库迁移方式深度对比分享【Oracle数据库分享--0x16】
    RAC性能分析 —— gc buffer busy acquire 等待事件深度解析【Oracle数据库分享--0x17】
    Oracle数据库+RHCS双机热备高可用架构和实施方案技术分享【Oracle数据库分享--0x18】

    最新文章

    随机文章