Troubleshooting Oracle Grid Infrastructure startup fails with Linux Inode full
最近一个客户一套较老的ORACLE RAC集群长时间无人看管,由于Oracle Grid Infrastructure(GI)的$ORACLE_HOME所在文件系统的inode耗尽,导致了gipcd无法启动,并且最终导致两个节点崩溃。 GI alert log提示gipcd无法启动,但实际是因为GI的$ORACLE_HOME所在文件系统inode耗尽,简单记录一下。
启动失败
# crsctl start crs CRS-4640: Oracle High Availability Services is already active CRS-4000: Command Start failed, or completed with errors.
GI alert log
[//bin/oraagent.bin(9020)]CRS-5818:Aborted command 'start for resource: ora.gipcd 1 1' for resource 'ora.gipcd'. Details at (:CRSAGF00113:) in //log//agent/ohasd/oraagent_/oraagent_.log.
Agent log
显示无法open /var/tmp/.oracle/oxxxxx 文件。
No space left on device (28) open(lock) failed to open (/var/tmp/.oracle/sOCSSD_LL_xxx_lock) gipcmodmux.c: 1281 exception [ ret gipcretFail(1) ]
开始尝试kill gipc进程,但重启还是会失败,/var/tmp/.oracle下是一些进程通信的lock或socket文件,尝试move /var/tmp/.oracle目录, 结果提示 No space left on device 。 使用df 查看文件系统使用率正常, -i查看inode发现inode 100%耗尽。
如果查看ocssd.log也能发现一些明显报错,MOS 1618078.1有记录。
2013-11-18 18:42:51.845: [ GPnP][1610219264]clsgpnp_Init: [at clsgpnp0.c:404] gpnp tracelevel 3, component tracelevel 0
2013-11-18 18:42:51.845: [ GPnP][1610219264]clsgpnp_Init: [at clsgpnp0.c:534] '/' in effect as GPnP home base.
2013-11-18 18:42:52.153: [GIPCCLSA][1143445824]gipcmodClsaCompleteAccept: failed on clsaauthstart ret clsaretOSD (8), endp 0xeeb2fd0 [000000000000002f] { gipcEndpoint : localAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OCSSD_LL__)(GIPCID=8cfc5f6b-e6969d1e-15138))', remoteAddr 'clsc://(ADDRESS=(PROTOCOL=ipc)(KEY=OCSSD_LL_node12_)(GIPCID=e6969d1e-8cfc5f6b-15082))', numPend 5, numReady 0, numDone 0, numDead 0, numTransfer 0, objFlags 0x3aea, pidPeer 0, flags 0x603710, usrFlags 0x14000 }
2013-11-18 18:42:52.154: [GIPCCLSA][1143445824]gipcmodClsaCompleteAccept: slos op : mkdir
2013-11-18 18:42:52.154: [GIPCCLSA][1143445824]gipcmodClsaCompleteAccept: slos dep : No space left on device (28)
2013-11-18 18:42:52.154: [GIPCCLSA][1143445824]gipcmodClsaCompleteAccept: slos loc : authprep6
2013-11-18 18:42:52.154: [GIPCCLSA][1143445824]gipcmodClsaCompleteAccept: slos info: failed to make dir //auth/css//A2433576
什么是Inode?
Linux 中的 Inode(index node) 是描述文件系统中的文件和目录的唯一标识符。是一种数据结构,用于跟踪基于 Linux 或 UNIX 的文件系统中的所有文件和目录。因此,文件系统中的每个文件和目录都被分配了一个 inode,该 inode 由一个称为“inode number”的整数标识。这些唯一标识符存储有关每个文件和目录的元数据。同一文件系统中的所有 inode 都是唯一的。
Inode索引节点存储元数据,例如:
文件类型
文件大小
所有者 ID
组 ID
读取、写入和执行权限
上次访问时间
上次更改时间
上次修改时间
系统中 inode 的理论总数约为 43 亿个。但您应该关心的数字是系统中的 inode 数量。每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。索引节点的一般比率是系统容量的 1:16 KB。您可以使用带有选项的命令检查文件系统中的 inode 数量。df-i文件系统中的索引节点总数是在创建文件系统时定义的,不能动态更改。因此,定期检查 inode 使用情况以确保其调整到配置的限制非常重要。
如果您在尝试在服务器上创建新文件时收到以下错误消息(即使您知道仍有大量可用空间),则您可能已达到系统的 inode 限制:
No space left on device。
查看inode
$ stat /var/log/lastlog $ ls -i /var/log/lastlog $ ls -idl /var/log
统计INODE高的目录
# find /var/log | wc -l # find /usr -xdev -type d -print | xargs -n1 du --inodes -sS | sort -rn | head -10 # find / -xdev -type d -exec sh -c ' echo "$(find "$0" | grep "^$0/[^/]*$" | wc -l) $0"' {} \; | sort -rn | head -50 $ du --inodes --separate-dirs | sort -rh | sed -n \ '1,50{/^.\{71\}/s/^\(.\{30\}\).*\(.\{37\}\)$/\1...\2/;p}' $ { find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -rn|head ; }
对于DB环境通常是清理diag trace或audit trace, 另外还有/var/spool/postfix/maildrop 也是常常因为crontab产生大量小文件导致inode耗尽,本案例就是它的原因,清理后降到4%,启动CRS正常。
–over —
对不起,这篇文章暂时关闭评论。