Linux索引节点(Inode:no space for device)用满导致的一次故障

问题描述

在storm测试环境集群上上nimbus和supervisor自动挂调,重启时显示no space for device,也不能创建,添加文件及目录,df -h查看


ilesystem            Size  Used Avail Use% Mounted on
/dev/vda1              40G  2.9G   35G   8% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/vdc1             100G  3.1G   92G   4% /home
/dev/vdd1              50G  180M   48G   1% /home/xxx/hard_disk/0
/dev/vde1              50G  180M   48G   1% /home/xxx/hard_disk/1
/dev/vdf1              50G  180M   48G   1% /home/xxx/hard_disk/2
/dev/vdg1              50G  180M   48G   1% /home/xxx/hard_disk/3
/dev/vdh1              50G  180M   48G   1% /home/xxx/hard_disk/4

显示空间使用很少,空间足够, df -i 显示


Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/vda1            2621440   75783 2545657    3% /
tmpfs                1007672       1 1007671    1% /dev/shm
/dev/vdc1             102400   85159   85159  100% /home
/dev/vdd1              51200      13   51187    1% /home/xxx/hard_disk/0
/dev/vde1              51200      18   51182    1% /home/xxx/hard_disk/1
/dev/vdf1              51200      18   51182    1% /home/xxx/hard_disk/2
/dev/vdg1              51200      18   51182    1% /home/xxx/hard_disk/3
/dev/vdh1              51200      18   51182    1% /home/xxx/hard_disk/4

发现inode使用率达到100%,这才找到问题

什么是inode

一、inode

硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性读取一个”块”(block),每个”块”(block)由八个连续的sector组成。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,文件数据都储存在”块”中,那么还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

二、inode的内容

inode包含文件的元信息,具体有以下内容:

  * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

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

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

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

  * 文件数据block的位置

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

[[email protected] home]# stat apps
  File: `apps‘
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 4123        Links: 3
Access: (0700/drwx------)  Uid: (  456/    apps)   Gid: (  456/    apps)
Access: 2015-03-14 04:02:07.069500045 +0800
Modify: 2015-03-13 15:35:57.886985112 +0800
Change: 2015-03-13 15:36:28.209482045 +0800

三、inode的大小

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

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

使用df -i可以查看每个硬盘分区的inode总数和已经使用的数量

解决办法

进入到home路径下,用 ls -i 查看每个路径所找用的信息:

   71 xxxxxxxx                     83969 xxxxxxxx      79877 xxxxxxxx
   70 curator-recipes-2.5.0.jar       11 lost+found    86017 xxxxxxxx
   68 curator.tar.gz               90113 mapred        88065 xxxxxxxx
94209 xxxxxxxx                     79873 mobilereco    98305 xxxxxxxx
   69 fds.jar                         55 ro_test       81921 vpp
69633 hdfs                         73729 spark         20481 yarn
92161 xxxxxxxx                     96257 xxxxxxxx
  129 xxxxxxxx                      8193 storm

会在每个目录前面显示该路面所用的inode数目

如何释放inode信息,情查看下面信息

It’s quite easy for a disk to have a large number of inodes used even if the disk is not very full.

An inode is allocated to a file so, if you have gazillions of files, all 1 byte each, you’ll run out of inodes long before you run out of disk.

It’s also possible that deleting files will not reduce the inode count if the files have multiple hard links. As I said, inodes belong to the file, not the directory entry. If a file has two directory entries linked to it, deleting one will not free the inode.

Additionally, you can delete a directory entry but, if a running process still has the file open, the inode won’t be freed.

My initial advice would be to delete all the files you can, then reboot the box to ensure no processes are left holding the files open.

If you do that and you still have a problem, let us know.

By the way, if you’re looking for the directories that contain lots of files, this script may help:

#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo ‘echo $(ls -a "$1" | wc -l) $1‘ >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

or

sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

list the files and remove these files to free inode.

参考文献

1. Howto Free Inode Usage

2. Linux索引节点(Inode)用满导致的一次故障

3. Linux的inode的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 13:24:49

Linux索引节点(Inode:no space for device)用满导致的一次故障的相关文章

Linux索引节点(inode)用满导致的一次故障

一.发现问题: 在一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题. 二.分析问题: 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件. inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份

彻底解决Linux索引节点(inode)用满导致故障的方法

登录到服务器上df -i一看/路径下96%而数据目录/data下才用了30%故初步判断生成的数据量正常可能是一些系统产生的文件把根路径占满了 于是乎在执行以下命令查看根路径下各个文件夹的文件数 for i in /*; do echo $i; find $i |wc -l|sort -nr; done 数文件数超过10W的有两个/data我们的数据分区确认数据量正常和/var /data 13W+文件 /var下70W+文件 楼主linux水平有限于是把/var下的目录一个个的执行了上面的命令

Linux索引节点(Inode)用满导致空间不足

https://blog.csdn.net/liuxiao723846/article/details/79423581 https://blog.csdn.net/samxx8/article/details/44779245 原文地址:https://www.cnblogs.com/jing1617/p/10419670.html

由索引节点(inode)爆满引发的问题

关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下: 一.发现问题 在公司一台配置较低的Linux服务器(内存.硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题. 二.分析问题: 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件.[[email protected] ~

Linux索引节点以及链接

在学习Linux中,索引节点以及链接概念都是一个既简单又重要的基础概念,一下是我学习这两个概念的总结,在此分享给大家,如有不当之处,敬请各位大神留言提醒,谢谢! 1.0  Linux索引节点 在Linux文件系统中,不管什么类型的文件,保存在磁盘分区中,系统都会给它分配一个编号,称为索引节点index node.在Linux中,存在多个文件指向同一个inode,这种情况一般称为硬链接[hard link]. 一个索引节点(inode)是在一个表项,包含有关文件的信息(元数据),包括:文件类型,权

Centos 06 文件类型和扩展名&索引节点inode和存储块block

本节内容 1.文件类型 2.文件扩展名 3.索引节点inode和block块 首先需要申明一点, 1.在linux里面文件扩展名和文件类型是没有关系的 2.为了容易区分和兼容用户使用windows的习惯,在linux里面也会用扩展名来表示文件类型 3.在linux里面需要提起一个概念"一切皆文件". 文件类型 文件类型分为:普通文件.目录.字符设备文件.符号链接文件.块设备文件.套接口文件.管道 之前我们通过find命令查找过文件,所以可以查看一下find命令里面的规定,man fin

linux索引节点及值(弄清十分必要)

各位看官, [[email protected] aaa]# ls -l test.c -rw-r--r--. 1 root root 3 Aug  1 07:49 test.c      #看加粗1    原始test.c文件索引节点值为1,也就是每个文件第一次生成时候都是唯一的1值 [[email protected] aaa]# ln test.c test1.c     #硬链接文件test1.c [[email protected] aaa]# ls -li test* 262594

Linux文件系统与索引节点inode浅析

我们知道磁盘在分区后还需要进行格式化,之后操作系统才能使用这个分区.而需要格式化的原因正是因为每种操作系统所设置的文件属性/权限并不相同.在Linux中,传统的磁盘文件系统是EXT,下面以EXT为例浅析Linux的文件系统与索引节点. 我们知道,文件的数据除了文件实际内容之外,通常还含有非常多的属性.文件系统通常会将权限与属性等数据放置到inode(index node)中,至于实际数据则放置到data block块中:另外,还有一个超级块会记录整个文件系统的整体信息. 在文件系统中,每个ino

inode 索引节点和软硬链接

Inode 索引节点 inode(index node)表中包含文件系统所有文件列表 一个节点(索引节点)是在一个表项,包含有关文件的信息(元数据),包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数据 inode表结构 ls -i 可以查看节点编码 Inode table 节点表 是存放元数据的,每一个分区都有一个节点表. 在一个分区里一个文件只有一个节点号,就像人的身份证号 硬链接: 命令是l