chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Linux服務(wù)器磁盤管理機(jī)制和清理策略

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2026-04-16 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景與問題

磁盤空間耗盡是服務(wù)器運(yùn)維中最常見的問題之一。當(dāng)磁盤寫滿后,應(yīng)用無法寫入日志、無法創(chuàng)建新文件、無法寫入數(shù)據(jù)、數(shù)據(jù)庫無法完成刷盤、SSH 可能無法建立新連接。表現(xiàn)為:寫入文件報 "No space left on device"、日志停止寫入、服務(wù)開始報無法連接、SSH 登錄后無法執(zhí)行命令。

磁盤滿的問題排查難度在于:空間被誰占用是不直觀的,特別是當(dāng)日志文件被刪除但進(jìn)程仍持有文件描述符時。清理磁盤空間也不是簡單地刪除文件,需要理解哪些文件可以刪、哪些正在被使用、刪除后影響是什么。

本文以 RHEL 9、AlmaLinux 9、Ubuntu 22.04 LTS 為測試環(huán)境,系統(tǒng)講解 Linux 磁盤管理機(jī)制、空間占用分析方法、常見占用來源、清理策略、以及預(yù)防措施。涵蓋文件系統(tǒng)和 LVM 兩個維度,覆蓋日志文件、數(shù)據(jù)庫文件、臨時文件、緩存文件等常見場景。

1. 磁盤空間基礎(chǔ)概念

1.1 磁盤空間相關(guān)概念

Linux 中與磁盤空間相關(guān)的幾個關(guān)鍵概念:

文件系統(tǒng)空間(Filesystem level):文件系統(tǒng)層面的可用空間,通過 df 命令查看。這是應(yīng)用能直接使用的空間。

邏輯卷空間( LVM level ):如果使用 LVM 管理磁盤,邏輯卷的空間可能小于物理卷,或者邏輯卷已經(jīng)擴(kuò)展但文件系統(tǒng)未擴(kuò)展。

物理磁盤空間(Physical disk level):硬盤分區(qū)的實(shí)際大小,與分區(qū)表和 RAID 配置相關(guān)。

inode 數(shù)量:文件系統(tǒng)不僅限制空間使用,還限制 inode 數(shù)量。inode 是存儲文件元數(shù)據(jù)的結(jié)構(gòu),inode 耗盡時即使有空間也無法創(chuàng)建新文件。

block 大小:文件系統(tǒng)的最小分配單元,通常是 4KB。寫入 1 字節(jié)的文件也會占用 4KB 空間,這是小文件多時磁盤占用虛高的原因之一。

1.2 查看磁盤空間狀態(tài)

# 查看所有文件系統(tǒng)的空間使用情況
df -h

# 查看 inode 使用情況
df -i

# 以 inode 和空間占用排序
df -i
df -h

# 查看特定目錄的磁盤使用(逐層深入)
du -sh /var/*
du -h --max-depth=1 /var

# 找出大文件
find / -typef -size +100M -execls -lh {} ;

1.3 理解 df -h 輸出

$ df -h
Filesystem   Size Used Avail Use% Mounted on
tmpfs      3.9G   0 3.9G  0% /dev/shm
/dev/sda1    100G  45G  55G 45% /
/dev/mapper/vg-root 200G  180G  20G 90% /data

Size:文件系統(tǒng)總大小

Used:已使用空間

Avail:可用空間

**Use%**:使用率

Mounted on:掛載點(diǎn)

當(dāng) Use% 達(dá)到 90% 以上時應(yīng)該引起警惕,達(dá)到 95% 以上時必須立即處理。Avail 顯示的可用空間是 root 和普通用戶的可用空間之和,對所有用戶一致。

2. 快速定位占用來源

2.1 分層排查法

磁盤空間占用的排查應(yīng)該分層進(jìn)行,從大到小逐步定位:

# 第一層:確定哪個掛載點(diǎn)滿了
df -h

# 第二層:確定哪個目錄占用最多
du -sh /*
du -h --max-depth=1 / | sort -hr | head -10

# 第三層:進(jìn)入占用最多的目錄繼續(xù)排查
du -h --max-depth=1 /var
du -h --max-depth=1 /var/log

2.2 快速定位大文件

當(dāng)磁盤使用率達(dá)到 95% 以上時,需要快速找到可以清理的大文件:

# 查找大于 500MB 的文件
find / -typef -size +500M -execls -lh {} ; 2>/dev/null

# 查找特定目錄下大于 100MB 的文件
find /var -typef -size +100M -execls -lh {} ; 2>/dev/null

# 按大小排序查看目錄內(nèi)容
du -ah /var | sort -rh | head -20

# 只看文件不看目錄
du -ah /var | grep -v'/$'| sort -rh | head -20

2.3 查找被刪除但仍被進(jìn)程占用的文件

這是最容易被忽視的問題:文件被刪除但進(jìn)程仍持有文件描述符,導(dǎo)致空間無法釋放:

# 方法一:查看已刪除但未釋放的空間
lsof +L1

# 方法二:查看所有打開文件的進(jìn)程
lsof | grep deleted

# 方法三:查看特定進(jìn)程的打開文件
ps aux | grep process_name
ls -la /proc/PID/fd | grep deleted

為什么會這樣:當(dāng)進(jìn)程打開一個文件時,內(nèi)核會為該文件分配一個文件描述符。即使在文件系統(tǒng)層面刪除了文件,只要進(jìn)程仍持有該文件描述符,文件占用的空間就不會被釋放。這種情況在日志文件被 logrotate 切割后常見:logrotate 移動了日志文件,但 Nginx 或應(yīng)用程序仍然寫入到舊的 FD。

解決方法:重啟持有文件描述符的進(jìn)程;或者向進(jìn)程發(fā)送 SIGUSR1(對于支持重新打開日志的進(jìn)程如 Nginx)或 SIGHUP 信號。

# 對于 Nginx,重新打開日志
nginx -s reopen

# 或者向 master 進(jìn)程發(fā)送信號
kill-USR1 $(cat /var/run/nginx.pid)

# 查看哪些文件描述符被標(biāo)記為 deleted 但仍被占用
lsof +L1 | grep -v"memfd"

3. 日志文件排查與清理

3.1 日志文件空間占用分析

日志是磁盤空間消耗的大戶。排查日志占用:

# 查看 /var/log 目錄總大小
du -sh /var/log

# 查看 /var/log 下各子目錄的大小
du -h /var/log| sort -rh | head -20

# 查看具體的日志文件大小
ls -lhS /var/log/*.log

# 統(tǒng)計各日志文件的行數(shù)
wc -l /var/log/*.log

3.2 常見日志文件說明

Linux 系統(tǒng)和常用服務(wù)的日志文件:

路徑 內(nèi)容 風(fēng)險
/var/log/messages 系統(tǒng)核心日志 正常情況下不會過大
/var/log/secure 安全和認(rèn)證日志 可能因 SSH 暴力破解變很大
/var/log/maillog 郵件服務(wù)日志 取決于郵件量
/var/log/yum.log yum 操作日志 通常很小
/var/log/cron 定時任務(wù)日志 通常很小
/var/log/dmesg 啟動時的內(nèi)核日志 由 ring buffer 決定大小
/var/log/nginx/access.log Nginx 訪問日志 可非常大
/var/log/nginx/error.log Nginx 錯誤日志 通常不大,除非有持續(xù)錯誤
/var/log/mysql/error.log MySQL 錯誤日志 通常不大
/var/log/mysqld.log MySQL 通用日志 開啟后可能很大
/var/log/postgresql/postgresql-*.log PostgreSQL 日志 取決于日志級別
/var/log/httpd/ 或 /var/log/apache2/ Apache 日志 可非常大
/var/log/kern.log 內(nèi)核日志 通常不大

3.3 安全清理日志文件

清理日志文件時,不能直接用 rm 刪除正在寫入的文件,否則會導(dǎo)致進(jìn)程繼續(xù)占用已刪除文件的空間(如前所述)。正確做法:

對于支持信號刷新日志的進(jìn)程

# Nginx:通知重新打開日志文件
nginx -s reopen

# 或者發(fā)送信號
kill-USR1 $(cat /var/run/nginx.pid)

# 然后刪除舊日志文件
rm /var/log/nginx/access.log.1

對于不支持的進(jìn)程,使用 truncate 命令清空文件內(nèi)容而不刪除文件:

# 清空文件內(nèi)容但保留文件描述符
truncate -s 0 /var/log/nginx/access.log

# 或者使用 : > 語法
: > /var/log/nginx/access.log

對于可以安全刪除的文件(如已切割的舊日志):

# 刪除舊的日志文件
rm /var/log/nginx/access.log.2026-04-*.gz

# 刪除 7 天前的日志
find /var/log-name"*.gz"-mtime +7 -delete

# 刪除 30 天前的日志
find /var/log-name"*.log.*"-mtime +30 -delete

3.4 日志切割配置檢查

檢查 logrotate 配置確保日志被正確切割:

# 查看 logrotate 配置
cat /etc/logrotate.conf
cat /etc/logrotate.d/nginx

# 示例配置
/var/log/nginx/*.log{
  daily
  missingok
  rotate 14
  compress
  delaycompress
  notifempty
  create 0640 nginx nginx
  postrotate
    [ -f /var/run/nginx.pid ] &&kill-USR1 `cat /var/run/nginx.pid`
  endscript
}

關(guān)鍵參數(shù):

daily/weekly/monthly:切割頻率

rotate N:保留 N 份歷史日志

compress:壓縮舊日志

delaycompress:延遲壓縮,保留最近一份不壓縮

notifempty:空文件不切割

postrotate/endscript:切割后執(zhí)行的命令,通常是通知進(jìn)程重新打開日志

手動執(zhí)行 logrotate 調(diào)試:

# 強(qiáng)制執(zhí)行一次 logrotate(加 -f 強(qiáng)制)
logrotate -f /etc/logrotate.conf

# 查看 logrotate 狀態(tài)
cat /var/lib/logrotate/status

# 測試配置是否正確
logrotate -d /etc/logrotate.d/nginx

4. 數(shù)據(jù)庫文件空間管理

4.1 MySQL/MariaDB 空間分析

# 登錄 MySQL 查看各數(shù)據(jù)庫大小
mysql -e"SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables GROUP BY table_schema;"

# 查看各表的詳細(xì)大小
mysql -e"SELECT table_schema, table_name, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(index_length / 1024 / 1024, 2) AS index_mb FROM information_schema.tables ORDER BY data_length DESC LIMIT 20;"

# 查看 binlog 占用空間
mysql -e"SHOW BINARY LOGS;"

# 查看 innodb 文件大小
ls -lh /var/lib/mysql/*.ibd

4.2 MySQL binlog 清理

MySQL binlog 記錄所有數(shù)據(jù)變更,是復(fù)制和恢復(fù)的基礎(chǔ),但會占用大量空間:

# 查看當(dāng)前的 binlog 配置
mysql -e"SHOW VARIABLES LIKE 'expire_logs_days';"
mysql -e"SHOW VARIABLES LIKE 'max_binlog_size';"

# 手動刪除 binlog(指定到某個 binlog 文件)
mysql -e"PURGE BINARY LOGS TO 'mysql-bin.000123';"

# 刪除某個時間之前的 binlog
mysql -e"PURGE BINARY LOGS BEFORE '2026-04-01 0000';"

重要:刪除 binlog 前必須確認(rèn)從庫已經(jīng)接收完畢,否則會導(dǎo)致復(fù)制中斷。如果使用的是主從復(fù)制,應(yīng)該在主庫執(zhí)行。

設(shè)置自動清理:

# 在 my.cnf 中設(shè)置
expire_logs_days = 7
max_binlog_size = 100M

4.3 PostgreSQL 空間分析

# 查看各數(shù)據(jù)庫大小
psql -c"SELECT pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) FROM pg_database ORDER BY pg_database_size(pg_database.datname) DESC;"

# 查看各表大小
psql -c"SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC LIMIT 20;"

# 查看 WAL 文件占用
ls -lh$PGDATA/pg_wal/
du -sh$PGDATA/pg_wal/

4.4 PostgreSQL WAL 清理

PostgreSQL 的 WAL(Write-Ahead Log)文件是數(shù)據(jù)恢復(fù)的關(guān)鍵,同樣會占用大量空間:

# 檢查 wal 保留配置
psql -c"SHOW wal_keep_size;"
psql -c"SHOW max_wal_size;"

# 手動 checkpoint 并清理 WAL
psql -c"CHECKPOINT;"

# 設(shè)置 WAL 保留大?。ㄔ?postgresql.conf 中)
wal_keep_size = 1GB
max_wal_size = 2GB

# 查看歸檔狀態(tài)
psql -c"SELECT * FROM pg_stat_archiver;"

4.5 MongoDB 空間分析

# 查看數(shù)據(jù)庫列表及大小
mongosh --quiet --eval"db.adminCommand('listDatabases')"| grep -E"name|sizeOnDisk"

# 查看集合大小
mongosh --quiet --eval"db.getCollectionNames().forEach(function(c){ var s=db[c].stats(); print(c + ': ' + (s.size/1024/1024).toFixed(2) + ' MB'); });"

# 查看 oplog 大小
mongosh --quiet --eval"db.oplog.rs.stats().maxSize / 1024 / 1024"

5. 臨時文件和緩存清理

5.1 /tmp 目錄清理

Linux 系統(tǒng)重啟時 /tmp 通常會被清空,但長時間運(yùn)行的服務(wù)器上 /tmp 可能積累大量文件:

# 查看 /tmp 大小
du -sh /tmp

# 查看 /tmp 中最占用空間的文件和目錄
find /tmp -typef -execls -lh {} ; | sort -k5 -rh | head -20

# 查找過于老舊的文件(30 天未訪問)
find /tmp -atime +30 -typef -ls

# 查找臨時文件(按大小排序)
find /tmp -typef -printf"%s %p
"| sort -rn | head -20

5.2 系統(tǒng)緩存清理

Linux 會使用空閑內(nèi)存做文件緩存,這些內(nèi)存在需要時會被釋放。不應(yīng)該直接清理 pagecache,但可以 sync 確保數(shù)據(jù)落盤后手動 drop cache:

# 查看內(nèi)存和緩存使用
free -h

# 同步文件系統(tǒng)確保數(shù)據(jù)落盤
sync

# 謹(jǐn)慎操作:手動釋放 pagecache
echo3 > /proc/sys/vm/drop_caches

警告:在生產(chǎn)環(huán)境中執(zhí)行 drop_caches 可能導(dǎo)致性能抖動,通常只在排查問題時使用。

5.3 Yarn/NPM/Maven 等包管理器緩存

開發(fā)環(huán)境和構(gòu)建服務(wù)器上,包管理器緩存可能占用大量空間:

# Yarn 緩存
yarn cache dir
yarn cache clean

# NPM 緩存
npm cache ls
npm cache clean --force

# Maven 緩存
du -sh ~/.m2/repository
rm -rf ~/.m2/repository/*

# PIP 緩存
du -sh ~/.cache/pip
rm -rf ~/.cache/pip

5.4 Docker 資源清理

Docker 存儲占用往往是最大的磁盤殺手之一:

# 查看 Docker 磁盤使用
docker system df

# 詳細(xì)分析各類資源
docker system df -v

# 清理未使用的資源
docker system prune -a    # 刪除所有未使用的鏡像、容器、網(wǎng)絡(luò)
docker container prune   # 刪除已停止的容器
docker image prune -a    # 刪除未使用的鏡像
docker volume prune     # 刪除未使用的卷
docker network prune     # 刪除未使用的網(wǎng)絡(luò)

# 清理特定時間之前的資源
docker system prune --filter"until=168h"# 刪除 7 天前的資源

5.5 舊內(nèi)核和已卸載包清理

系統(tǒng)更新后舊內(nèi)核會保留,可能占用數(shù)百 MB:

# 查看已安裝的內(nèi)核
dpkg --list | grep linux-image
rpm -qa | grep kernel

# Ubuntu/Debian 清理舊內(nèi)核
apt-get autoremove -y

# 或者使用 purge-old-kernels(如果安裝了 byobu)
purge-old-kernels --keep 2

# RHEL/CentOS 清理舊內(nèi)核
dnf remove $(dnf repoquery --installonly --latest-limit=-2 -q)
# 或者
package-cleanup --oldkernels --count=2

6. inode 耗盡問題

6.1 inode 概念

inode 是文件系統(tǒng)中存儲文件元數(shù)據(jù)的結(jié)構(gòu),每個文件對應(yīng)一個 inode。inode 耗盡時,即使磁盤有空間也無法創(chuàng)建新文件。

# 查看 inode 使用情況
df -i

# 查看特定文件系統(tǒng)的 inode 數(shù)量
df -i /

# 查看 inode 使用最多的目錄
find / -xdev -printf'%h
'| sort | uniq -c | sort -rn | head -10

6.2 大量小文件導(dǎo)致 inode 耗盡

常見原因:郵件隊列(/var/spool/mail/)、緩存文件、Nginx 訪問日志被切割成大量小文件。

# 統(tǒng)計目錄下文件數(shù)量
find /var/spool -typef | wc -l

# 查看某個目錄的文件數(shù)量分布
fordirin/var/*;doecho-n"$dir: "; ls -1A"$dir"2>/dev/null | wc -l;done

# 查找 inode 占用最高的目錄
find / -xdev -typed -execsh -c'echo "$(ls -1A "$1" 2>/dev/null | wc -l) $1"'_ {} ; | sort -rn | head -10

6.3 解決 inode 耗盡

如果是郵件隊列導(dǎo)致的:

# 查看郵件隊列大小
ls -lh /var/spool/mail/

# 清理舊郵件(需要確認(rèn))
find /var/spool/mail -typef -name"*"-mtime +30 -delete

創(chuàng)建文件系統(tǒng)時可以指定 inode 密度:

# 創(chuàng)建時指定
mkfs.ext4 -i 8192 /dev/sdb1 # 每 8KB 一個 inode

7. LVM 環(huán)境下的問題

7.1 LVM 概念回顧

LVM(Logical Volume Manager)將物理磁盤抽象為卷組(VG)和邏輯卷(LV),提供更靈活的空間管理:

PV(Physical Volume):物理卷,對應(yīng)分區(qū)或整個磁盤

VG(Volume Group):卷組,多個 PV 組成

LV(Logical Volume):邏輯卷,從 VG 中劃分

7.2 LVM 空間問題排查

# 查看卷組空間使用
vgdisplay

# 查看邏輯卷信息
lvdisplay

# 查看每個 LV 的空間使用
lvs -o lv_name,lv_size,data_percent,metadata_percent

# 查看 PV 使用情況
pvs
pvdisplay

7.3 擴(kuò)展邏輯卷

當(dāng)文件系統(tǒng)空間不足但 VG 有剩余空間時:

# 擴(kuò)展邏輯卷
lvextend -L +10G /dev/mapper/vg-root

# 擴(kuò)展文件系統(tǒng)(ext4)
resize2fs /dev/mapper/vg-root

# 擴(kuò)展文件系統(tǒng)(xfs)
xfs_growfs /data

7.4 擴(kuò)展卷組

當(dāng) VG 本身空間不足時,需要添加新物理卷:

# 創(chuàng)建新分區(qū)或磁盤

# 創(chuàng)建物理卷
pvcreate /dev/sdb1

# 將新 PV 加入 VG
vgextend vg_name /dev/sdb1

# 擴(kuò)展 LV
lvextend -L +50G /dev/mapper/vg-root

# 擴(kuò)展文件系統(tǒng)
resize2fs /dev/mapper/vg-root

7.5 縮小邏輯卷(謹(jǐn)慎操作)

縮小邏輯卷需要先卸載文件系統(tǒng),風(fēng)險極高,不推薦在生產(chǎn)環(huán)境操作。如果必須操作:

# 卸載文件系統(tǒng)
umount /data

# 檢查文件系統(tǒng)
e2fsck -f /dev/mapper/vg-data

# 縮小文件系統(tǒng)
resize2fs /dev/mapper/vg-data 50G

# 縮小 LV
lvreduce -L 50G /dev/mapper/vg-data

# 重新掛載
mount /dev/mapper/vg-data /data

8. 分區(qū)表和文件系統(tǒng)修復(fù)

8.1 檢查文件系統(tǒng)錯誤

在清理磁盤前,應(yīng)該檢查文件系統(tǒng)是否有錯誤:

# 檢查文件系統(tǒng)(必須先卸載)
umount /data
e2fsck -f /dev/mapper/vg-data

# 檢查并修復(fù)(自動修復(fù)模式)
e2fsck -p /dev/mapper/vg-data

注意:不要在已掛載的文件系統(tǒng)上運(yùn)行 e2fsck(除非使用只讀模式)。生產(chǎn)環(huán)境應(yīng)該使用 fsck -n 預(yù)覽問題。

8.2 修復(fù)損壞的 inode

如果 inode 表損壞導(dǎo)致空間統(tǒng)計不準(zhǔn):

# 顯示 inode 使用情況
dumpe2fs /dev/sda1 | grep -E"Inode size|Inode count|Inode blocks per group|Inodes per group"

# 檢查損壞的 inode
badblocks /dev/sda1

8.3 修復(fù) LVM 配置損壞

如果 LVM 配置損壞導(dǎo)致無法訪問數(shù)據(jù):

# 掃描物理卷
pvscan

# 激活所有卷組
vgchange -ay

# 查看 LVM 狀態(tài)
lvs -a

9. 緊急處理流程

當(dāng)磁盤已滿導(dǎo)致服務(wù)不可用時,按以下順序處理:

第一步:登錄服務(wù)器

如果 SSH 已經(jīng)無法登錄,嘗試:

# 使用密鑰登錄
ssh -i ~/.ssh/id_rsa user@server

# 如果是 SSH 會話仍然活躍但無法執(zhí)行命令
# 嘗試執(zhí)行簡單命令
df -h /

# 如果是根目錄滿,需要先清理
ls -la /tmp

第二步:定位最緊急的占用

# 查看磁盤使用情況
df -h

# 查找大文件
find / -xdev -typef -size +100M -execls -lh {} ; 2>/dev/null

# 查看已刪除但未釋放的文件
lsof +L1

第三步:立即清理

# 清理臨時文件
rm -rf /tmp/*
rm -rf /var/tmp/*

# 清理舊日志(如果進(jìn)程支持)
: > /var/log/messages
: > /var/log/secure

# 清理包管理器緩存
yum clean all
apt-get clean all

# 清理 Docker(謹(jǐn)慎)
docker system prune -f

第四步:通知相關(guān)服務(wù)

清理完成后,應(yīng)該通知相關(guān)人員日志被清空,并重啟相關(guān)服務(wù)確保日志正常寫入:

# 重啟日志服務(wù)
systemctl restart rsyslog
systemctl restart systemd-journald

# 重啟應(yīng)用(如果需要)
systemctl restart nginx
systemctl restart myapp

10. 預(yù)防措施

10.1 磁盤空間監(jiān)控告警

部署監(jiān)控是預(yù)防磁盤滿的最有效手段:

# Prometheus 告警規(guī)則示例
groups:
- name: disk
 rules:
 - alert: DiskSpaceUsageHigh
  expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 85
 for: 5m
  labels:
   severity: warning
  annotations:
   summary:"Disk space usage is above 85%"

 - alert: DiskSpaceUsageCritical
  expr: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100 > 95
 for: 1m
  labels:
   severity: critical
  annotations:
   summary:"Disk space usage is above 95%, immediate action required"

Zabbix 監(jiān)控模板也推薦部署 LLD(Low Level Discovery)自動發(fā)現(xiàn)掛載點(diǎn)并監(jiān)控。

10.2 日志空間限制

通過配置限制日志目錄的最大空間:

# 使用 logrotate 自動管理
# 確保配置文件存在且正確

# 對于 Nginx,可以限制 access_log 緩沖
access_log /var/log/nginx/access.log combined buffer=32k flush=5s;

10.3 獨(dú)立分區(qū)策略

關(guān)鍵目錄使用獨(dú)立分區(qū),防止單一目錄占滿根分區(qū):

/var/log 獨(dú)立分區(qū)

/tmp 獨(dú)立分區(qū)(使用 tmpfs 可以獲得更好性能)

/home 獨(dú)立分區(qū)

/data 或 /opt 獨(dú)立分區(qū)

# /etc/fstab 示例
tmpfs /tmp tmpfs defaults,noexec,nosuid,size=2G 0 0
tmpfs /var/tmp tmpfs defaults,noexec,nosuid,size=1G 0 0

10.4 數(shù)據(jù)庫數(shù)據(jù)目錄獨(dú)立

數(shù)據(jù)庫數(shù)據(jù)目錄應(yīng)該放在獨(dú)立分區(qū)或 LVM:

# 創(chuàng)建獨(dú)立 LV 給 MySQL
lvcreate -L 100G -n mysql vg
mkfs.xfs /dev/mapper/vg-mysql
mount /dev/mapper/vg-mysql /var/lib/mysql

10.5 定期檢查腳本

部署定時任務(wù)定期檢查磁盤空間:

# /etc/cron.daily/disk-check
#!/bin/bash
THRESHOLD=85
df -h | grep -vE'^Filesystem|tmpfs|cdrom'| awk -v threshold=$THRESHOLD'{if ($5+0 >= threshold) print $1 " " $5 " is above threshold"}'| mail -s"[Alert] Disk space warning"admin@example.com

11. 常見場景處理

場景一:/var/log 目錄占滿

# 查看 /var/log 各文件大小
du -sh /var/log/*
ls -lhS /var/log/*.log

# 如果是 messages 文件過大
: > /var/log/messages
# 然后重啟 rsyslog
systemctl restart rsyslog

# 如果是 secure 文件過大(SSH 暴力破解)
: > /var/log/secure

# 清理已切割的舊日志
find /var/log-name"*.gz"-mtime +7 -delete
find /var/log-name"*.log.*"-mtime +7 -delete

場景二:/ 分區(qū)滿但 /home 有空間

# 查看根分區(qū)占用分布
du -h --max-depth=1 / | sort -hr

# 常見可疑目錄
du -sh /var/*
du -sh /tmp
du -sh /.snapshots # Snapper 快照

# 如果 /var/lib/docker 占用過大,清理 Docker
docker system prune -af

場景三:LVM VG 沒有剩余空間

# 查看 VG 狀態(tài)
vgdisplay vg_name | grep -E"Free PE|Total PE"

# 如果有未使用的 PV,可以移除釋放空間
vgreduce vg_name /dev/sdc1

# 或者擴(kuò)展 VG(添加新磁盤)
pvcreate /dev/sdd
vgextend vg_name /dev/sdd

# 或者縮小某個不常用的 LV
# 先備份/卸載
umount /mnt/backup
e2fsck -f /dev/mapper/vg-backup
resize2fs /dev/mapper/vg-backup 50G
lvreduce -L 50G /dev/mapper/vg-backup

場景四:Nginx 寫入失敗但日志文件被刪除

# 檢查是否有進(jìn)程持有已刪除文件的 FD
lsof +L1

# 如果是 Nginx
nginx -s reopen

# 查看 Nginx 錯誤日志
tail -f /var/log/nginx/error.log

# 如果 Nginx 仍無法寫入,可能是權(quán)限問題
ls -la /var/log/nginx/
chown nginx:nginx /var/log/nginx/

12. 總結(jié)

磁盤空間問題排查的核心是分層定位:從 df 確定哪個掛載點(diǎn),到 du 確定哪個目錄,再 find 確定具體文件。

最容易被忽視的問題是已刪除但仍被進(jìn)程占用的文件,用 lsof +L1 可以快速定位。

清理磁盤空間時,必須區(qū)分可以立即刪除的文件(如舊日志、臨時文件)和需要先處理的文件(如正在寫入的日志)。對正在寫入的文件使用 truncate 清空內(nèi)容而不是 rm 刪除。

LVM 環(huán)境下的空間調(diào)整比普通分區(qū)更靈活,可以在線擴(kuò)展。生產(chǎn)環(huán)境推薦使用 LVM 管理磁盤。

預(yù)防比排查更重要:完善的監(jiān)控告警可以提前發(fā)現(xiàn)空間緊張,定期的清理任務(wù)可以防止空間耗盡。

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

    關(guān)注

    88

    文章

    11806

    瀏覽量

    219486
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    14

    文章

    10339

    瀏覽量

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

    關(guān)注

    1

    文章

    401

    瀏覽量

    26575

原文標(biāo)題:服務(wù)器磁盤滿了怎么辦?一次講透 Linux 磁盤排查思路

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    linux服務(wù)器和windows服務(wù)器

    , 使得用戶可以方便地管理和維護(hù)服務(wù)器系統(tǒng)。 總的來說,Linux服務(wù)器和Windows服務(wù)器都有各自的優(yōu)勢和適用性。選擇哪種
    發(fā)表于 02-22 15:46

    安卓應(yīng)用商店和APP市場管理機(jī)制

    “工信部正在搭建移動應(yīng)用軟件認(rèn)證和管理服務(wù),以加強(qiáng)對智能終端的安全管理。”工信部相關(guān)負(fù)責(zé)人昨日表示,目前為了解決智能終端的安全問題,內(nèi)部確實(shí)已經(jīng)明確了需要一套對安卓應(yīng)用商店和APP市場管理機(jī)制
    發(fā)表于 07-15 07:41

    Linux系統(tǒng)的性能優(yōu)化策略

    近年來,世界上許多大軟件公司紛紛推出各種Linux服務(wù)器系統(tǒng)及Linux下的應(yīng)用軟件。目前,Linux 已可以與各種傳統(tǒng)的商業(yè)操作系統(tǒng)分庭抗禮,在
    發(fā)表于 07-16 06:23

    linux服務(wù)器性能測試步驟

    linux服務(wù)器性能測試-服務(wù)器實(shí)時【磁盤】監(jiān)控
    發(fā)表于 06-02 06:54

    命令終端的常用操作有哪些?軟件包管理機(jī)制是什么

    軟件包redhat Linux提出的軟件包管理機(jī)制—Rpm軟件包2.為什么用軟件包管理?之前的階段,linux沒有考慮到系統(tǒng)中軟件包間復(fù)雜的依賴關(guān)...
    發(fā)表于 12-21 06:38

    播出服務(wù)器磁盤I/O與緩存性能分析

    播出服務(wù)器磁盤I/O與緩存性能分析:針對電視臺專業(yè)播出服務(wù)器在播出質(zhì)量和播出性能上的高要求,提出了(s,S)策略下讀數(shù)據(jù)緩存和復(fù)用緩存與節(jié)目數(shù)量、節(jié)目數(shù)據(jù)速率、
    發(fā)表于 01-16 15:09 ?22次下載

    linux內(nèi)存管理機(jī)制淺析

    本內(nèi)容介紹了arm linux內(nèi)存管理機(jī)制,詳細(xì)說明了linux內(nèi)核內(nèi)存管理,linux虛擬內(nèi)存管理
    發(fā)表于 12-19 14:09 ?73次下載
    <b class='flag-5'>linux</b>內(nèi)存<b class='flag-5'>管理機(jī)制</b>淺析

    一種基于信息流策略的組密鑰管理機(jī)制

    文中將多級安全的信息流策略引入到安全組通信系統(tǒng)中,設(shè)計了一種基于信息流策略的組密鑰管理機(jī)制。該機(jī)制應(yīng)用密鑰多樹圖的管理方法保證了密鑰
    發(fā)表于 01-08 14:54 ?0次下載

    最全SPARK內(nèi)存管理機(jī)制

    最全SPARK內(nèi)存管理機(jī)制
    發(fā)表于 09-08 14:17 ?5次下載
    最全SPARK內(nèi)存<b class='flag-5'>管理機(jī)制</b>

    嵌入式系統(tǒng)內(nèi)存管理機(jī)制詳解

    操作系統(tǒng)的內(nèi)存管理功能用于向操作系統(tǒng)提供一致的地址映射功能和內(nèi)存頁面的申請、釋放操作。在嵌入式實(shí)時系統(tǒng)中,內(nèi)存管理根據(jù)不同的系統(tǒng),有不同的策略,對于有些系統(tǒng)支持的虛擬內(nèi)存管理機(jī)制,對于
    發(fā)表于 11-18 09:41 ?5043次閱讀

    磁盤同步看linux機(jī)制策略

    。linux策略機(jī)制是分離的,因此,體現(xiàn)到這個事情上也是如此。???? linux內(nèi)核有著非常強(qiáng)大的磁盤緩存
    發(fā)表于 04-02 14:48 ?542次閱讀

    linux磁盤如何清理

    Linux查看磁盤用量
    發(fā)表于 06-10 09:18 ?2922次閱讀
    <b class='flag-5'>linux</b>的<b class='flag-5'>磁盤</b>如何<b class='flag-5'>清理</b>

    淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其管理機(jī)制

    本文主要介紹內(nèi)存管理機(jī)制:物理內(nèi)存與虛擬內(nèi)存的關(guān)系,Linux內(nèi)存管理機(jī)制,Python內(nèi)存管理機(jī)制,Nginx內(nèi)存管理機(jī)制,環(huán)形緩沖區(qū)
    的頭像 發(fā)表于 04-12 09:55 ?6770次閱讀
    淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其<b class='flag-5'>管理機(jī)制</b>

    華納云服務(wù)器Linux系統(tǒng)電源管理與節(jié)能優(yōu)化配置方法

    在云計算時代,Linux系統(tǒng)的電源管理優(yōu)化成為提升云服務(wù)器能效的關(guān)鍵環(huán)節(jié)。本文將深入解析Linux內(nèi)核的電源管理機(jī)制,從CPU調(diào)頻
    的頭像 發(fā)表于 08-21 15:09 ?1077次閱讀

    Linux磁盤管理指令合集:從查看、分區(qū)到修復(fù)

    Linux 服務(wù)器運(yùn)維或日常使用中,磁盤管理是高頻操作 —— 無論是排查磁盤空間不足的問題,還是新增硬盤后的分區(qū)配置,都離不開一系列核心
    的頭像 發(fā)表于 02-03 16:07 ?3149次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>磁盤</b><b class='flag-5'>管理</b>指令合集:從查看、分區(qū)到修復(fù)