【Linux】no space left on device 磁盘空间不足原因及排查方法

在系统使用中,经常会遇到no space left on device 磁盘空间不足的情况, 下面来详细的介绍一下产生这种情况的几种原因及解决办法:

1. 首先我们要清楚inode 和 block的概念:

inode在格式化创建文件系统的时候诞生,用来存放文件的属性信息,存放着block的位置,没有文件名,创建一个非空文件占用一个inode和至少1个block

block是实际存放数据的位置,block大小 1k 4k 8k centos 6.x(分区大于500M 默认是4k),文件很大的话占用多个block, 文件非常小的时候1k block剩余的空间不能继续使用,所以系统中block消耗更快

所以磁盘慢了就分为,inode满了,和block满了,以及一种特殊的情况,下面我们来具体分析,以及对应的解决方案

查看是否是block满了

[root@test-os testuser]# df -h   ###查看所有block使用情况
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  8.8G     0 100% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
[root@test-os testuser]# du -sh /usr/* |grep G  ###查找大文件
7.3G    /usr/local
[root@test-os testuser]# du -sh /usr/local/* |grep G
7.3G    /usr/local/bin
[root@test-os testuser]# du -sh /usr/local/bin/* |grep G
7.3G    /usr/local/bin/1g

[root@test-os testuser]# \rm -f /usr/local/bin/1g  ###删除大文件
[root@test-os testuser]# 
[root@test-os testuser]# df -h    ###接着查看发现已经解决
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.5G  6.9G  18% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot


查看是否inode满了(df -h发现还有空间)

[root@test-os logs]# touch {1..118}.txt 
[root@test-os logs]# touch {1..118}.txt 
touch: cannot touch `118.txt': No space left on device
[root@test-os logs]# df -i   ###查看inode使用情况
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      593344 56998 536346   10% /
tmpfs          238282     1 238281    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/tmp/1m           128   128      0  100% /app/logs
[root@test-os logs]# pwd   
/app/logs
[root@test-os logs]# \rm -f *.txt   ###如果小文件太多,采用a*.txt b*.txt 一批一批的删
[root@test-os logs]# df -i   ###接着查看
Filesystem     Inodes IUsed  IFree IUse% Mounted on
/dev/sda3      593344 56998 536346   10% /
tmpfs          238282     1 238281    1% /dev/shm
/dev/sda1       51200    39  51161    1% /boot
/tmp/1m           128    11    117    9% /app/logs
###如果不知道小文件都在哪里怎么查找?
###查找系统中 目录大小大于1M(目录一般大小为4K,所以目录要是大了那么文件必然很多)
[root@localhost testuser]# find / -size +4k -type d |xargs ls -ldhi
     11 drwx------   2 root root  12K Sep 23 00:49 /boot/lost+found
    946 drwxr-xr-x  12 root root 4.1K Sep 22 17:53 /dev
1114113 drwxr-xr-x  88 root root  12K Sep 22 19:55 /etc
 262145 drwxr-xr-x  13 root root  12K Sep 22 18:59 /lib


查看是不是文件被占用一直没被彻底删除(特殊原因),这种情况往往是容易被忽略,也是让人郁闷的,因为你会发现df -h明明已经有空间了,但是就是放不进去东西

[root@test-os ~]# lsof |grep deleted 
rsyslogd   1250      root    1w      REG                8,3 4888889358     140789 /var/log/messages (deleted)

[root@test-os ~]# #lsof 显示出系统中被打开的文件 
[root@test-os ~]# #第一列 软件/服务的名称
[root@test-os ~]# #第八列 文件的大小 
[root@test-os ~]# #第10列 文件的名字
[root@test-os ~]# #第11列 标记(硬链接数为0 进程调用数不为零 就会有 delete)

####重启对应的服务 释放磁盘空间 
[root@test-os ~]# /etc/init.d/rsyslog restart 
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]

[root@test-os ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       8.8G  1.5G  6.9G  18% /
tmpfs           931M     0  931M   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/tmp/1m        1003K   19K  933K   2% /app/logs

本文转载自:https://blog.csdn.net/jiedao_liyk/article/details/78497625 

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Linux-x86_64 error: 28: no space left on device"是指在Linux操作系统中,出现了磁盘空间不足的错误。这种错误通常发生在硬盘或分区的可用空间已经耗尽,无法继续写入数据或创建新文件。 当系统磁盘空间不足时,可能会导致一些严重的问题,例如无法正常运行软件或操作系统等。因此,我们需要采取一些措施来解决这个问题。 首先,我们可以使用`df -h`命令来查看磁盘空间的利用情况。它会显示出所有磁盘分区的使用情况以及剩余空间。 如果我们发现有一些大文件或文件夹占用了大量的磁盘空间,我们可以使用`du -sh <文件名或文件夹名>`命令来查找占用空间最多的文件或文件夹。 一种常见的解决方法是删除一些不再需要的文件或文件夹,以释放磁盘空间。可以使用`rm`命令删除单个文件,或使用`rm -r`命令删除整个文件夹。 另外,我们也可以考虑使用一些工具来压缩已有的文件或文件夹,以节省磁盘空间。例如,可以使用zip或tar命令将文件打包成压缩文件,然后删除原始文件。 如果上述方法无法解决问题,可能需要对磁盘进行扩容。这可以通过添加新的硬盘或扩展现有的分区来实现。具体的步骤可以根据不同的情况而定,可以参考一些相关的教程或咨询专业人士的建议。 总之,当出现"Linux-x86_64 error: 28: no space left on device"错误时,我们应该首先查看磁盘空间的使用情况,然后删除不需要的文件或压缩已有文件,并在必要时扩展磁盘的容量,以解决这个问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值