为确保重大节日期间,团队负责的测试环境服务器磁盘不会占用过高,导致频繁报警。我们要求在重大节假日前对服务器磁盘占用情况进行检查。如果发现占用过高,则需人为介入,进行相应清理。

一、检查要求

查看各分区占用情况,如果达到以下任一条件,则需要人为介入判断或处理:

(1)磁盘使用率 > 90%

(2)磁盘使用 > 80% 且 剩余空间 < 30G

(3)磁盘使用 > 70% 且 剩余空间 < 50G

二、解决办法

使用 shell 脚本,统计并判断磁盘占用情况,如有异常,输出异常信息。

脚本代码如下:

#!/bin/bash

RED='\033[0;31m'
NC='\033[0m' if [[ $1 == "detail" ]]
then
df -BG
else
IS_NORMAL=1
while read line
do
if [[ ${line} == Filesystem* ]]; then
continue
fi filesystem=$(echo ${line} | awk '{print $1}')
use_rate=$(echo ${line} | awk '{print $5}' | sed 's/%//g')
avail_space=$(echo ${line} | awk '{print $4}' | sed 's/G//g')
mounted_on=$(echo ${line} | awk '{print $6}') if [[ ${use_rate} -gt 90 ]] || [[ ${use_rate} -gt 80 && ${avail_space} -lt 30 ]] || [[ ${use_rate} -gt 70 && ${avail_space} -lt 50 ]]; then
echo -e "${RED}WARN: Filesystem ${filesystem} mounted on ${mounted_on} has problem: use rate is ${use_rate}%, available space is ${avail_space}G.${NC}"
IS_NORMAL=0
fi
done < <(df -BG) if [[ ${IS_NORMAL} -eq 1 ]]; then
echo "INFO: Disk space usage is normal."
fi
fi

关键代码说明:

df -BG :命令用于报告文件系统的磁盘空间使用情况,-BG 选项表示以 G 字节为单位显示,B的含义为:use SIZE-byte blocks

建议脚本保存路径:/data/sh/general/disk_usage_check.sh

初始化脚本执行命令:mkdir -p /data/sh/general/;touch /data/sh/general/disk_usage_check.sh;chmod +x /data/sh/general/disk_usage_check.sh;vim /data/sh/general/disk_usage_check.sh

三、脚本使用方法

1)根据检查要求,判断磁盘空间占用是否存在占用过多的情况

执行脚本:/data/sh/general/disk_usage_check.sh

2)如由需要,可以进一步查看各分区磁盘占用信息

执行脚本:/data/sh/general/disk_usage_check.sh detail

使用示例,查看结果,分两种情况:

(1)检查正常

[root@localhost ~]# /data/sh/general/disk_usage_check.sh
INFO: Disk space usage is normal.

(2)检查异常,查看需要人为介入判断及处理

[root@novalocal general]# /data/sh/general/disk_usage_check.sh
WARN: Filesystem /dev/vdb mounted on /data has problem: use rate is 76%, available space is 47G. [root@novalocal general]# /data/sh/general/disk_usage_check.sh detail
Filesystem 1G-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 49G 12G 38G 23% /
devtmpfs 8G 0G 8G 0% /dev
tmpfs 8G 1G 8G 1% /dev/shm
tmpfs 8G 1G 7G 11% /run
tmpfs 8G 0G 8G 0% /sys/fs/cgroup
/dev/vdb 197G 142G 47G 76% /data
/dev/vda1 1G 1G 1G 20% /boot
tmpfs 2G 0G 2G 0% /run/user/0

处理方法可参考下一章节

四、占用定位与解决办法

1. 查看目录下各文给或文件夹大小,并降序输出

[root@f2 data]# du -sh * | sort -hr
27G tomcat
5.1G did-generator
4.1G register
2.5G turbine-web
1.4G rbmq-productor
1.1G consul
600M backup
544M test-backup
527M deploy

命令解析:

du: 是 "disk usage" 的缩写,这个命令用于估算文件或目录在磁盘上所占用的空间。

-s: 这个选项告诉 du 命令仅显示总计大小,而不列出每个子目录或文件的大小。

-h: 这个选项让 du 以易读的格式显示大小(例如,自动选择 KB、MB、GB 等单位)。

-r: 这个选项让 sort 命令以降序排列结果(默认是升序)。

2. 为什么删除被占用的文件,不能释放空间?

在 Linux 中,当你删除一个文件时,如果该文件仍被某个进程所使用(即有一个打开的文件描述符指向这个文件),那么这个文件的磁盘空间并不会被立即释放。这是因为在 Linux 中,文件的删除实际上是删除了文件名和 inode 的关联,而不是删除 inode 本身。只有当所有关联到该 inode 的文件描述符都被关闭后,该 inode 才会被删除,对应的磁盘空间才会被释放。

如果你删除了一个仍被进程使用的文件,你可以通过重启进程或者重启系统来确保所有的文件描述符都被关闭,从而释放磁盘空间。

可以使用 lsof 命令查看该类文件

(1)查看被删除但未释放的文件的命令:lsof | grep '(deleted)'

(2)查看占用空间最大的被删除但未释放的文件:lsof | grep '(deleted)' | sort -n -r -k 7,7 | head -n 10,命令解析:

-n:以数值进行排序。默认情况下,sort 命令会以字符串方式进行排序,但是 -n 选项会让 sort 命令以数值方式进行排序。

-r:以逆序方式进行排序。默认情况下,sort 命令会以升序方式进行排序,但是 -r 选项会让 sort 命令以降序方式进行排序。

-k 7,7:指定排序的字段。默认情况下,sort 命令会以整行作为排序的依据,但是 -k 选项可以让 sort 命令只以指定的字段作为排序的依据。在这里,-k 7,7 表示只以第7个字段作为排序的依据。

五、遇到问题

1. 管道模式执行时,无法更新变量值

  IS_NORMAL=1
df -BG | while read line
do
IS_NORMAL=0
done echo ${IS_NORMAL}

上述代码,最后输出 IS_NORMAL 值始终为 1,无法修改为 0,原因:

在 bash 脚本中,管道符|会创建一个子 shell 来执行管道符右侧的命令。在这个例子中,while read line 循环就在一个子 shell 中执行。因此,循环内部对变量 IS_NORMAL 的修改在子 shell 中发生,不会影响到主 shell 中的变量。

要解决这个问题,可以使用进程替代,将 while read line 循环作为主进程来执行。修改后代码如下:

  IS_NORMAL=1
while read line
do
IS_NORMAL=0
done < <(df -BG) echo ${IS_NORMAL}

六、补充说明

1. du 和 df 的区别

dudf 都是 Linux 系统中的命令,用于检查磁盘空间使用情况,但他们的使用方式和显示的信息有所不同。

(1) du 命令:du 是 "disk usage" 的缩写,这个命令的主要作用是估算文件或者目录在磁盘中占用的空间大小。它会递归地对目录进行扫描,然后将每个子目录的大小都计算出来。

   举例:du -sh /home

这个命令会显示 /home 目录的总大小。-s 参数表示只显示总计,-h 参数表示以易读的格式显示大小(例如 K,M,G)。

(2)df 命令:df 是 "disk filesystem" 的缩写,这个命令的主要作用是显示磁盘的使用情况。它会显示所有已挂载的文件系统的磁盘空间使用情况,包括总空间、已使用的空间、剩余的空间以及使用的百分比。

   举例:df -h

这个命令会以易读的格式显示所有已挂载的文件系统的磁盘空间使用情况。-h 参数表示以易读的格式显示大小(例如 K,M,G)。

总的来说,dudf 的主要区别在于,du 是用来查看文件或目录的大小,而 df 是用来查看磁盘的使用情况。

Linux服务器磁盘空间占用情况分析与清理指南的更多相关文章

  1. linux 查看磁盘空间占用情况

    工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况.排查过程如下: 一.首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满. 二.进入根目录,因为最近常用的 ...

  2. Linux:查看磁盘空间占用情况

    Linux:查看磁盘空间占用情况 工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况.排查过程如下: 一.首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满 ...

  3. 关于Linux服务器磁盘空间占满问题的解决方法

    下面给大家分享一篇关于Linux服务器磁盘占满问题解决方法(/dev/sda3 满了),需要的的朋友参考下吧   下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了), ...

  4. (转)Linux服务器磁盘空间占满问题

    转自:https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰 ...

  5. Linux服务器磁盘空间占满问题

    下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助.   今天下班某电商技术部leader发现个问题,说他们服务器硬盘满了.把日志文件 ...

  6. 解决Linux服务器磁盘空间不足的问题

    在linux服务器执行程序时报错: awk: write failure (No space left on device)awk: close failed on file /dev/stdout ...

  7. 查看mac中磁盘空间占用情况

    今天发现磁盘空间不够了,首先要找到那些文件夹占用了磁盘空间. du命令很好使 du -c -d 1 -m | sort -n -c 显示当前文件夹总计占用空间 -d 1 层级为1,即只显示当前目录下一 ...

  8. oracle for linux服务器磁盘空间不足,通过过期的文件释放磁盘空间

    --2013-09-16截取的数据-- 使用df-h命令查看系统磁盘空间 [root@erpdbs PROD]# df -h Filesystem Size Used Avail Use% Mount ...

  9. 检查linux的磁盘空间占用

    先初步看看哪个目录占用最大$ df -h 然后细看遍历某目录的占用情况:$ sudo du -a /data  | sort -nr | less(单位是KB)

  10. 全面了解 Linux 服务器 - 3. 查看 Linux 服务器的硬盘使用情况

    1)查看硬盘及分区信息 liuqian@ubuntu:~# fdisk -l ...... ...... Disk /dev/sda: 100 GiB, 107374182400 bytes, 209 ...

随机推荐

  1. Github关于PAT(Personal Access Token)

    Github关于PAT(Personal Access Token) 创建个人访问令牌 您应该通过命令行或 API 创建个人访问令牌来代替密码. 注意: 如果您在命令行上使用 GitHub CLI 向 ...

  2. jfinal实验体会

    这次实验我使用的是vue前端+jfinal后端,出现了非常多的问题,因此也花费了我不少时间.在一开始啃jfinal的文档的时候,我感觉jfinal是一个和springboot非常类似的框架,但是使用中 ...

  3. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-61 - 隐藏元素定位与操作

    1.简介 对于前端隐藏元素,一直是自动化定位元素的隐形杀手,让人防不胜防.脚本跑到隐藏元素时位置时报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,这一篇只为交流隐藏元素自动化定位 ...

  4. 【ElasticSearch】02 查询操作

    准备样本: Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询 查询条件还适用于删除操作   创建索引: # PUT http://127.0.0.1:9200/st ...

  5. 解决Python使用matplotlib绘图时出现的中文乱码问题

    原文地址: https://blog.csdn.net/qq_33254766/article/details/120304721 全文略,详细见原文. 解决方法: # 设置字体的属性 # plt.r ...

  6. 中国AI领域超越美国的拐点在哪 —— 国产AI芯片量产化的成本接近于美国成熟AI芯片的成本

    作为AI领域的一个大头兵,本是没有资格去谈论high level层面的东西的,只不过总有些忍不得说的事情. 今天这里就说下个人对中国AI发展的一个观点或是预测,在我看来中国AI领域超越美国的拐点就在于 ...

  7. python的logging 模块的propagate设置

    代码: import logging import sys LOG_FORMAT = '[%(asctime)s PID:%(process)d %(levelname)s %(filename)s ...

  8. Linux统计文件目录下文件的数目命令

    Linux下有三个命令:ls.grep.wc.通过这三个命令的组合可以统计目录下文件及文件夹的个数. 1.ls -l | grep "^-" | wc -l:统计当前目录下文件的个 ...

  9. Orleans初体验

    Orleans: 是一个跨平台框架,用于构建可靠且可缩放的分散式应用. 分布式应用定义为跨多个进程的应用,通常使用对等通信来超越硬件边界. 从单个本地服务器扩展到了云中数千个分布式.高度可用的应用. ...

  10. Pintia 天梯地图 dijkstra进阶

    7-14 天梯地图 - SMU 2024 spring 天梯赛3(补题) (pintia.cn) dijkstra进阶做法,包含路径记录,以及按权重统计路径条件等; 不过最开始我一直将优先队列开的最大 ...