当前位置: 首页 > Linux

linux磁盘空间释放问题_0

时间:2023-04-06 19:18:49 Linux

问题是IDC某台服务器/分区使用率爆满!已达到100%!检查后发现是某个文件过大(80G),于是跟相关同事确认后,果断rm-f删除了文件。但是我发现删除文件后,/分区的磁盘空间根本没有释放,使用率还是100%!为什么是这样??[root@linux-node1~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/mapper/VolGroup00-LogVol0058G7.8G47G100%/tmpfs1.9G01.9G0%/dev/shm/dev/vda1190M72M108M40%/boot原因分析:在linux系统中,通过rm或文件管理器删除一个文件,只是将其从文件系统的目录结构中解除链接(unlink),也就是说只删除文件和system指向目录结构的链接;如果文件在删除时处于打开状态(某个进程正在使用该文件,该文件被某个进程锁定,或者某个进程一直在向文件写入数据等),那么该进程仍将能够读取file,也就是说正在读取的文件状态没有被删除,所以磁盘空间会一直被占用。一个文件在文件系统中的存储分为两部分:数据部分和指针部分。该指针位于文件系统的元数据中。数据删除后,指针从元数据中清除,数据部分存储在磁盘中,数据对应的指针从元数据中清除后,文件数据占用的空间即可可以覆盖和写入新内容。文件删除后空间还没有释放的原因是因为还有进程一直在往这个文件写内容,所以虽然文件被删除了,但是文件对应的指针部分并没有从meta中清除-data由于进程锁,由于指针没有被删除,系统内核认为文件没有被删除。被删除了,所以df命令查询的空间没有释放也就不足为奇了。解决方法如下:1、使用lsof|grepdeleted命令获取已删除但仍被应用程序占用的文件列表,然后kill掉仍占用被删除文件的进程。需要注意的是,如果很多进程都在使用被删除的文件,那么使用第一种方法杀掉进程就有点麻烦,风险也比较高。因为kill进程会截断proc文件系统中的文件,它可以强制系统回收分配使用的文件。只有在确定不会影响正在运行的进程时才可以使用。应用程序不支持这种方法。当正在使用的文件被截断时,可能会导致不可预知的问题。2.停止或重启使用被删除文件的应用程序,让操作系统自动回收磁盘空间。3.也可以重启操作系统,但这不是最好的方法。4.应对这种不断向文件写入日志的进程的操作,释放文件占用的磁盘空间的最好方法是在线清除文件。这样既可以立即释放磁盘空间,又可以保证进程继续向文件写入日志。在线清空文件的方法(如/home/wangshibo.log):a)#echo"">/home/wangshibo.logb)#cat/dev/null>/home/wangshibo.logc)#>/home/wangshibo.日志中还有磁盘空间使用的问题:很明显使用df-h命令查看磁盘空间使用率不高,还有很多空闲空间,但是在创建文件或写入数据时,它一直报告磁盘已满:“nospaceleftondevice”!一般这种问题是由于分区目录中被删除的资源空间还没有释放造成的。具体处理流程如下:1、先用df-lh查看磁盘使用情况,发现/data分区下的Usedspace很大,但实际查看并没有占用那么多空间!2、找到被删除文件所在的分区,比如/data分区3、查看所有被删除的文件:lsof-n/data|grepdeleted4。终止这些文件删除进程,释放空间:lsof-n/data|grepdeleted|awk'{print$2}'|xargskill-95。然后运行lsof-n/data|grepdelete,应该没有结果。6.注意:刚kill掉被删除的进程时,用df-h查看/data分区,Usedspace可能一瞬间显示为toolarge,但随着被kill掉的进程,资源逐渐释放,并且/data分区下的Usedspace已经被使用空间会逐渐减少,Avail的可用空间会逐渐增加)大部分文件系统都会预留一部分空间以备不时之需(比如硬盘空间已满),从而保证一些关键应用(如数据库)在硬盘存储满的时候有一定的余地,以免马上崩溃,给监控系统和管理员一些时间去注意。但是,有时候这部分预留的硬盘空间如果不用的话就有点浪费了。在Linux系统中,ext2、ext3、ext4文件系统通常默认预留5%的磁盘空间。例如,如果磁盘是2TB,则意味着将保留100GB的空间。会不会显得有点浪费。默认设置5%可以通过“tune2fs”命令改变,比如只保留2%的空间。但是,不建议将其设置为0%,因为在真实环境中这样做是不安全的。[root@ss-server~]#df-TFilesystemType1K-blocksUsedAvailableUse%Mountedon/dev/vda1ext44115180849621483407622813%/devtmpfsdevtmpfs1931468019314680%/devtmpfstmpfs19412041%/dev01/shmtmpfstmpfs194120465219405521%/runtmpfstmpfs1941204019412040%/sys/fs/cgrouptmpfstmpfs38824403882440%/run/user/0[root@ss-server~]#df-Sizehed文件系统安装在/dev/vda140G4.8G33G13%/devtmpfs1.9G01.9G0%/devtmpfs1.9G01.9G0%/dev/shmtmpfs1.9G620K1.9G1%/runtmpfs1.9G01.9G0%/sys/fs/cgrouptmpfs380M0380M0%/run/user/0比如上面的“/”分区是ext4文件系统,系统默认预留5%的空间,即2G。现在您可以通过“tune2fs”命令将系统保留空间更改为2%。[root@ss-server~]#tune2fs-m2/dev/vda1tune2fs1.42.9(28-Dec-2013)Settingreservedblockspercentageto2%(209704blocks)执行后发现“/”分区腾出1G,此时系统预留空间为2%。[root@ss-server~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/vda140G4.8G34G13%/devtmpfs1.9G01.9G0%/devtmpfs1.9G01.9G0%/dev/shmtmpfs1.9G620K1.9G1%/runtmpfs1.9G01.9G0%/sys/fs/cgrouptmpfs380M0380M0%/run/user/0以上是良旭教程网为大家分享的Linux磁盘空间释放问题朋友们。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。