首页 » ORACLE 9i-23c, 系统相关 » Troubleshooting Oracle Grid Infrastructure startup fails with Linux Inode full

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 —

打赏

,

对不起,这篇文章暂时关闭评论。