Linux linux 磁盘满了后的处理

陈子昂 · 2015年12月23日 · 最后由 renhaitao 回复于 2016年02月14日 · 1926 次阅读

2015年12月23日早上遇到的,之前因为几个类似井喷的事件才出现,本来也是打算做手动清除的。
硬盘问题会导致服务器 dump. 一般会在本地备份一份,也会在服务器上备份,服务器的最好备份在单独 1 个服务器里,不占用产品的磁盘空间.本地的就没办法了.
当然磁盘空间不足有好几个原因,目前确定是塞满了.
使用 df -hl 可以查看到服务器硬盘的情况,当然现在是已经正常了.

使用 du –bs + 路径 具体查看目录,看看恢复后的
我们是 db s4 区出了问题,然后 du –bs /data/xxx/s4/logs

如果能用软件监控是最好的 (一般运维用),如果身为测试想自己动手,可以用下面的那个脚本.供参考

#!/bin/bash
#Dsize=95 超过脚本的阀值
partition_list=(`df -h | awk 'NF>3&&NR>1{sub(/%/,"",$(NF-1));print $NF,$(NF-1)}'`)
Dsize=95
notification_email()
{
    emailuser='user@domain.com'
    emailpasswd='password'
    emailsmtp='smtp.domain.com'
    sendto='user1@domain.com'
    title='Disk Space Alarm'
    /opt/sendEmail-v1.56/sendEmail -f $emailuser -t $sendto -s $emailsmtp -u $title - 
xu $emailuser -xp $emailpasswd
}
crit_info=""
for (( i=0;i<${#partition_list[@]};i+=2 ))
do
    if [ "${partition_list[((i+1))]}" -lt "$Dsize" ];then
        echo "OK! ${partition_list[i]} used ${partition_list[((i+1))]}%"
    else        
            if [ "${partition_list[((i+1))]}" -gt "$Dsize" ];then
                crit_info=$crit_info"Warning!!! ${partition_list[i]} used  
${partition_list[((i+1))]}%\n"
            fi 
    fi
done
if [ "$crit_info" != "" ];then
    echo -e $crit_info | notification_email
fi

1)上传脚本 xxx.sh 到/opt 目录下 需要用 root 用户的权限
2)赋予可执行权限 chmod 777 xxx.sh
3)下载邮件程序 sendEmail-v1.56
4)解压文件到/opt 下面 tar xvf /opt/sendEmail-v1.56.tar.gz
5)测试脚本 磁盘填充或者修改 Dsize 变小。
6)然后设置计划,设置 1 个时间定期查询 1 次。
希望大家可以在工作中和 TesterHome 一起努力,一起进步。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

logrotate 会不会更好一些

#1 楼 @haitongz 这个赞同,的确 logrotate 更好,还可以转存储。我这个只是用 shell 代监控 = =,肯定推荐用 logrotate。

说起来 TesterHome 的日志也一直满。。。我都是手动处理下。

#3 楼 @lihuazhang 公司的是 1 天 1 次执行,有预警的,可能是时间方面设置有点问题,结果早上 7 点塞满了就挂了。本来是运维使用工具的,昨天保险起见我自己弄了 1 个、

学习了!谢谢:)

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册