首页 > 编程知识 正文

linux磁盘空间满了怎么处理,硬盘空间满了怎么办

时间:2023-05-05 16:02:51 阅读:247615 作者:4211

Step 1. 查找原因

如果做写操作的时候,系统提示“No space left on device”,这个时候就该着急了。尽快清理磁盘吧!
首先,用“df -h”命令查看各个分区的磁盘占用情况。

ubuntu@slave:~/temp$ df -hFilesystem Size Used Avail Use% Mounted onudev 1.9G 4.0K 1.9G 1% /devtmpfs 379M 11M 369M 3% /run/dev/vda1 50G 50G 0 100% /tmpfs 1.9G 48K 1.9G 1% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 1.9G 0 1.9G 0% /sys/fs/cgrouptmpfs 379M 0 379M 0% /run/user/500

下面的统计命令可以派上用场。

#列出当前文件夹的大小du -sh#列出当前文件夹中各个文件及子文件夹的大小:du -h -d1#列出/home文件夹中各个文件及文件夹的大小:du -h -d1 /home

du参数说明:

-s: --summarize 统计总数-h: --human-readable 用便于阅读的方式输出大小,比如 “1K”, “234M”, “2G”, 等等-d: --max-depth=N 统计的目录层数。如果N=0话,跟s参数一个意思,就是只统计总量。 Step 2. 删除/备份删除消耗磁盘空间的文件

在上一步找到不需要保留在服务器上的文件。

方法1 直接删除文件

需要备份的先通过FTP等工具备份,然后用rm进行删除。记得要备份!

rm -f needDeletefile 方法2 清空日志释放空间

如果是正在使用中的日志文件等,可以在备份之后,清空日志,可以马上获得空间。

echo "" > yourlogfile Step 3. 真正释放出磁盘空间

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等。最常见的是日志文件。
处理办法:

3.1 找到占用该文件占用的进程ID

找到占用该文件占用的进程ID,比如为 nnnn

sudo lsof -w| grep deleted

lsof参数说明:

-w 忽略错误 3.2 杀掉进程

如果是可以随便关闭的程序,杀死进程。如果误删除了日志文件,只能建议重启该服务吧。

kill -9 nnnn 3.3 为什么没有释放空间?

为什么有的文件删除之后不释放空间,有兴趣的读者可以看看下面的说明。
这张图是linux的系统文件结构。

当一个进程打开一个文件后,便会在内核中创建一个file对象,这个对象主要描述了进程如何与文件进行交互。file对象中将指向一个dentry结构(目录项),目录项中描述了目录项名称,父目录项信息,子目录项信息等。而dentry中的d_inode所指向的inode节点中则包含了实际的文件存储在磁盘上的信息。

当多个进程打开同一个文件时,内核中变会创建相应的file对象,但是他们都公用同一个dentry,只不过每一次打开文件dentry的引用计数d_count加1。并且对于打开的同一个文件而言,inode也是唯一的,inode的引用计数i_count一般为文件硬链接的数目。如果该文件被某个进程写的方式打开,i_count不为0,肯定是释放不了的。如果强行释放了可能会引起系统崩溃。

笔者曾遇到过一个问题,一个大的压缩文件包被rm删除后,空间一直没有释放。通过lsof |grep deleted 命令也查不到有什么进程在使用这个文件。如果程序释放处理不当,进程灭掉了但是连接未释放,也可以导致lsof查不到被占用的情况。这个时候i_count>0,空间基本就没法释放了。需要重启服务器才能解决问题。

下面是释放后的情况。

ubuntu@slave:~$ df -hFilesystem Size Used Avail Use% Mounted onudev 1.9G 4.0K 1.9G 1% /devtmpfs 379M 11M 369M 3% /run/dev/vda1 50G 46G 2.0G 96% /tmpfs 1.9G 48K 1.9G 1% /dev/shmtmpfs 5.0M 0 5.0M 0% /run/locktmpfs 1.9G 0 1.9G 0% /sys/fs/cgrouptmpfs 379M 0 379M 0% /run/user/500

参考1:在删除了文件后,磁盘空间却没有释放

C语言中的结构体如何使用详解docker pull 下来的镜像都存到了哪里

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。