ASM磁盘容量改变的故障处理
来源:互联网 发布:域名哪里买 编辑:程序博客网 时间:2024/05/21 16:56
某个数据库环境中的ASM磁盘,由于历史原因,全部配置为没有RAID信息的JBOD模式。今天在做产品升级,由于软件需要,需要将原来加入到ASM中每个JBOD的磁盘配置为RAID0。配置过程采用了rolling up的方式,每次对一个diskgroup中的一个failgroup的磁盘配置RAID。 大体步骤为,以磁盘组ssddg的failgroup1为例:
1、在ASM中操作,将failgroup1的磁盘全部offline;
2、在OS层将这些磁盘卸载;
3、配置failgroup1的磁盘为raid0;
4、在OS层将这些磁盘加载;
5、在ASM中操作,将failgroup1的磁盘全部online。
有自信去做这件事是考虑到磁盘的数据不会受到影响,但是没有考虑到元数据。于是遇到下面的问题:
所有节点通过存储软件正常加载上来已经做成RAID0的磁盘。然而在asm磁盘组中要把这些盘online上来时报了下面这个错误:
初步一看,以为是自己操作的疏漏,共享磁盘在另一个RAC节点没有加载,才会报“磁盘不是集群范围可见”的错误;但检查了/dev下的路径以及通过dd命令确认可读写以后,可以确认这些盘都正常加载了,在OS层是集群可见的。
下一步,只能去asm的alert日志看看是否有更具体的报错信息。在alert日志的最后部分能看到上图中的报错。这个信息暂时不足以分析问题。向前追溯日志一直到最开始的错误信息,可以看到,在online磁盘的操作发起以后,对应每个磁盘都有如下报错:
报错的字面意思很明白:磁盘头元信息记录的磁盘大小(763097M)要大于磁盘的实际大小(762496M)。紧跟着是如下信息:
NOTE: sending set offline flag message 2479816269 to 1 disk(s) in group 4
WARNING: Disk SSDDG_0000 in mode 0x11 is now being offlined
WARNING: Disk SSDDG_0000 in mode 0x11 is now being offlined
到这里,可以推出由于ASM元信息记录的磁盘size超过了实际的size,磁盘在online时自检失败,online动作立刻终止。而后面的ORA-15282报错,只是假象。
下面我想先把这个warning排除,来验证我的推测。
在mos上没有搜到该案例,只能用掌握的那点元数据的知识解决了。首先用kfed把盘头的元数据读取出来,重定向到文本。搜索
763097这个数字,找到了下面这行:
从条目的名称kfdhdb.dsksize也可以看出这个条目记录的是磁盘的大小。在创建ASM磁盘组时,会把盘的大小更新到这个条目,如果没有指定size子句,一般都是磁盘(或者分区)的真实大小。操作系统识别到的磁盘大小可以用fdisk查看到,结果显示两者确实如报错所说,大小有差异。产生差异的原因大家都应该猜到了,对盘做了RAID配置之后,可用大小发生了变化(可能是因为RAID信息占据了更多的磁盘大小,这块谁可以解释比较清楚欢迎提出)。
下面要解决ASM元信息与实际情况不一致的问题。考虑到ASM中可以通过resize命令改变ASM磁盘的可用大小,该操作包括两个方面:更新ASM元信息(disk header和at表等等)和rebalance磁盘组的数据。但是这个操作前提是磁盘需要是online状态。现在出问题这些磁盘online都会报错,因此需要非常规手段先让online这一步成功:
首先用kfed read命令将磁盘头数据重定向到文本文件中,然后vi编辑本,将dsksize的值修改成762496,最后将改过的文本kfed merge到原磁盘。
做这个操作时我有几点考虑:
1、asm磁盘头的元信息在1号au的倒数第二个块有备份,如果修改元数据发生意外,可以用kfed repair修复;
2、导出的元数据的文本,也可以作为一个备份。
3、先对其中一块磁盘做修改,试试效果。
对其中一块ASM磁盘完成以上操作之后,在ASM中做online该单块磁盘的动作就成功了。有了这个验证之后,再将所有的ssddg磁盘的dsksize都改掉并在ASM中online起来。
用asmcmd命令行的lsdsk命令去看盘的大小时,发现确实是修改后的762496M。
之后在mos搜到了另外一个报错,有相同的解决方法,见(doc id 1077175.1) ASM disk group mount fails with ORA15036: disk <name> is truncated。
有兴趣的同学可以参考《解密Oracle ASM 内核》这本书中的ASM元信息AT表,stride等相关知识,去验证:resize这一步除了更新磁盘头部记录的磁盘可用大小以外,还会更新at表最后一个块记录的可用au的信息等等元数据;而且resize动作发起之后,asm会对现有数据做rebalance。而手工使用kfed修改,只会改变磁盘头部记录的磁盘可用大小。
- ASM磁盘容量改变的故障处理
- ASM DISK 磁盘容量对应的视图及字段说明
- 【ASM】查看ASM磁盘组剩余容量和总容量
- ASM正常冗余下模拟磁盘故障的恢复
- ASM磁盘(asm_disk),故障组(failgroup),磁盘组(diskgroup)之间的关联分析
- 磁盘容量的计算
- 磁盘容量的计算
- RAC环境创建表空间,ASM磁盘组缺少”+“号引发的故障
- 磁盘控制器故障导致服务器无法读写的处理方法
- 磁盘与目录的容量
- oracle ASM实例ORA-04031故障处理
- ASM的磁盘创建过程
- ASM 磁盘、目录的管理
- ASM 磁盘、目录的管理
- ASM 磁盘、目录的管理
- ASM 磁盘、目录的管理
- ASM 磁盘、目录的管理
- Device ‘xx' is already labeled for ASM disk 的故障处理
- 操作系统:生产者消费者问题
- 以太坊智能合约编程之菜鸟教程
- 实践,理论与层次
- Material Design--新闻浏览APP
- 垃圾回收算法
- ASM磁盘容量改变的故障处理
- MFC隐藏进程自身(任务管理器不可见,wSysCheck等工具可见)
- Google Android开发者文档系列-创建有内容分享特性的应用之添加一个简单的共享action
- dbwr调优
- android开发心得四
- 如何用source Insight查看.s文件
- MySQL管理常用命令
- 代理服务器与反向代理服务器的区别
- 归档爆满处理