Linux:No space left on device

http://blog.csdn.net/u011957758/article/details/53750419

配置服务器发现vim文件的时候,竟然失败了,报了这个错误:No space left on device,故帮忙解决了一下。顺便记录一下。

出现这个错误第一反应是空间满了。

df -h 一看却发现还有挺多没有用
df -i 一看发现是inodes空间满了


No space left on device 看到这个错误,第一个反应是磁盘空间满了;但df一看,每个分区的空间都还富余的很。从munin 的监控图表上看 Filesystem usage 也很平稳,但下面的 Inode usage 就有问题了,其中一个分区的 usage 已经到了100%。赶紧跑到服务器上df -i检查,果然是 Inode 耗尽。原来这个分区是用来扔各种日志和临时文件的,其中有某个程序产生的临时文件又小又多,又没有进行定时回滚,造成在磁盘空间耗尽之前文件系统的 Inode 就被用光了。 Linux/Unix like OS 的文件系统中每个目录树中的节点并不是像 Windows 那样直接包含文件的具体信息,而只包含了文件名和 Inode number 。通过 Inode number 所找到对应于文件名的 Inode 节点中才真正记录了文件的大小/物理地址/所有者/访问权限/时间戳/被硬链接的次数等实际的metadata。因此你可以在 Linux 系统中通过硬链接( hard link ) 的方式给某个文件创建无数个位于不同目录下的文件名,而实际的文件数据只需要一份拷贝。 但也正因为这种文件系统的结构,当你在 Linux 中进行 IO 操作的时候,需要的资源除了磁盘空间以外,还要有剩余的 Inode 才行。缺省情况下, Linux 在系统安装过程中按照1个 Inode 对应 2k 磁盘空间来计算每个分区的最大 Inode 数。一旦文件系统创建之后,每个分区可用 Inode 数就无法进行动态调整。 正常来说,一般不太会出现某个分区的 Inode 耗尽而磁盘空间尚余的情况,除非像我碰到的这样垃圾小文件疯长而又没进行有效的清理。但如果确实需要的话,可以在创建文件系统(比如用mke2fs)的时候根据实际需要来调整这个参数(比如分区如果用于存放超大视频文件的话 Inode 的数量可以少一些;如果打算存放的文件是大量小于 2k 的迷你文件的话就要考虑多创建一些 Inode)。取消息队列时,报错No space left on devicesysctl -w kernel.msgmni=128
就是这个东东,MSGMNI --- 这个参数决定了系统中同时运行的最大的message queue的个数在root下用sysctl kernel.msgmni检查该参数,sysctl -w kernel.msgmni=XXX重新设定即可。

https://yq.aliyun.com/articles/53740

最近发现放在/tmp下的目录ora_tmp总是莫名奇妙的被删除掉,通过crontab发现并没有定期执行的任务。。。

/var/log/  除了有message系统日志,还有cron 计划任务的日志

查看cron会有以下的类似内容

May 29 03:24:02 *** run-parts(/etc/cron.daily)[105072]: starting rhsmd
May 29 03:24:02 *** run-parts(/etc/cron.daily)[105288]: finished rhsmd
May 29 03:24:02 *** run-parts(/etc/cron.daily)[105072]: starting tmpwatch
May 29 03:24:02 *** run-parts(/etc/cron.daily)[105326]: finished tmpwatch

这里发现有运行tempwatch


什么是tmpwatch

tmpwatch  -  removes  files  which haven’t been accessed for a period of time


当你安装了tmpwatch package后就有这个命令,并且在/etc/cron.daily/目录下生成一个tmpwatch文件

tmpwatch package

rpm -qa |grep tempwatch

tmpwatch-2.9.16-4.el6.x86_64


tmpwatch command

-u, --atime 基于访问时间来删除文件,默认的。
-m, --mtime 基于修改时间来删除文件。
-c, --ctime 基于创建时间来删除文件,对于目录,基于mtime。
-M, --dirmtime 删除目录基于目录的修改时间而不是访问时间。
-a, --all 删除所有的文件类型,不只是普通文件,符号链接和目录。
-d, --nodirs 不尝试删除目录,即使是空目录。
-d, --nosymlinks 不尝试删除符号链接。
-f, --force 强制删除。
-q, --quiet 只报告错误信息。
-s, --fuser 如果文件已经是打开状态在删除前,尝试使用“定影”命令。默认不启用。
-t, --test 仅作测试,并不真的删除文件或目录。
-U, --exclude-user=user 不删除属于谁的文件。
-v, --verbose 打印详细信息。
-x, --exclude=path 排除路径,如果路径是一个目录,它包含的所有文件被排除了。如果路径不存在,它必须是一个绝对路径不包含符号链接。
-X, --exclude-pattern=pattern 排除某规则下的路径。

cat /etc/cron.daily/tmpwatch

#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi

done 


发现 /usr/sbin/tmpwatch "$flags" -f 30d "$d"这一行,就是说清理30天没有被访问过的文件或文件夹



======================================== Linux:No space left on device=============================================

df -i (不是df -hl)
Filesystem        Inodes  IUsed     IFree IUse% Mounted on
/dev/sda1        6553600 346145   6207455    6% /


cd /tmp/orbit-biee
/usr/sbin/tmpwatch -umc 1 /tmp/orbit-biee


cd /etc/cron.daily
cat tmpwatch 


#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
 -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
 -X '/tmp/hsperfdata_*' 4 /tmp
/usr/sbin/tmpwatch "$flags" 1d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
 /usr/sbin/tmpwatch "$flags" -f 1d "$d"
    fi

done


http://blog.csdn.net/huyangg/article/details/6454245

http://blog.163.com/wang_hai_fei/blog/static/30902031201231751739822/

http://bbs.chinaunix.net/thread-4146297-1-1.html

但我看CentOS6.4,CentOS6.5下的/etc/crontab文件,里面什么定时任务都没有。难道说默认cron.daily,cron.monthly里面的都是不执行的?

我知道了,在CeontOS6 里面,crond每分钟去/etc/cron.d里面搜索配置文件,里面有一个0hourly文件,里面写了01 * * * * root run-parts /etc/cron.hourly。是每隔1小时去运行一次/etc/cron.hourly目录,该目录下面有一个0anacron文件,这样0anacron文件就能每小时运行一次。0anacron按照/etc/anacrontab文件里面的配置,将当前时间与/var/spool/anacron目录下面的文件里面的时间戳作对比,如果需要则去运行/etc/anacrontab对应的条目。这也是为什么/etc/anacrontab文件里面只定义了cron.daily、cron.weekly与cron.monthly,而没有定义cron.hourly,因为cron.daily、cron.weekly与cron.monthly其实是由cron.hourly调起来的。

各位看下是不是这样呢?

在我的centos版本里只有一个0anacron存在于 /etc/cron.hourly目录下,我猜测是:
每小时运行的0anacron只负责进行时间戳的比对,如果当前日期和上次运行anacron的日期不符,说明系统停机过了,就会启动anacron这支程序,再由anacron根据/etc/anacrontab配置进一步判断,然后去运行cron.daily、cron.weekly与cron.monthly里面未完成的任务。

那么问题来了,对于hourly的任务,anacron就不管了吗


https://zhidao.baidu.com/question/310834713.html








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值