在linux中设备空间有两个条件决定的:硬盘容量 和 inode
硬盘容量
即硬盘可用容量
inode
即索引节点编号(记录文件的大小,佣有者,权限,区块地方等信息可以通过 stat 命令查看),每个分区中都会有固定大小的inode容量,每个inode节点也会占用硬盘空间,一般是128字节或256字节,inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode,要查看各分区的inode情况可以通过 df -i 查看
硬盘与inode其中一项超额就会造成 设备上没有空间 异常错误,当出现这类错误基本上可以从这两个方面去考虑,一般使用命令 df:
df --help
用法:df [选项]... [文件]...显示每个文件所在的文件系统的信息,默认是显示所有文件系统。长选项必须使用的参数对于短选项时也是必需使用的。 -a, --all include dummy file systems -B, --block-size=SIZE use SIZE-byte blocks --direct show statistics for a file instead of mount point --total produce a grand total -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G) -H, --si likewise, but use powers of 1000 not 1024 -i, --inodes 显示inode 信息而非块使用量 -k 即--block-size=1K -l, --local 只显示本机的文件系统 --no-sync 取得使用量数据前不进行同步动作(默认) -P, --portability 使用POSIX 兼容的输出格式 --sync 取得使用量数据前先进行同步动作 -t, --type=类型 只显示指定文件系统为指定类型的信息 -T, --print-type 显示文件系统类型 -x, --exclude-type=类型 只显示文件系统不是指定类型信息 -v (忽略) --help 显示此帮助信息并退出 --version 显示版本信息并退出所显示的数值是来自 --block-size、DF_BLOCK_SIZE、BLOCK_SIZE 及 BLOCKSIZE 环境变量中第一个可用的 SIZE 单位。否则,默认单位是 1024 字节(或是 512,若设定 POSIXLY_CORRECT 的话)。SIZE 可以是一个可选的整数,后面跟着以下单位中的一个:KB 1000,K 1024,MB 1000*1000,M 1024*1024,还有 G、T、P、E、Z、Y。请向bug-coreutils@gnu.org 报告df 的错误GNU coreutils 项目主页:<http://www.gnu.org/software/coreutils/>GNU 软件一般性帮助:<http://www.gnu.org/gethelp/>请向<http://translationproject.org/team/zh_CN.html> 报告df 的翻译错误要获取完整文档,请运行:info coreutils 'df invocation'
判断硬盘满:(发现有占用率达100% 就可以断定该分区满了)
df -h
判断inode满:(发现有占用率达100%就可以断定该分区碎片文件超多)
df -ia
硬盘满了一般删除不要的临时文件,清空日志文件等不需要的文件即可(最好同时看下inode使用情况)。
inode满了一般就是垃圾小文件越多造成的,linux下有很多服务会生成日志文件,如果处理不当,几年下来删除都是个头痛事(上万文件后 rm 使用就困难,甚至rm无法全部删除)。常见 crontab 定时服务就会产生邮件日志,一般不需要邮件的可在 crontab -e 中最上面添加一行 MAILTO="" 关闭邮件发送。
当不知道有哪些目录中存在大量碎片文件时,可通过命令:(查找出超过10M的目录,再行处理)
find / -type d -size +10M
或者使用命令:(找出目录下文件总数,可能需要执行多次,直到找出具体的目录)
cd /find */ ! -type l | cut -d / -f 1 | uniq -c
当找到的目录中存在上百万文件时 rm 是无法一次性删除的,可以使用rsync命令来删除:
mkdir /tmp/del_path #创建临时空目录rsync --delete -a -H -v /tmp/del_path/ /val/logs/ #删除/val/logs/下所有文件