Linux 系统告警报“ inode”空间不足引起数据库启动失败

2023-10-29

启动数据库报错,错误如下:

SQL> startup nomount pfile=’/oracle/admin/ecis/ecis.ora1’;
ORA-27154: post/wait create failed
ORA-27300: OS system dependent operation:semget failed with status: 28
ORA-27301: OS failure message: No space left on device
ORA-27302: failure occurred at: sskgpsemsper
看如上报错空间不足,但是查看分区磁盘空间都充裕,为啥报这个错误呢?
查看系统日志发现如下信息:
告警信息:

DISK CRITICAL - free space : /backup/script 5773 MB (28% inode=99%);/u01/app/oracle/oradata 171485 MB (20% inode=99%);/u01/app/oracle/archivelog 12059 MB (7% inode=99%);

以上告警可知,inode空间不足,这类告警出现的频率相对是比较少的,想要彻底解决此类告警,就不得不说一下有关存储的相关知识了。
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
而系统会把真是的数据和文件属性(rwx,group,uid…..),存放到不通的块,权限等属性存放到不同的inode中,实际数据会存放到data block中,另外还有一个超级块superblock会记录文件系统的基本信息,如inode,block总量使用量以及剩余量等。
inode 中除了记录文件属性外,还记录了文件所在的block号,一个文件占一个inode,因此 我们知道的是,如果得到inode就很轻松知道对应的文件的block,也就能找到data block了。
inode包含文件的元信息,具体来说有以下内容:

 * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

[root@pcrdb01 ~]# stat install.log
  File: `install.log'
  Size: 50712           Blocks: 112        IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 652802      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-06-06 19:59:43.111889181 +0800
Modify: 2018-05-09 14:34:04.278999817 +0800
Change: 2018-05-09 14:34:13.545999813 +0800

三、inode的大小

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。

[root@pcrdb01 ~]# df -ih
Filesystem                   Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root   1.7M  147K  1.6M    9% /
tmpfs                          732K     5  732K    1% /dev/shm
/dev/mapper/datavg-datalv      1.9M    26  1.9M    1% /crbank/crdb/data
/dev/mapper/fravg-fralv        960K    87  960K    1% /crbank/crdb/fra
/dev/sda1                      126K    39  125K    1% /boot
/dev/sr0                          0     0     0     - /media/RHEL_6.5 x86_64 Disc 1
/dev/sr0                          0     0     0     - /mnt

查看每个inode节点的大小,可以用如下命令:

[root@pcrdb01 ~]# dumpe2fs -h /dev/sda1 |grep "Inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size:               128

由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

四、inode号码

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

使用ls -i命令,可以看到文件名对应的inode号码:

[root@pcrdb01 ~]# ls -li
total 104
653298 -rw-------. 1 root root  1534 May  9 14:34 anaconda-ks.cfg
653329 drwxr-xr-x. 2 root root  4096 May  9 14:58 Desktop
653333 drwxr-xr-x. 2 root root  4096 May  9 14:58 Documents
653330 drwxr-xr-x. 2 root root  4096 May  9 14:58 Downloads
652802 -rw-r--r--. 1 root root 50712 May  9 14:34 install.log
652803 -rw-r--r--. 1 root root 10033 May  9 14:31 install.log.syslog
653334 drwxr-xr-x. 2 root root  4096 May  9 14:58 Music
653335 drwxr-xr-x. 2 root root  4096 May  9 14:58 Pictures
653332 drwxr-xr-x. 2 root root  4096 May  9 14:58 Public
653331 drwxr-xr-x. 2 root root  4096 May  9 14:58 Templates
653336 drwxr-xr-x. 2 root root  4096 May  9 14:58 Videos

五、目录文件

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

ls -li命令只列出目录文件中的所有文件名及inode信息:

[root@pcrdb01 ~]# ls -li /root/
total 104
653298 -rw-------. 1 root root  1534 May  9 14:34 anaconda-ks.cfg
653329 drwxr-xr-x. 2 root root  4096 May  9 14:58 Desktop
653333 drwxr-xr-x. 2 root root  4096 May  9 14:58 Documents
653330 drwxr-xr-x. 2 root root  4096 May  9 14:58 Downloads
652802 -rw-r--r--. 1 root root 50712 May  9 14:34 install.log
652803 -rw-r--r--. 1 root root 10033 May  9 14:31 install.log.syslog
653334 drwxr-xr-x. 2 root root  4096 May  9 14:58 Music
653335 drwxr-xr-x. 2 root root  4096 May  9 14:58 Pictures
653332 drwxr-xr-x. 2 root root  4096 May  9 14:58 Public
653331 drwxr-xr-x. 2 root root  4096 May  9 14:58 Templates
653336 drwxr-xr-x. 2 root root  4096 May  9 14:58 Videos

需要强调一点:
由于目录文件内只有文件名和inode号码,所以如果只有读权限,只能获取文件名,无法获取其他信息,因为其他信息都储存在inode节点中,而读取inode节点内的信息需要目录文件的执行权限(x)

六、硬链接

一般情况下,文件名和inode号码是”一一对应”关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为”硬链接”(hard link)。
 ln 源文件 目标文件
运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文件名总数,这时就会增加1。

反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的”链接数”。创建目录时,默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录)。

七、软链接

除了硬链接以外,还有一种特殊情况。

文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此发生变化。

ln -s命令可以创建软链接。

八、inode的特殊作用

由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

上面说了那么多,主要是为了帮助大家了解inode,这个信息对系统很重要,说白了inode空间不足,就是指没有空余的空间存在文件的属性信息,而这个空间在格式化的时候已经固定了。我们可以适当减少小文件的数量可以降低inode的数量,当然也可以创建多个分区,每个分区维护自己的inode信息也可以临时解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 系统告警报“ inode”空间不足引起数据库启动失败 的相关文章

随机推荐

  • echarts 暂无数据的完美解决办法

    前景 很简单的一个思想 我希望没有数据的时候 不显示图表 并且用empty来替换 但是直接使用v if 会出错 因为调用的时候 拿不到dom了 v if直接把dom干掉了 怎么办呢 直接上步骤 1 第一步 我们应该在每次点击按钮的时候 发送
  • EM算法及其推广---《统计学习方法》第9章

    EM算法是一种迭代算法 用于含有隐变量的概率模型参数的极大似然估计 或极大后验概率估计 EM算法的每次迭代由两步组成 E步求期望值 M步求最大值 EM算法是一种对模型参数的估计 该模型中含有隐变量 EM算法的引入 EM算法 概率模型有时既含
  • 即时通讯(IM)开源项目OpenIM每周迭代版本发布-音视频实时通话-v2.0.4

    介绍 OpenIM每周五发布新版 包括新特性发布 bug修复 同时合并PR 由于2 0版本重构完毕 架构更清晰 代码更规范 先邀请各位参与OpenIM社区建设 包括技术开发 技术分享等 特性开发 性能优化 bug修复等 有兴趣的同学可以加我
  • 使用burpsuite抓不到127.0.0.1本地包(针对Firefox浏览器)

    解决方法一 首先第一步点击浏览器右上角按钮 点击设置 点击常规 设置 按照如图设置 设置完毕后基本能解决问题 如果不行还有第二种解决方式 解决方法二 浏览器地址栏种输入 about config 搜索框输入如下 把值改为true即可 net
  • Spring Cloud微服务-网关(2)

    微服务网关Zuul 为什么需要微服务网关 不同的微服务一般有不同的网络地址 而外部的客户端可能需要调用多个服务的接口才 能完成一个业务需求 比如一个电影购票的收集APP 可能回调用电影分类微服务 用户 微服务 支付微服务等 如果客户端直接和
  • 二叉树的创建、遍历、深度、叶子节点数

    回忆一下 呵呵 include
  • Qt 打开本地文件夹,限定文件类型的两种方式

    需要打开本地文件夹的情况还挺多 比如File下面的open new save等功能 下面介绍两种打开本地文件夹的方式 第一种 QFileDialog getOpenFileName 函数 函数定义如下 QString QFileDialog
  • 树搜索:深度优先和广度优先

    在Android开发中 有时候会遇到多层级列表的显示 如下图 可用RecyclerView实现 其数据源的数据结构是一种树状结构 如下图 现在有两种方法来遍历这种数据结构 深度优先搜索 其过程简要来说是对每一个可能的分支路径深入到不能再深入
  • 基于springboot+vue民宿管理系统+数据库(附源码,说明文档)

    文章目录 开发环境 后端 前端 数据库 系统架构 管理员 用户用例 主要功能 用户功能模块 管理员功能模块 商家用户功能模块 前台首页功能模块 今天为大家带来的是 基于springboot vue民宿管理系统 开发环境 后端 开发语言 Ja
  • 理解线性回归(一)——回归的思想

    理解线性回归 一 回归的思想 1 经典的线性回归 之前介绍的LR回归和SVM算法本质上都和回归有写关联 尤其是LR回归算法 回归的目的是预测数值型的目标值 其核心部分和我们中小学时候学习到的线性拟合是一样的 就是说 假如我们能够建立了回归背
  • 刷脸支付三大优势让人回归万物本源

    3D人脸识别技术已实现检测人脸是否为活体 杜绝图片或视频破解 其高精度 高效率 高安全性催生刷脸支付 刷脸门禁 刷脸乘车 刷脸登机等应用落地 在5G AI引爆的万物互联未来 人回归智能万物的中心 脸成为无缝连接所有生活场景的重要途径 近期大
  • Python及pip安装与报错处理【pip永久换源】

    有帮助的话请点个赞吧 文章目录 安装新版本Python Linux系统 以Ubuntu16 04为例 Windows系统 Win10 pip换源 Linux系统 Windows系统 安装新版本Python Linux系统 以Ubuntu16
  • 微信小程序 引入字体图标 字体 使用base64解决字体请求问题

    在做公司的项目的时候 引入了奥森字体图标 控制台对这个url有报错提示 虽然字体显示正常 但还是想解决这个烦人的报错 试过加载目录中的fontawesome webfont ttf 静态资源但是加载不上 最后把ttf字体转换成base64格
  • 「司库立方」获数亿元C轮融资,持续聚焦司库赛道,引领行业变革

    今天 头部司库玩家 司库立方 宣布成功获得数亿元C轮融资 本轮融资由云晖资本领投 中信建投资本 贵阳创投 神骐资本 58产业基金 跟投 老股东信天创投持续追投 本轮融资资金主要用于迭代产品 加强市场推广 提升客户服务和体验 进一步扩大公司在
  • 史上最简单的SpringCloud教程

    在微服务架构中 根据业务来拆分成一个个的服务 服务与服务之间可以相互调用 RPC 在Spring Cloud可以用RestTemplate Ribbon和Feign来调用 为了保证其高可用 单个服务通常会集群部署 由于网络原因或者自身的原因
  • CAD平台开发和基于此平台的二次开发(数据库部分)

    CAD平台开发分为两大部分 一是底层开发 即CAD数据库的开发 底层类和结构 二是上层开发 界面和功能实现 本人目前在一个开发CAD平台的公司 工作 目前主要接触的是上层开发这一部分 没有底层开发的部分的代码 只有编号的底层数据库的DLL
  • MIPI DSI AP介绍(一)FPGA

    MIPI DSI AP介绍 一 FPGA MIPI DSI Mobile Industry Processor Interface Display Serial Interface 是一种用于移动设备显示的串行接口协议 它的主要特点是高带宽
  • 深入浅出PID控制算法(二)——PID算法离散化和增量式PID算法原理及Matlab仿真

    文章目录 1 PID算法离散化 1 1 位置式PID算法 1 2 增量式PID算法 2 PID编程实现及控制仿真 3 PID调参过程 3 1 确定比例系数Kp 3 2 确定积分时间常数Ti 3 3 确定微分时间常数Td 3 4 系统空载 带
  • C++ 修改/覆盖指定位置的文件内容或者从某个位置开始截断文件

    最新在进行文件方面的功能开发 遇到个这样的问题 1 文件读到中间 然后进行一些修改 2 然后将文件从修改后的地方截断 本以为这是个简单的操作 却花费了好大的功夫 网上并没有这样的例子 一通尝试 现在终于圆满解决了 特地记录一下 方便后来人
  • Linux 系统告警报“ inode”空间不足引起数据库启动失败

    启动数据库报错 错误如下 SQL gt startup nomount pfile oracle admin ecis ecis ora1 ORA 27154 post wait create failed ORA 27300 OS sys