伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux磁盤空間告警的常見原因和診斷方法

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-04-08 14:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux磁盤空間告警?三步快速定位

背景與目的

磁盤空間告警是運維工作中最常見的告警類型之一。當(dāng)磁盤空間耗盡時,應(yīng)用程序無法寫入日志、數(shù)據(jù)庫無法正常提交、容器無法創(chuàng)建新鏡像,甚至系統(tǒng)日志寫入失敗會導(dǎo)致難以診斷的連鎖故障。本文從實際運維經(jīng)驗出發(fā),提供一套完整的磁盤空間問題定位和解決流程。

前置知識:本文假設(shè)你已經(jīng)掌握Linux基本命令和文件目錄操作。了解常見的Linux發(fā)行版(CentOS/RHEL/Rocky/Ubuntu等)。

環(huán)境說明:本文示例基于Rocky Linux 9.4(等同于RHEL 9.4),文件系統(tǒng)為XFS,工具版本:df(GNU coreutils 9.1)、du(GNU findutils 4.9)、ncdu(1.17)。

1. 磁盤告警的常見原因

1.1 日志文件暴漲

這是最常見的磁盤空間告警原因。應(yīng)用程序日志、Web訪問日志、數(shù)據(jù)庫慢查詢?nèi)罩镜龋诟卟l(fā)或異常情況下可能快速增長。

典型場景

應(yīng)用程序debug模式未關(guān)閉,日志量暴增10倍

錯誤循環(huán)導(dǎo)致重復(fù)寫日志

日志輪轉(zhuǎn)配置缺失或失效

大流量訪問產(chǎn)生海量訪問日志

表現(xiàn)特征

/var/log/messages 單文件超過GB級別
/var/log/nginx/access.log 單文件超過10GB
/var/lib/mysql/slow-query.log 持續(xù)增長

1.2 臨時文件和緩存未清理

系統(tǒng)運行過程中產(chǎn)生的臨時文件和緩存,如果未及時清理會占用大量空間。

典型場景

/tmp 目錄積累大量臨時文件

包管理器緩存(yum/dnf/apt)未清理

編譯產(chǎn)生的中間文件未刪除

容器鏡像/構(gòu)建緩存未清理

表現(xiàn)特征

/var/cache 目錄占用數(shù)十GB
/tmp 下有大量一個月前的文件
docker system df 顯示異常大的空間占用

1.3 數(shù)據(jù)文件自然增長

數(shù)據(jù)庫、KV存儲、日志聚合系統(tǒng)等,數(shù)據(jù)會隨時間自然增長。

典型場景

MySQL InnoDB表空間持續(xù)增長

PostgreSQL數(shù)據(jù)目錄膨脹

Elasticsearch索引無限增長

MongoDB數(shù)據(jù)文件未啟用自動壓縮

1.4 隱藏的大文件

某些場景下,大文件可能被刪除但進程仍持有文件句柄,導(dǎo)致磁盤空間無法釋放。

典型場景

日志文件被刪除但進程未重啟

臨時文件創(chuàng)建后刪除但進程仍寫入

鏡像文件傳輸中斷產(chǎn)生空洞文件

表現(xiàn)特征

df顯示已滿,但du顯示使用量很少
文件明明刪除了但空間不釋放
重啟進程后空間釋放

1.5 inode耗盡

雖然少見,但inode耗盡也會導(dǎo)致"磁盤滿"的問題。inode用于存儲文件元數(shù)據(jù),每個文件至少占用一個inode。

典型場景

小文件過多(大量緩存文件、郵件隊列)

文件系統(tǒng)創(chuàng)建時inode數(shù)量配置不足

2. 第一步:快速定位

當(dāng)收到磁盤告警時,第一步是快速判斷是哪個分區(qū)、哪個掛載點出現(xiàn)了問題。

2.1 df命令基礎(chǔ)用法

df是磁盤空間查看的基礎(chǔ)命令,必須掌握。

# 查看文件系統(tǒng)使用情況(人類可讀格式)
$ df -h

Filesystem   Size Used Avail Use% Mounted on
devtmpfs     16G   0  16G  0% /dev
tmpfs      16G   0  16G  0% /dev/shm
tmpfs      16G 1.2G  15G  8% /run
/dev/sda1    100G  45G  55G 45% /
/dev/sda2    200G  180G  20G 90% /data
/dev/sdb1    500G  450G  50G 90% /var/lib/mysql

# 查看inode使用情況
$ df -i

Filesystem   Inode IUsed IFree IUse% Mounted on
/dev/sda1   524288 123456 400832  23% /
/dev/sda2   1048576 523456 525120  50% /data

# 顯示文件系統(tǒng)類型
$ df -hT

Filesystem   Type   Size Used Avail Use% Mounted on
/dev/sda1   xfs    100G  45G  55G 45% /
/dev/sda2   ext4   200G  180G  20G 90% /data

# 排除偽文件系統(tǒng),只看真實磁盤
$ df -h --output=source,size,used,avail,pcent,target 
 | grep -E'^/dev|^/mnt|^/vol'

# 查找使用率超過80%的分區(qū)
$ df -h | awk'NR>1 && $5+0 > 80 {print}'
/dev/sda2   200G  180G  20G 90% /data

2.2 快速定位腳本

#!/bin/bash
# script: quick_disk_check.sh
# 用途:收到告警后30秒內(nèi)定位問題

echo"=== 磁盤空間快速檢查 ==="
echo"檢查時間:$(date)"
echo""

# 1. 找出使用率超過80%的分區(qū)
echo"【1】使用率超過80%的分區(qū):"
df -h | awk'NR>1 && $5+0 > 80 {
  printf " %s: %s/%s (使用率%s)
", $1, $3, $2, $5
}'
echo""

# 2. 如果是/分區(qū)告警,檢查是否boot分區(qū)問題
echo"【2】各分區(qū)使用率概覽:"
df -h | awk'NR>1 {
  printf " %-30s %6s 使用率: %s
", $6, $2, $5
}'
echo""

# 3. 檢查inode
echo"【3】Inode使用情況:"
df -i | awk'NR>1 && $5+0 > 80 {
  printf " 警告:%s inode使用率%s
", $6, $5
}'
echo""

# 4. 檢查最近磁盤增長趨勢(需要歷史數(shù)據(jù)支持)
echo"【4】近期活躍目錄(按修改時間):"
find / -maxdepth 3 -typed -mtime -1 2>/dev/null | head -20
echo""

echo"=== 快速檢查完成 ==="

2.3 du命令基礎(chǔ)用法

du用于查看目錄或文件的磁盤使用量,是精確定位的核心工具。

# 查看當(dāng)前目錄各子目錄大小
$ du -sh *

# 查看指定目錄大小(人類可讀)
$ du -sh /var/log

# 查看子目錄大小并排序(人類可讀)
$ du -h /var | sort -rh | head -20

# 深度2層子目錄大小
$ du -h --max-depth=2 /var

# 只顯示超過100M的目錄
$ du -h --threshold=100M /var

# 顯示磁盤使用總量(不顯示子目錄)
$ du -sh /var/log

# 排除某些掛載點
$ du -sh --exclude=/proc --exclude=/sys /

# du結(jié)果導(dǎo)出
$ du -h / 2>/dev/null | sort -rh > /tmp/du_result.txt

2.4 ncdu交互式工具

ncdu是du的增強版,提供交互式界面,特別適合快速定位大目錄。

# 安裝ncdu
dnf install ncdu -y # CentOS/RHEL/Rocky
apt install ncdu -y # Ubuntu/Debian

# 使用ncdu分析目錄
ncdu -x /  # -x 不跨文件系統(tǒng),跟隨掛載點
ncdu -q / # q退出模式,適合腳本調(diào)用

# 常用快捷鍵(在ncdu界面中)
# 上下箭頭:選擇目錄
# 回車:進入目錄
# d:刪除選中文件/目錄
# n:按名稱排序
# s:按大小排序
# t:顯示目錄優(yōu)先
# g:顯示百分比
# q:退出

2.5 快速定位大文件

#!/bin/bash
# script: find_large_files.sh
# 用途:快速找到系統(tǒng)中的大文件

echo"=== 大文件掃描開始 ==="
echo"掃描時間:$(date)"
echo""

# 1. 查找超過1GB的文件
echo"【1】超過1GB的文件:"
find / -typef -size +1G -execls -lh {} ; 2>/dev/null | 
  awk'{print $5, $9}'

echo""

# 2. 查找超過100MB的文件(限制數(shù)量)
echo"【2】超過100MB的文件(前50個):"
find / -typef -size +100M 2>/dev/null | 
  head -50 | xargs -I{} ls -lh {} 2>/dev/null | 
  awk'{print $5, $9}'

echo""

# 3. 查找最大的10個目錄
echo"【3】系統(tǒng)中最大的10個目錄:"
du -Sh / 2>/dev/null | sort -rh | head -10

echo""

# 4. 檢查特定目錄
fordirin/var /home /tmp /opt /usr;do
 if[ -d"$dir"];then
   echo"【4.1】${dir}目錄大小:$(du -sh $dir 2>/dev/null | cut -f1)"
 fi
done

3. 第二步:深度分析

定位到問題分區(qū)后,第二步是深度分析,找出占用空間的具體文件和目錄。

3.1 分析日志文件

#!/bin/bash
# script: analyze_logs.sh
# 用途:分析/var/log目錄,定位占用空間大的日志

echo"=== 日志目錄分析 ==="
echo""

# 列出/var/log下所有目錄和文件大小
echo"【1】/var/log 各子目錄大小:"
du -sh /var/log/* 2>/dev/null | sort -rh | head -15

echo""

# 找出超過100MB的日志文件
echo"【2】超過100MB的日志文件:"
find /var/log-typef -size +100M 2>/dev/null |whilereadf;do
  size=$(ls -lh"$f"| awk'{print $5}')
  modified=$(stat-c %y"$f"| cut -d' '-f1)
 echo" $size$modified$f"
done

echo""

# 統(tǒng)計日志文件增長趨勢(需要對比)
echo"【3】日志文件詳情:"
find /var/log-typef -execls -lh {} ; 2>/dev/null | 
  awk'{print $5, $6, $7, $9}'| sort -rh | head -20

echo""

# 檢查日志輪轉(zhuǎn)配置
echo"【4】日志輪轉(zhuǎn)配置狀態(tài):"
forlogfilein/var/log/messages /var/log/secure /var/log/nginx/*.log;do
 if[ -f"$logfile"];then
   echo" $logfile:"
    ls -lh"${logfile}"* 2>/dev/null | head -5
   echo""
 fi
done

3.2 分析數(shù)據(jù)庫數(shù)據(jù)目錄

#!/bin/bash
# script: analyze_db_space.sh
# 用途:分析數(shù)據(jù)庫目錄占用情況

echo"=== 數(shù)據(jù)庫空間分析 ==="
echo""

# MySQL數(shù)據(jù)目錄
MYSQL_DATA="/var/lib/mysql"
if[ -d"$MYSQL_DATA"];then
 echo"【1】MySQL數(shù)據(jù)目錄:${MYSQL_DATA}"
 echo" 總大小:$(du -sh $MYSQL_DATA 2>/dev/null | cut -f1)"

 # 按表大小排序
 echo" 按表大小排序(前10):"
  find"$MYSQL_DATA"-name"*.ibd"-execdu -h {} ; 2>/dev/null | 
    sort -rh | head -10 |whilereadsize file;do
     echo"  $size$(basename $file)"
   done

 # 檢查InnoDB表空間
 echo" InnoDB表空間文件:"
  ls -lh"$MYSQL_DATA"/ibdata* 2>/dev/null
 echo""
fi

# PostgreSQL數(shù)據(jù)目錄
POSTGRES_DATA="/var/lib/pgsql/data"
if[ -d"$POSTGRES_DATA"];then
 echo"【2】PostgreSQL數(shù)據(jù)目錄:${POSTGRES_DATA}"
 echo" 總大小:$(du -sh $POSTGRES_DATA 2>/dev/null | cut -f1)"
 echo" Base目錄內(nèi)容:"
  du -sh"$POSTGRES_DATA/base"2>/dev/null
 echo" WAL目錄:"
  du -sh"$POSTGRES_DATA/pg_wal"2>/dev/null
 echo""
fi

# MongoDB數(shù)據(jù)目錄
MONGO_DATA="/var/lib/mongodb"
if[ -d"$MONGO_DATA"];then
 echo"【3】MongoDB數(shù)據(jù)目錄:${MONGO_DATA}"
 echo" 總大小:$(du -sh $MONGO_DATA 2>/dev/null | cut -f1)"
  ls -lh"$MONGO_DATA"/*.wt 2>/dev/null | head -10
 echo""
fi

3.3 分析臨時文件和緩存

#!/bin/bash
# script: analyze_temp_cache.sh
# 用途:分析臨時文件和緩存占用

echo"=== 臨時文件和緩存分析 ==="
echo""

# /tmp目錄
echo"【1】/tmp 目錄分析:"
tmp_count=$(find /tmp -typef 2>/dev/null | wc -l)
tmp_size=$(du -sh /tmp 2>/dev/null | cut -f1)
echo" 文件數(shù)量:$tmp_count"
echo" 總大小:$tmp_size"
echo" /tmp 前10大文件:"
find /tmp -typef -execdu -h {} ; 2>/dev/null | 
  sort -rh | head -10 |whilereadsize file;do
    age=$(stat-c %y"$file"2>/dev/null | cut -d' '-f1)
   echo"  $size$age$(basename "$file")"
 done
echo""

# /var/tmp目錄
if[ -d /var/tmp ];then
 echo"【2】/var/tmp 目錄分析:"
 echo" 總大小:$(du -sh /var/tmp 2>/dev/null | cut -f1)"
 echo" 前10大文件:"
  find /var/tmp -typef -execdu -h {} ; 2>/dev/null | 
    sort -rh | head -10
 echo""
fi

# 包管理器緩存
echo"【3】包管理器緩存:"

# DNF/YUM緩存
if[ -d /var/cache/dnf ];then
 echo" DNF緩存大小:$(du -sh /var/cache/dnf 2>/dev/null | cut -f1)"
 echo" DNF緩存包數(shù)量:$(find /var/cache/dnf -name "*.rpm" 2>/dev/null | wc -l)"
fi

# APT緩存
if[ -d /var/cache/apt ];then
 echo" APT緩存大小:$(du -sh /var/cache/apt 2>/dev/null | cut -f1)"
fi

# Yarn緩存
if[ -d /home/*/.cache/yarn ];then
 echo" Yarn緩存總大小:$(du -sh /home/*/.cache/yarn 2>/dev/null | cut -f1)"
fi

# npm緩存
if[ -d /home/*/.npm ];then
 echo" npm緩存總大小:$(du -sh /home/*/.npm 2>/dev/null | cut -f1)"
fi
echo""

# Docker相關(guān)
ifcommand-v docker &> /dev/null;then
 echo"【4】Docker空間占用:"
  docker system df 2>/dev/null ||echo" Docker命令執(zhí)行失敗"
 echo""
fi

# 舊內(nèi)核
echo"【5】舊內(nèi)核占用:"
if[ -d /boot ];then
 echo" /boot總大小:$(du -sh /boot | cut -f1)"
 echo" 已安裝內(nèi)核版本:"
  ls /boot/vmlinuz-* 2>/dev/null | sed's/.*vmlinuz-//'|whilereadver;do
    size=$(ls -lh /boot/vmlinuz-$ver2>/dev/null | awk'{print $5}')
   echo"  $ver($size)"
 done
fi

3.4 分析隱藏的大文件

#!/bin/bash
# script: find_deleted_but_open.sh
# 用途:查找已刪除但仍被進程占用的文件

echo"=== 已刪除但未釋放空間的文件 ==="
echo""

# 遍歷所有進程,查找已刪除但仍打開的文件
forpidin$(ls /proc | grep -E'^[0-9]+$');do
 if[ -d"/proc/$pid/fd"];then
   # 查找符號鏈接指向(deleted)的文件描述符
   forfdin/proc/$pid/fd/*;do
      target=$(readlink"$fd"2>/dev/null)
     if[["$target"== *"(deleted)"* ]];then
        size=$(ls -lh"$fd"2>/dev/null | awk'{print $5}')
        cmd=$(cat /proc/$pid/cmdline 2>/dev/null | tr'?'' '| head -c 50)
       echo"PID:$pid| CMD:$cmd"
       echo" FD:$fd->$target| Size:$size"
     fi
   done
 fi
done| head -50

echo""
echo"說明:上述文件已刪除但進程仍在使用,重啟相關(guān)進程可釋放空間"

3.5 分析容器和鏡像

#!/bin/bash
# script: analyze_container_space.sh
# 用途:分析容器和鏡像占用的磁盤空間

if!command-v docker &> /dev/null;then
 echo"Docker未安裝或未運行"
 exit0
fi

echo"=== Docker空間占用分析 ==="
echo""

# 總體空間占用
echo"【1】Docker總體空間:"
docker system df

echo""

# 詳細(xì)分類
echo"【2】空間占用明細(xì):"
docker system df -v 2>/dev/null | head -50

echo""

# 懸空鏡像( dangling)
echo"【3】懸空鏡像(無標(biāo)簽):"
dangling=$(docker images -f"dangling=true"-q)
if[ -n"$dangling"];then
 echo" 懸空鏡像數(shù)量:$(echo $dangling | wc -w)"
  docker images -f"dangling=true"
else
 echo" 無懸空鏡像"
fi

echo""

# 停止的容器
echo"【4】停止的容器:"
stopped=$(docker ps -a -f status=exited -q)
if[ -n"$stopped"];then
 echo" 停止容器數(shù)量:$(echo $stopped | wc -w)"
  docker ps -a -f status=exited --format"{{.ID}}	{{.Names}}	{{.Status}}"
else
 echo" 無停止的容器"
fi

echo""

# 各鏡像大小
echo"【5】鏡像大小排序(前10):"
docker images --format"{{.Repository}}:{{.Tag}}	{{.Size}}"| 
  sort -t$'	'-k2 -rh | head -10

echo""
echo"清理命令:"
echo" docker system prune -a   # 刪除所有未使用的鏡像和容器"
echo" docker container prune   # 刪除停止的容器"
echo" docker image prune     # 刪除懸空鏡像"
echo" docker volume prune     # 刪除未使用的卷"

4. 第三步:清理與預(yù)警

定位問題后,第三步是執(zhí)行清理操作并建立預(yù)警機制。

4.1 日志清理

手動清理日志

#!/bin/bash
# script: clean_old_logs.sh
# 用途:清理超過指定天數(shù)的日志文件

MAX_DAYS=30
LOG_DIRS="/var/log /opt/*/logs"

echo"=== 日志清理腳本 ==="
echo"清理超過${MAX_DAYS}天的日志..."
echo""

count=0
total_size=0

forlogdirin$LOG_DIRS;do
 if[ -d"$logdir"];then
   # 查找符合條件的日志文件
    find"$logdir"-typef -name"*.log"-mtime +$MAX_DAYS2>/dev/null |whilereadlogfile;do
      size=$(du -k"$logfile"| cut -f1)
      total_size=$((total_size + size))
      rm -f"$logfile"
      count=$((count + 1))
     echo" Deleted:$logfile(${size}KB)"
   done

   # 清理gz壓縮包(保留180天)
    find"$logdir"-typef -name"*.gz"-mtime +180 2>/dev/null |whilereadgzfile;do
      size=$(du -k"$gzfile"| cut -f1)
      total_size=$((total_size + size))
      rm -f"$gzfile"
      count=$((count + 1))
     echo" Deleted:$gzfile(${size}KB)"
   done
 fi
done

echo""
echo"清理完成:刪除${count}個文件,釋放約$((total_size/1024))MB"

清空當(dāng)前日志文件(保留文件)

# 方法1:使用truncate
truncate -s 0 /var/log/messages

# 方法2:使用重定向
> /var/log/messages

# 方法3:使用dd(對于需要保留文件句柄的場景)
ddif=/dev/null of=/var/log/messages

# 驗證
ls -lh /var/log/messages

4.2 配置日志輪轉(zhuǎn)

# /etc/logrotate.d/nginx 示例配置
/var/log/nginx/*.log{
  daily          # 每天輪轉(zhuǎn)
  missingok       # 忽略文件不存在錯誤
  rotate 14       # 保留14個輪轉(zhuǎn)文件
  compress        # 壓縮舊日志
  delaycompress     # 延遲壓縮(保留最近一個不壓縮)
  notifempty      # 空日志不輪轉(zhuǎn)
  create 0640 nginx adm # 創(chuàng)建新文件權(quán)限
  sharedscripts     # 腳本只執(zhí)行一次
  postrotate
   if[ -f /var/run/nginx.pid ];then
     kill-USR1 `cat /var/run/nginx.pid`
   fi
  endscript
}

# /etc/logrotate.d/mysql 示例配置
/var/log/mysql/slow.log {
  daily
  rotate 7
  compress
  delaycompress
  missingok
  notifempty
  create 0600 mysql mysql
}

/var/log/mysql/error.log {
  daily
  rotate 14
  compress
  delaycompress
  missingok
  notifempty
  create 0600 mysql mysql
}

4.3 清理臨時文件

#!/bin/bash
# script: clean_temp_files.sh
# 用途:清理臨時文件和緩存

echo"=== 臨時文件清理 ==="
echo"開始時間:$(date)"
echo""

# 清理/tmp下超過7天的文件
echo"【1】清理/tmp下7天前的文件:"
tmp_deleted=$(find /tmp -typef -atime +7 2>/dev/null | wc -l)
find /tmp -typef -atime +7 -delete 2>/dev/null
echo" 刪除文件數(shù):$tmp_deleted"

# 清理/var/tmp下超過30天的文件
echo"【2】清理/var/tmp下30天前的文件:"
vartmp_deleted=$(find /var/tmp -typef -atime +30 2>/dev/null | wc -l)
find /var/tmp -typef -atime +30 -delete 2>/dev/null
echo" 刪除文件數(shù):$vartmp_deleted"

# 清理dnf緩存
echo"【3】清理DNF緩存:"
dnf clean all
echo" DNF緩存已清理"

# 清理舊內(nèi)核
echo"【4】清理舊內(nèi)核:"
ifcommand-v yum &> /dev/null;then
 # 列出已安裝的內(nèi)核
  current_kernel=$(uname -r)
  installed_kernels=$(rpm -q kernel | wc -l)

 if["$installed_kernels"-gt 1 ];then
   # 保留當(dāng)前內(nèi)核和最新的一個舊內(nèi)核
    rpm -q kernel | tail -n +2 | head -n -1 |whilereadkernel;do
     echo" 移除內(nèi)核:$kernel"
      dnf remove -y"$kernel"2>/dev/null ||true
   done
 fi
fi

# 清理孤兒包
echo"【5】清理孤兒包:"
dnf autoremove -y 2>/dev/null ||true

echo""
echo"清理完成:$(date)"
echo"當(dāng)前磁盤使用情況:"
df -h /

4.4 清理Docker空間

#!/bin/bash
# script: clean_docker_space.sh
# 用途:清理Docker占用的磁盤空間

echo"=== Docker空間清理 ==="
echo""

# 查看當(dāng)前占用
echo"【1】清理前Docker空間:"
docker system df

echo""

# 1. 刪除停止的容器
echo"【2】刪除停止的容器:"
stopped_count=$(docker ps -a -f status=exited -q | wc -l)
if["$stopped_count"-gt 0 ];then
  docker container prune -f
 echo" 已刪除$stopped_count個停止的容器"
else
 echo" 無停止的容器"
fi

echo""

# 2. 刪除懸空鏡像
echo"【3】刪除懸空鏡像:"
dangling_count=$(docker images -f"dangling=true"-q | wc -l)
if["$dangling_count"-gt 0 ];then
  docker image prune -f
 echo" 已刪除$dangling_count個懸空鏡像"
else
 echo" 無懸空鏡像"
fi

echo""

# 3. 刪除未使用的卷
echo"【4】刪除未使用的卷:"
unused_volumes=$(docker volume ls -f dangling=true-q | wc -l)
if["$unused_volumes"-gt 0 ];then
  docker volume prune -f
 echo" 已刪除$unused_volumes個未使用的卷"
else
 echo" 無未使用的卷"
fi

echo""

# 4. 刪除build緩存(可選,會刪除所有build緩存)
read-p"是否刪除所有build緩存?(y/N): "confirm
if["$confirm"="y"];then
  docker builder prune -f
 echo" 已刪除build緩存"
fi

echo""

# 5. 全面清理(可選)
read-p"是否執(zhí)行全面清理(刪除所有未使用的對象)?(y/N): "full_clean
if["$full_clean"="y"];then
  docker system prune -a -f --volumes
 echo" 已執(zhí)行全面清理"
fi

echo""
echo"【5】清理后Docker空間:"
docker system df

4.5 建立磁盤監(jiān)控預(yù)警

#!/bin/bash
# script: disk_alert_monitor.sh
# 用途:監(jiān)控磁盤使用率,超過閾值時發(fā)送告警

# 配置
WARNING_THRESHOLD=80
CRITICAL_THRESHOLD=90
ALERT_LOG="/var/log/disk_alert.log"
EMAIL_TO="ops@example.com"

# 獲取磁盤使用信息
check_disk() {
 localmount_point="$1"
 localusage=$(df"$mount_point"| awk'NR==2 {print $5}'| sed's/%//')
 localdevice=$(df"$mount_point"| awk'NR==2 {print $1}')
 localsize=$(df -h"$mount_point"| awk'NR==2 {print $2}')
 localused=$(df -h"$mount_point"| awk'NR==2 {print $3}')
 localavail=$(df -h"$mount_point"| awk'NR==2 {print $4}')

 echo"$usage|$device|$size|$used|$avail"
}

# 發(fā)送告警
send_alert() {
 locallevel="$1"
 localmessage="$2"

 echo"[$(date '+%Y-%m-%d %H:%M:%S')] [$level]$message">>"$ALERT_LOG"

 # 郵件告警(需要mailx)
 ifcommand-v mailx &> /dev/null;then
   echo"$message"| mailx -s"[$level] Disk Alert on$(hostname)""$EMAIL_TO"
 fi
}

# 主監(jiān)控邏輯
echo"=== 磁盤監(jiān)控檢查 ==="
echo"檢查時間:$(date)"
echo""

CHECK_MOUNTS="/ /data /var /home /boot"

formount_pointin$CHECK_MOUNTS;do
 if[ -d"$mount_point"];then
    info=$(check_disk"$mount_point")
    usage=$(echo"$info"| cut -d'|'-f1)
    device=$(echo"$info"| cut -d'|'-f2)
    size=$(echo"$info"| cut -d'|'-f3)
    used=$(echo"$info"| cut -d'|'-f4)
    avail=$(echo"$info"| cut -d'|'-f5)

   echo"$mount_point($device):$usage% used ($used/$size, 可用$avail)"

   if["$usage"-ge"$CRITICAL_THRESHOLD"];then
      send_alert"CRITICAL""磁盤使用率危急!${mount_point}使用率${usage}%,設(shè)備${device},可用空間${avail}"
   elif["$usage"-ge"$WARNING_THRESHOLD"];then
      send_alert"WARNING""磁盤使用率告警!${mount_point}使用率${usage}%,設(shè)備${device},可用空間${avail}"
   fi
 fi
done

4.6 自動化清理腳本

#!/bin/bash
# script: automated_disk_cleanup.sh
# 用途:自動化磁盤空間維護腳本,建議通過cron定期執(zhí)行

# 配置
MAX_LOG_AGE_DAYS=30
MAX_TMP_AGE_DAYS=7
DOCKER_PRUNE_WEEKLY=true
LOG_DIR="/var/log/cleanup"

# 創(chuàng)建日志目錄
mkdir -p"$LOG_DIR"

log() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')]$1"| tee -a"$LOG_DIR/cleanup_$(date +%Y%m%d).log"
}

# 主流程
log"========== 開始磁盤清理 =========="

# 1. 清理舊日志
log"步驟1:清理${MAX_LOG_AGE_DAYS}天前的日志文件"
find /var/log-typef -name"*.log"-mtime +$MAX_LOG_AGE_DAYS-delete 2>/dev/null
find /var/log-typef -name"*.gz"-mtime +180 -delete 2>/dev/null
log" 日志清理完成"

# 2. 清理臨時文件
log"步驟2:清理${MAX_TMP_AGE_DAYS}天未訪問的臨時文件"
find /tmp -typef -atime +$MAX_TMP_AGE_DAYS-delete 2>/dev/null
find /var/tmp -typef -atime +$MAX_TMP_AGE_DAYS-delete 2>/dev/null
log" 臨時文件清理完成"

# 3. 清理包管理器緩存
log"步驟3:清理包管理器緩存"
dnf clean all 2>/dev/null
log" 包管理器緩存清理完成"

# 4. 清理舊內(nèi)核(僅保留最新2個)
log"步驟4:清理舊內(nèi)核"
current_kernel=$(uname -r)
kernel_count=0
forkin$(rpm -q kernel --last | sed's/kernel-//'| cut -d' '-f1);do
 if["$kernel_count"-gt 1 ];then
   if["$k"!="$current_kernel"];then
      dnf remove -y"kernel-$k"2>/dev/null &&log" 移除內(nèi)核:$k"||true
   fi
 fi
  kernel_count=$((kernel_count + 1))
done

# 5. Docker清理(每周執(zhí)行)
day_of_week=$(date +%u)
if["$DOCKER_PRUNE_WEEKLY"=true] && ["$day_of_week"= 1 ];then
 log"步驟5:Docker空間清理(周一執(zhí)行)"
  docker system prune -f --filter"until=168h"2>/dev/null ||true
 log" Docker清理完成"
fi

# 6. 清理舊日志輪轉(zhuǎn)文件
log"步驟6:清理過期的logrotate文件"
find /var/lib/logrotate -typef -mtime +60 -delete 2>/dev/null

# 7. 清理舊tmp文件(系統(tǒng))
log"步驟7:清理系統(tǒng)tmp目錄"
find /var/tmp -typef -mtime +30 -delete 2>/dev/null

log"========== 磁盤清理完成 =========="
log"清理后磁盤使用情況:"
df -h / | tee -a"$LOG_DIR/cleanup_$(date +%Y%m%d).log"

5. inode滿了怎么辦

5.1 排查inode使用

#!/bin/bash
# script: check_inode_usage.sh
# 用途:檢查inode使用情況

echo"=== Inode使用情況 ==="
echo""

# 查看各分區(qū)inode使用
echo"【1】各分區(qū)inode使用率:"
df -i

echo""

# 查找inode占用最多的目錄
echo"【2】/var目錄inode分布:"
find /var -typed 2>/dev/null |whilereaddir;do
  count=$(find"$dir"-maxdepth 1 -typef 2>/dev/null | wc -l)
 echo" $count$dir"
done| sort -rn | head -20

echo""

# 統(tǒng)計各類型文件數(shù)量
echo"【3】文件類型統(tǒng)計:"
find /var -typef 2>/dev/null | sed's/.*.//'| sort | uniq -c | sort -rn | head -20

5.2 清理inode占用

#!/bin/bash
# script: free_inodes.sh
# 用途:釋放inode占用的空間

echo"=== 釋放inode空間 ==="
echo""

# 1. 清理/var/spool下的舊郵件
echo"【1】清理郵件隊列:"
mail_count=$(find /var/spool/mail -typef 2>/dev/null | wc -l)
echo" 郵件文件數(shù):$mail_count"
find /var/spool/mail -typef -mtime +30 -delete 2>/dev/null
echo" 已清理30天前的郵件"

# 2. 清理臨時socket文件
echo"【2】清理臨時socket文件:"
socket_count=$(find /tmp -types 2>/dev/null | wc -l)
echo" socket文件數(shù):$socket_count"
find /tmp -types -mtime +1 -delete 2>/dev/null

# 3. 清理空目錄
echo"【3】清理空目錄:"
find /var -typed -empty -delete 2>/dev/null

# 4. 清理小的tmp文件
echo"【4】清理小的臨時文件:"
find /tmp -typef -size -1k -mtime +1 -delete 2>/dev/null

# 5. 清理日志目錄中的old文件
echo"【5】清理日志目錄中的歸檔文件:"
find /var/log-typef -name"*.old"-mtime +7 -delete 2>/dev/null
find /var/log-typef -name"*.bak"-mtime +7 -delete 2>/dev/null

echo""
echo"清理完成。當(dāng)前inode使用:"
df -i /

6. LVM邏輯卷擴展

當(dāng)磁盤空間真的不夠用時,需要擴展邏輯卷。

6.1 查看LVM狀態(tài)

# 查看PV(物理卷)
pvs

# 查看VG(卷組)
vgs

# 查看LV(邏輯卷)
lvs

# 詳細(xì)查看
pvdisplay
vgdisplay
lvdisplay

6.2 擴展邏輯卷

#!/bin/bash
# script: extend_lvm.sh
# 用途:擴展LVM邏輯卷

# 配置:要擴展的LV和要擴展的大小
VG_NAME="vg00"
LV_NAME="lv_data"
EXTEND_SIZE="+50G"

echo"=== LVM邏輯卷擴展 ==="
echo""

# 1. 查看當(dāng)前狀態(tài)
echo"【1】當(dāng)前狀態(tài):"
lvs
echo""
lvdisplay /dev/${VG_NAME}/${LV_NAME}
echo""

# 2. 檢查VG剩余空間
echo"【2】卷組剩余空間:"
vgs
vgextend --help| head -1
echo""

# 3. 如果VG有足夠空間,直接擴展
echo"【3】執(zhí)行擴展..."
lvextend -L +50G /dev/${VG_NAME}/${LV_NAME}

# 4. 擴展文件系統(tǒng)(XFS)
echo"【4】擴展XFS文件系統(tǒng)..."
xfs_growfs /dev/${VG_NAME}/${LV_NAME}

# 5. 驗證
echo"【5】擴展后狀態(tài):"
df -h /dev/${VG_NAME}/${LV_NAME}

6.3 添加新磁盤到VG

#!/bin/bash
# script: add_disk_to_vg.sh
# 用途:將新磁盤添加到卷組

NEW_PV="/dev/sdb"
VG_NAME="vg00"

echo"=== 添加新磁盤到VG ==="
echo""

# 1. 創(chuàng)建物理卷
echo"【1】創(chuàng)建物理卷:"
pvcreate"$NEW_PV"

# 2. 添加到卷組
echo"【2】添加到卷組:"
vgextend"$VG_NAME""$NEW_PV"

# 3. 驗證
echo"【3】卷組狀態(tài):"
vgs

# 4. 現(xiàn)在可以擴展LV
echo"【4】可以執(zhí)行:lvextend -L + /dev/${VG_NAME}/"

7. 磁盤quota配額管理

7.1 啟用磁盤配額

# 1. 編輯/etc/fstab,添加usrquota和grpquota
# /dev/mapper/vg00-lv_home /home xfs defaults,usrquota,grpquota 0 0

# 2. 重新掛載
mount -o remount /home

# 3. 初始化配額數(shù)據(jù)庫
quotacheck -cug /home

# 4. 啟用配額
quotaon /home

7.2 設(shè)置用戶配額

# 設(shè)置用戶磁盤限制
edquota -u username

# 示例配置:
# Disk quotas for user username (uid 1000):
#  Filesystem  blocks  soft  hard  inodes  soft  hard
#  /dev/mapper/vg00-lv_home
#         1024  5000  6000   100   150  200

# blocks: 當(dāng)前使用(KB)
# soft: 軟限制(超過后警告)
# hard: 硬限制(不能超過)
# inodes: 文件數(shù)量限制

7.3 配額管理腳本

#!/bin/bash
# script: quota_report.sh
# 用途:生成磁盤配額報告

echo"=== 磁盤配額報告 ==="
echo"生成時間:$(date)"
echo""

# 查看所有用戶的配額狀態(tài)
echo"【1】用戶配額匯總:"
repquota -aug

echo""

# 查看超過配額的用戶
echo"【2】超配額用戶:"
repquota -aug | grep -E"^*"|whilereadline;do
 echo" $line"
done

echo""

# 清理超過soft limit的用戶的部分文件
echo"【3】可以建議清理的文件(按用戶分組):"
foruserin$(ls /home/);do
  quota=$(quota -u"$user"2>/dev/null | tail -1 | awk'{print $3}')
 if[ -n"$quota"] && ["$quota"-gt 0 ];then
    usage=$(quota -u"$user"2>/dev/null | tail -1 | awk'{print $2}')
   if["$usage"-gt"$quota"];then
     echo" 用戶$user:使用${usage}KB,配額${quota}KB"
   fi
 fi
done

8. 預(yù)防性監(jiān)控方案

8.1 Zabbix監(jiān)控模板

# Zabbix Agent配置 - 磁盤監(jiān)控項
# /etc/zabbix/zabbix_agent2.d/disk.conf

# 磁盤空間(百分比)
UserParameter=disk.space[*],df -h"$1"| awk'NR>1 {gsub(/%/,"",$5); print $5}'

# 磁盤inode(百分比)
UserParameter=disk.inode[*],df -i"$1"| awk'NR>1 {gsub(/%/,"",$5); print $5}'

# 磁盤IO
UserParameter=disk.io[*],iostat -d"$1"| awk'NR>4 {print $2}'

# 大文件檢測
UserParameter=disk.large_files,find / -typef -size +1G 2>/dev/null | wc -l

8.2 Prometheus告警規(guī)則

# prometheus/alerts/disk.yml

groups:
-name:disk
 rules:
  # 磁盤空間告警
  -alert:DiskSpaceWarning
   expr:(node_filesystem_avail_bytes{mountpoint="/"}/node_filesystem_size_bytes{mountpoint="/"})

8.3 自動化監(jiān)控腳本

#!/bin/bash
# script: comprehensive_disk_monitor.sh
# 用途:綜合磁盤監(jiān)控腳本,可配置cron執(zhí)行

# 配置文件
CONFIG_FILE="/etc/sysconfig/disk_monitor.conf"

# 默認(rèn)配置
WARNING_THRESHOLD=80
CRITICAL_THRESHOLD=90
LOG_FILE="/var/log/disk_monitor.log"
EXCLUDE_MOUNTS="/proc|/sys|/dev/shm|/run"

# 讀取配置(如果存在)
[ -f"$CONFIG_FILE"] &&source"$CONFIG_FILE"

log() {
 echo"[$(date '+%Y-%m-%d %H:%M:%S')]$1">>"$LOG_FILE"
}

check_mount() {
 localmount="$1"

 # 獲取使用率
 localusage=$(df"$mount"2>/dev/null | awk'NR==2 {gsub(/%/,"",$5); print $5}')

 # 獲取設(shè)備
 localdevice=$(df"$mount"2>/dev/null | awk'NR==2 {print $1}')

 # 獲取可用空間
 localavail=$(df -h"$mount"2>/dev/null | awk'NR==2 {print $4}')

 if[ -z"$usage"];then
   return
 fi

 localtimestamp=$(date'+%Y-%m-%d %H:%M:%S')

 if["$usage"-ge"$CRITICAL_THRESHOLD"];then
   log"CRITICAL|${timestamp}|${mount}|${device}|${usage}%|${avail}"
   return2
 elif["$usage"-ge"$WARNING_THRESHOLD"];then
   log"WARNING|${timestamp}|${mount}|${device}|${usage}%|${avail}"
   return1
 else
   log"OK|${timestamp}|${mount}|${device}|${usage}%|${avail}"
   return0
 fi
}

# 主監(jiān)控
log"========== 磁盤監(jiān)控開始 =========="

# 獲取所有掛載點
mounts=$(df -h | awk'NR>1 {print $6}'| grep -vE"^(${EXCLUDE_MOUNTS})$")

critical_count=0
warning_count=0

formountin$mounts;do
  check_mount"$mount"
  result=$?

 if[$result-eq 2 ];then
    critical_count=$((critical_count + 1))
 elif[$result-eq 1 ];then
    warning_count=$((warning_count + 1))
 fi
done

log"========== 監(jiān)控完成 =========="
log"結(jié)果:${critical_count}個危急,${warning_count}個告警"

# 如果有告警,輸出匯總
if[$critical_count-gt 0 ] || [$warning_count-gt 0 ];then
 echo""
 echo"磁盤告警匯總:"
  grep -E"CRITICAL|WARNING""$LOG_FILE"| tail -20
fi

9. 自動化清理腳本分享

9.1 完整清理腳本

#!/bin/bash
# script: full_disk_cleanup.sh
# 用途:一次性執(zhí)行所有常見磁盤清理操作

set-e

echo"========================================"
echo"   磁盤空間全面清理工具"
echo"========================================"
echo""
echo"開始時間:$(date)"
echo""

# 配置
MAX_LOG_DAYS=30
MAX_TMP_DAYS=7
DO_DOCKER_PRUNE=false
DO_DNF_CLEAN=false
DO_KERNEL_CLEAN=false
DRY_RUN=false

# 解析參數(shù)
while[[$#-gt 0 ]];do
 case$1in
    --docker)
      DO_DOCKER_PRUNE=true
     shift
      ;;
    --dnf)
      DO_DNF_CLEAN=true
     shift
      ;;
    --kernel)
      DO_KERNEL_CLEAN=true
     shift
      ;;
    --dry-run)
      DRY_RUN=true
     shift
      ;;
    --all)
      DO_DOCKER_PRUNE=true
      DO_DNF_CLEAN=true
      DO_KERNEL_CLEAN=true
     shift
      ;;
    *)
     echo"未知參數(shù):$1"
     echo"用法:$0[--docker] [--dnf] [--kernel] [--all] [--dry-run]"
     exit1
      ;;
 esac
done

# 清理函數(shù)
run_cmd() {
 if["$DRY_RUN"=true];then
   echo"[DRYRUN]$1"
 else
   echo"[EXEC]$1"
   eval"$1"
 fi
}

# 1. 清理日志
echo"【1】清理${MAX_LOG_DAYS}天前的日志文件..."
run_cmd"find /var/log -type f -name '*.log' -mtime +${MAX_LOG_DAYS}-delete"
run_cmd"find /var/log -type f -name '*.gz' -mtime +180 -delete"
echo"  完成"

# 2. 清理臨時文件
echo"【2】清理${MAX_TMP_DAYS}天未訪問的臨時文件..."
run_cmd"find /tmp -type f -atime +${MAX_TMP_DAYS}-delete 2>/dev/null || true"
run_cmd"find /var/tmp -type f -atime +${MAX_TMP_DAYS}-delete 2>/dev/null || true"
echo"  完成"

# 3. 清理dnf緩存
if["$DO_DNF_CLEAN"=true];then
 echo"【3】清理DNF緩存..."
  run_cmd"dnf clean all"
 echo"  完成"
fi

# 4. 清理舊內(nèi)核
if["$DO_KERNEL_CLEAN"=true];then
 echo"【4】清理舊內(nèi)核..."
  current_kernel=$(uname -r)
  installed_kernels=$(rpm -q kernel 2>/dev/null | wc -l)

 if["$installed_kernels"-gt 2 ];then
   forkernelin$(rpm -q kernel 2>/dev/null | sed's/kernel-//');do
     if["$kernel"!="$current_kernel"];then
        run_cmd"rpm -e kernel-${kernel}2>/dev/null || true"
     fi
   done
 fi
 echo"  完成"
fi

# 5. Docker清理
if["$DO_DOCKER_PRUNE"=true];then
 echo"【5】清理Docker空間..."
 ifcommand-v docker &> /dev/null;then
    run_cmd"docker system prune -f"
 else
   echo"  Docker未安裝,跳過"
 fi
fi

# 6. 清理yum緩存
echo"【6】清理YUM/DNF緩存..."
run_cmd"yum clean all 2>/dev/null || true"
echo"  完成"

# 7. 清理孤兒包
echo"【7】清理孤兒包..."
run_cmd"package-cleanup --leaves 2>/dev/null | head -20 || true"
echo"  完成"

# 8. 清理舊日志輪轉(zhuǎn)狀態(tài)
echo"【8】清理logrotate狀態(tài)..."
run_cmd"find /var/lib/logrotate -type f -mtime +60 -delete 2>/dev/null || true"
echo"  完成"

echo""
echo"========================================"
echo"清理完成!"
echo"結(jié)束時間:$(date)"
echo""
echo"當(dāng)前磁盤使用情況:"
df -h /
echo"========================================"

# 估算釋放空間(如果可能)
if["$DRY_RUN"=false];then
 echo""
 echo"各目錄清理后大小:"
 fordirin/var/log/tmp /var/tmp /var/cache;do
   if[ -d"$dir"];then
      size=$(du -sh"$dir"2>/dev/null | cut -f1)
     echo" $dir:$size"
   fi
 done
fi

9.2 定時任務(wù)配置

# 將以下內(nèi)容添加到crontab
# 編輯: crontab -e

# 每天凌晨2點執(zhí)行快速磁盤檢查
0 2 * * * /opt/scripts/quick_disk_check.sh >> /var/log/disk_check.log 2>&1

# 每天凌晨3點執(zhí)行日志清理(保留30天)
0 3 * * * /opt/scripts/clean_old_logs.sh

# 每周一凌晨4點執(zhí)行全面清理
0 4 * * 1 /opt/scripts/full_disk_cleanup.sh --docker --dnf --kernel >> /var/log/weekly_cleanup.log 2>&1

# 每5分鐘執(zhí)行磁盤監(jiān)控
*/5 * * * * /opt/scripts/disk_alert_monitor.sh

10. 總結(jié):磁盤管理Checklist

10.1 收到告警時的標(biāo)準(zhǔn)處理流程

【第1步:30秒內(nèi)初步判斷】
□ 查看df -h輸出,確認(rèn)是哪個掛載點告警
□ 判斷是/、/data、/var還是其他掛載點
□ 快速判斷使用率是否真的超過閾值

【第2步:5分鐘內(nèi)定位問題】
□ 使用du -h --max-depth=1 定位最大的子目錄
□ 檢查日志目錄(/var/log)
□ 檢查臨時目錄(/tmp, /var/tmp)
□ 如果是數(shù)據(jù)庫,檢查數(shù)據(jù)目錄
□ 如果是容器環(huán)境,檢查docker目錄

【第3步:確定清理方案】
□ 日志問題:檢查logrotate配置,執(zhí)行手動清理
□ 臨時文件:清理n天前的文件
□ 數(shù)據(jù)庫:檢查表空間,考慮歸檔或清理
□ 容器:執(zhí)行docker system prune

【第4步:執(zhí)行清理】
□ 先備份重要數(shù)據(jù)
□ 執(zhí)行清理操作
□ 驗證空間釋放
□ 確認(rèn)服務(wù)正常

【第5步:建立長效機制】
□ 檢查logrotate配置
□ 配置監(jiān)控告警
□ 考慮自動化清理
□ 記錄問題根因

10.2 預(yù)防性維護清單

每日檢查

□ 確認(rèn)沒有磁盤告警
□ 檢查關(guān)鍵服務(wù)的日志寫入是否正常

每周維護

□ 審查日志輪轉(zhuǎn)日志
□ 檢查臨時文件增長趨勢
□ 確認(rèn)監(jiān)控告警配置正常

每月維護

□ 執(zhí)行全面的磁盤審計
□ 清理舊的日志和臨時文件
□ 檢查inode使用率
□ 審查磁盤空間增長趨勢
□ 更新容量規(guī)劃

10.3 容量規(guī)劃參考

服務(wù)類型 單機容量建議 監(jiān)控閾值
Web服務(wù)器 /var/log至少50GB 告警80%
MySQL 數(shù)據(jù)目錄200GB起步 告警70%
PostgreSQL 數(shù)據(jù)目錄100GB起步 告警70%
Redis 內(nèi)存2倍大小 告警80%
Elasticsearch 磁盤2倍內(nèi)存 告警80%
Docker Host 空閑50%以上 告警75%

10.4 快速命令速查表

場景 命令
查看磁盤使用 df -h
查看目錄大小 du -sh /path
找大文件 find / -type f -size +1G
找大目錄 ncdu -x /
清理日志 > /var/log/xxx.log
清理臨時文件 find /tmp -type f -atime +7 -delete
清理Docker docker system prune -a
查看inode df -i
清理inode find / -type f -empty -delete
LVM擴展 lvextend -L +50G /dev/vg00/lv
配額的啟用 quotaon /home
檢查配額 repquota -aug

10.5 常見問題解答

Q: 刪除文件后空間不釋放?A: 可能是進程持有文件句柄。檢查lsof +L1,找到占用文件然后重啟相關(guān)進程。

Q: inode滿了怎么辦?A: 查找小文件過多的目錄:find / -type f -size -10k | wc -l,然后清理。

Q: 如何預(yù)測磁盤增長?A: 記錄每日df -h結(jié)果到時序數(shù)據(jù)庫,繪制趨勢圖。簡單方法:df -h >> /var/log/df_history.log。

Q: LVM卷已滿但VG沒有空間?A: 需要擴展VG:添加新磁盤,創(chuàng)建PV,vgextend加入VG,然后lvextend擴展LV。

參考信息

環(huán)境版本

操作系統(tǒng):Rocky Linux 9.4

內(nèi)核版本:6.8.5

XFS文件系統(tǒng)版本:1.2.1

df/du版本:GNU coreutils 9.1

ncdu版本:1.17

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11801

    瀏覽量

    219424
  • 磁盤
    +關(guān)注

    關(guān)注

    1

    文章

    400

    瀏覽量

    26571

原文標(biāo)題:Linux磁盤空間告警?三步快速定位

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何在Ubuntu系統(tǒng)中釋放磁盤空間

    這個帶有腳本的快速指南有助于清理舊的快照版本,并在 Ubuntu 系統(tǒng)中釋放一些磁盤空間
    發(fā)表于 10-20 10:27 ?3005次閱讀

    Linux磁盤空間異常爆滿,該怎么查?

    在服務(wù)器運維過程中,我們時常會遇到這樣的情況,收到服務(wù)器磁盤空間告警
    發(fā)表于 11-29 09:00 ?1249次閱讀

    解決大家Protel99SE文檔太大占磁盤空間方法

    本帖最后由 qq601039293 于 2011-7-19 10:00 編輯 希望這個方法能解決大家的文件太大占用磁盤空間方法,不喜勿噴,懂得可以無視,希望能幫助新人。{:soso_e100
    發(fā)表于 07-19 09:58

    Linux webpack 10.1false磁盤空間報告錯誤

    大家好,在幾次不成功的安裝之后,我甚至嘗試以root用戶身份登錄(!),但總是得到錯誤的錯誤警告說“磁盤空間太小”。但是我有大約17 GB的可用空間。Debian和Debian類似的分布都有相同
    發(fā)表于 09-29 14:54

    Linux下增加磁盤空間的步驟

    在給Linux分區(qū)時,總是有那么一點吝嗇,給的空間較小。在使用過程中,裝上Matlab等大型軟件后,才驀然發(fā)現(xiàn)磁盤已沒有空間,不過亡羊補牢為時不晚。Warning:對硬盤分區(qū)很危險,要
    發(fā)表于 07-11 08:42

    Linux下可以用df命令查看磁盤空間

    Linux下 df 命令查看磁盤空間
    發(fā)表于 07-12 11:07

    Linux的剩余磁盤空間利用技巧

    Linux利用剩余的磁盤空間
    發(fā)表于 07-30 14:28

    如何在Mac上清理磁盤空間?這些方法你用過了嗎

    Mac電腦設(shè)備使用久了,可能會保存特別多的無用文件,那么Mac磁盤空間將會面臨不夠用的情況。那么該如何在Mac上清理磁盤空間?如何在Mac上清理磁盤空間?1、卸載長期不使用的應(yīng)用卸載長期不使
    發(fā)表于 09-09 21:05

    Linux中的可用磁盤空間如何檢查?

    跟蹤磁盤利用率信息是系統(tǒng)管理員(和其他人)的日常待辦事項列表之一。Linux 有一些內(nèi)置的使用程序來幫助提供這些信息。df 命令意思是 “disk-free”,顯示 Linux 系統(tǒng)上可用和已使用的
    的頭像 發(fā)表于 07-25 18:53 ?4067次閱讀
    <b class='flag-5'>Linux</b>中的可用<b class='flag-5'>磁盤空間</b>如何檢查?

    通過df命令顯示磁盤空間使用情況

    這 df 命令顯示文件系統(tǒng)上的設(shè)備名稱、總塊數(shù)、總磁盤空間、已用磁盤空間、可用磁盤空間和掛載點信息。
    的頭像 發(fā)表于 05-16 11:30 ?2211次閱讀

    服務(wù)器運維過程收到磁盤空間告警怎么辦

    在服務(wù)器運維過程中,我們時常會遇到這樣的情況,收到服務(wù)器磁盤空間告警
    的頭像 發(fā)表于 11-03 10:30 ?2675次閱讀

    如何釋放VMware虛擬磁盤未使用空間呢?

    在Windows 11中通過VMware安裝Ubuntu 22.04做一些Linux相關(guān)的學(xué)習(xí),剛安裝的時候VMware虛擬磁盤空間也就6~7GB,但是沒用幾天,VMware虛擬磁盤空間就飆升
    的頭像 發(fā)表于 08-28 10:15 ?7445次閱讀
    如何釋放VMware虛擬<b class='flag-5'>磁盤</b>未使用<b class='flag-5'>空間</b>呢?

    linux磁盤空間滿了怎么清理

    告警信息一致,接著我們就是要找到導(dǎo)致磁盤空間滿的目錄或文件 如何找到占用空間大的目錄或文件? 一種比較笨的方法是,在根目錄下,通過du -hs命令,列出各目錄所占
    的頭像 發(fā)表于 11-09 11:46 ?2114次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>磁盤空間</b>滿了怎么清理

    linux傳輸一半磁盤滿了怎么清理

    在使用Linux操作系統(tǒng)時,磁盤空間不足是一個常見的問題。當(dāng)磁盤空間超過一半被使用時,可能會導(dǎo)致系統(tǒng)性能下降、應(yīng)用程序無法正常運行甚至系統(tǒng)崩潰等問題。因此,及時清理
    的頭像 發(fā)表于 11-23 10:34 ?1412次閱讀

    MySQL磁盤空間問題的成因和排查方法

    運維工程師經(jīng)常會遇到這樣的場景:MySQL 服務(wù)器的磁盤空間告警,但查看數(shù)據(jù)目錄時發(fā)現(xiàn)數(shù)據(jù)庫本身并不大。大量磁盤空間被未知文件消耗。通過排查發(fā)現(xiàn),二進制日志(Binary Log)是主要的磁盤
    的頭像 發(fā)表于 04-13 13:57 ?32次閱讀