您的位置:首页 > 运维架构 > Linux

Linux磁盘空间不足处理方法

2017-09-17 17:53 369 查看
维护Linux服务器正常使用需要经常删除Linux系统运行产生的系统日志和业务环境产生的debug日志文件、安装包等。本文主要描述如何通过脚本实现清理业务环境产生的

debug日志文件和上传或备份的打包文件。原因是手工查找删除不同业务环境下的debug日志和安装包文件比较费时。

问题现象

df -h命令查看磁盘空间使用率即将达到100%

问题分析

文件占用或者已删除文件由于使用进程占用导致未释放。通常是第一种原因。

问题解决

1、利用df命令确定将磁盘空间即将耗尽的文件系统对应的目录。

linux~ # df
文件系统               1K-块        已用     可用 已用% 挂载点
/dev/sda2            146294492  28244432 110498708  21% /
/dev/sda1              1019208     62360    904240   7% /boot
tmpfs                  1032204         0   1032204   0% /dev/shm
/dev/sdb1            2884284108 2884284108 0   8% /home


根据上述结果可知,/dev/sdb1磁盘空间即将达到100%,对应的挂载点为/home目录。进入/home目录进行查找删除操作即可 。

2、利用du命令逐级查找占用磁盘空间较大的文件或者文件夹。

linux~ # du -sm /home


3、删除查找到的无用的安装包、备份包文件或者长期未清理的debug日志。如果查找确认之后发现并无占用较大空间的文件,需确认该文件系统挂载点/home目录下是否已被

使用并且存在占用空间较大的文件。使用umout /home卸载挂载点查看。

4、重新执行df命令查看/dev/sdb1磁盘空间使用率是否降低。如果磁盘空间释放大小与已删除文件大小不一致,参看FAQ处理。

FAQs

1、如何实现自动删除服务器垃圾文件?

需求描述

(1)假设业务运行产生的日志文件生成路径位于$HOME/log目录下,文件名为'用户名_[debug|run|warn].log'或者'用户名_[debug|run|warn].log.n',n为数字,常为备份名。

(2)假设业务运行产生的临时文件生成路径位于$HOME/temp目录,文件名为'用户名_[debug|run|warn].tmp'或者'用户名_[debug|run|warn].tmp.n',n为数字,常为备份名。

(3)查找Linux服务器超过指定大小(如100M)的安装包、备份包文件,供用户人工判断是否可以删除。

(4)不能误删系统文件,特别是oracle用户的重做日志文件(redoN.log)。

代码实现

#!/bin/bash

SEARCH_DIR_LIST="search_directory.txt"
SEARCH_TEMP_FILES="search_temp_files.txt"
SEARCH_FILES="search_files.txt"
file_size="100M"

if [ $(whoami) != 'root' ];then
printf "Please Use root to execute\n"
exit 1
fi

rm "${SEARCH_DIR_LIST}" "${SEARCH_TEMP_FILES}" "${SEARCH_FILES}" &> /dev/null
find / -maxdepth 2 \( -path '/proc' -o -path '/var' \) -prune -o -type d -print | grep '^/.*/'> "${SEARCH_DIR_LIST}"

printf "Begin search larger than ${file_size}M files,wait a moment....\n"
while read line
do
( find ${line} -type f -size +${file_size} -print >> "${SEARCH_TEMP_FILES}" ) &
done < "${SEARCH_DIR_LIST}"
wait
printf "End search larger than ${file_size}M files.\n"

printf "Begin Compute each files detail size,please wait...\n"
while read line
do
awk -v filename=${line} -v filesize=$(stat -c %s ${line}) 'BEGIN{print filesize/1024/1024"M",filename}' >> ${SEARCH_FILES}
done < "${SEARCH_TEMP_FILES}"
wait
printf "End Compute each files detail size.\n"

printf "Please Check below files..\n"
cat ${SEARCH_FILES} | sort -rn
rm "${SEARCH_DIR_LIST}" "${SEARCH_TEMP_FILES}"
printf "Script execute end!\n"


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: