使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满

关于磁盘空间中索引节点爆满的问题还是挺多的,借此跟大家分享一下:

一、发现问题

在公司一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。

二、分析问题

后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。 [[email protected] ~]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on ....... ....... /dev/mapper/VolGroup-lv_home 53452800 53452800 0 100% /data inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。

而这台服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足。

三、查找原因:

/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

四、解决方案:

1)删除/data/cache目录中的部分文件,释放出/data分区的一部分inode,特别要留意那些spool出来的文件,这种文件一般会占用比较多的节点,因为比较小而且零碎,同时要多留意日志文件信息等

2)用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题: # ln -s /opt/newcache /data/cache

3)更换服务器,用高配置的服务器替换低配置的服务器。很多时候用钱去解决问题比用技术更有效,堆在我办公桌上5台全新的 DELL PowerEdge 2950 服务器即将运往IDC机房。一般不建议

************************************************************************************************************* 关于磁盘的inode满100%--i节点大爆发 原因: 通常是发现磁盘没有满但是无法写入文件。提示“no space left on device” 用df -i 查看,应该会发现相应的分区是100% 一般都是crontab的job有问题,造成/var/spool/clientmqueue中产生许多的零碎文件。 处理方法: 用rm -rf *会不能删除,并会有相应的提示,大意是参数太多。 可以用多种方法,这里提及一个我随便写的,在/var/spool/clientmqueue/下执行命令:“lsattr ./|awk -F"/" ‘{print $3}‘|xargs -i rm -rf {}”用lsattr列出./下面的文件名的属性,用awk取出名字,然后rm -rf 还有一个方法比较普遍的使用:“find /var/spool/clientmqueue/ -type f -exec rm {} \;”或者在/var/spool/clientmqueue/目录下“find ./ -exec rm {} \;” 将crontab中没有定向输出的行都在最后加上“> /dev/null 2>&1”,在删除的过程中操作。或者先停止crontab,加上重定向。

************************************************************************************************************

no space left on device的解决:

服务器磁盘不足,df -h 一下,var下正常,还有剩余,发现问题没有,到后来显示大量的No space left on device:

/var明明还有很大的空间,为什么就提示“没有足够的空间”了呢?结果用到了df -i命令查看磁盘的节点发现如下图:

节点100%了.

这个时候用户可以先看下日志文件是否太多,如果是日志文件占用大量的inodes可以临时释放清理下过期的日志。

以下是检查inodes满的某一种情况,仅供参考:

查看原来是crontab里面定时执行的句子里没有加 > /dev/null 2>&1,系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了很大零碎的文件:

cd /var/spool/clientmqueue/  进入这个目录,删掉这些没用的文件,用ls 查看一下,结果是没有反应,文件太多,于是就用到了这个命令:ls |xargs rm -rf 可以分批的处理删除文件,如下图是删除后的效果:

操作到该步骤,可以根据较大目录的文件占用情况,临时转移部分文件到占用磁盘较小的目录中。

转自:https://cloud.tencent.com/developer/article/1025981?from=10680

原文地址:https://www.cnblogs.com/guanbin-529/p/12101319.html

时间: 2024-08-07 16:18:36

使用df -h命令查看磁盘空间使用率不算高,还有很多空余空间,但是创建文件或写入数据时一直报错磁盘写满的相关文章

linutx系统服务器报错--磁盘空间不足

公司有一台配置很差的老服务器,应该使用的年份不少了,可能也不少于十年了吧.这段时间写入一个文件,文件不论大小都报错磁盘空间不足,如下: #df -h 文件系统             1K-块           已用            可用             已经%                    挂载点 /dev/hdd2          2063536    1919932      38780         99%                       / /d

CentOS命令登录MySQL时,报错ERROR 1045 (28000):

CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user [email protected] (using password: NO)错误解决方法 1.停用mysql服务:# /etc/rc.d/init.d/mysqld stop 2.输入命令:# mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 3.登入数据库:# mysql -u root my

使用webpack命令打包时,报错TypeError: Cannot read property 'presetToOptions' of undefined的解决办法

我只安装了webpack,没有安装webpack-cli,第一次输入webpack打包时,提示 One CLI for webpack must be installed. These are recommended choices, delivered as separate packages: - webpack-cli (https://github.com/webpack/webpack-cli) The original webpack full-featured CLI. We wi

Linux学习笔记--df/du命令(查看磁盘空间命令)

df :英文名disk free,查看硬盘的使用情况. du:英文名disk usage,查看指定目录的文件大小. 1. 命令格式 df [选项] [文件] du [选项] [文件] 2. df 常用选项 "df -a" 全部文件系统列表. "df -h" 人性化显示文件大小,如100K 21M 2G等. "df -k" 以k字节的形式表示文件的大小.(1k=1024Byte) "df -l" 只显示本地文件系统. "

df du命令 查看磁盘大小

1.df命令 查看文件系统使用情况. 最常用的命令就是 df -h 其他选项: a :列出所有的文件系统,包括系统特有的/proc等系统文件 k :以KB的容量显示 m : 以MB的容量显示文件系统 h : 以人们较易阅读的gb,mb,kb等格式自行显示 H : 以十进制的进位方式显示 T:连同该分区的文件系统名称也一并列出 i :不用硬盘容量,而已inode的数量来显示 2.du命令 查看目录占用磁盘大小情况. 最常用的命令就是 du -sh  PATH 其他选项: a:列出所有的文件与目录的

oracle 10g\11g用imp导入数据的时候报错:ORA-01658: 无法为表空间 MAXDATA 中的段创建 INITIAL 区 错误解决

备份文件是从11g中通过exp命令导出的,在10g下使用imp导入出现了上述错误,以为是低版本的不支持高版本的备份,于是使用11g测试,还是上面的问题. 其实是表空间大小不够的问题,下面是网上的解答: 表空间不足 先查询MAXDATA表空间数据文件所在路径 select file_name from dba_data_files where tablespace_name = 'MAXDATA' 通过file_name 来得到你当前MAXDATA表空间对应数据文件的路径,然后增加新的数据文件.

nfs非正常情况下断开,无法重新挂载,且无法使用df -h 命令的解决方法

问题解决思路:1.强制取消客户端挂载(此处需要注意方法)2.重启NFS服务,客户端和服务端都需要重启3.重新挂载NFS 处理方法: 重启NFS服务,客户端和服务端都需要重启 service rpcbind restart service nfs restart 重新挂载NFS mount -t nfs 172.16.1.31:/data /mnt 原文地址:https://blog.51cto.com/14078730/2411965

git执行pull命令时,报错

在图形界面中,执行拉取操作时,出现下面的错误. You asked to pull from the remote 'origin', but did not specifya branch. Because this is not the default configured remotefor your current branch, you must specify a branch on the command line. 解决办法: Edit your .git/config [bra

df -h执行卡住不动问题解决

昨天生产环境报日志写不进去了,因此 登陆线上环境后,习惯用df -h命令查看空间使用情况,结果发现该命令执行半天也没有返回. 因此使用mount命令查看该机器上的目录: [[email protected] ~]$ mount /dev/mapper/VolGroup-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devp