Linux磁盤空間耗盡導(dǎo)致系統(tǒng)故障問題及說明
Linux出現(xiàn)磁盤耗盡導(dǎo)致報錯排障和維護(hù)思路
Linux系統(tǒng)有一個比較常見的系統(tǒng)故障就是磁盤使用空間耗盡,導(dǎo)致系統(tǒng)無法正常運行,同時可能伴隨著無法寫入日志、啟動新進(jìn)程,甚至某些服務(wù)會崩潰。
為了解決上述問題,就必須要進(jìn)行磁盤的清理和維護(hù),以便系統(tǒng)可以正常運行。
1.確認(rèn)故障
首先我們需要進(jìn)入系統(tǒng)內(nèi)部查看磁盤的使用情況,一般使用df -h的命令就可以進(jìn)行查看Linux系統(tǒng)中哪個磁盤對應(yīng)的哪個分區(qū)出現(xiàn)了磁盤空間占滿的情況。

字段解釋
| 字段 | 解釋 |
|---|---|
| Filesystem | 文件系統(tǒng)名稱或磁盤分區(qū)標(biāo)識 |
| Size | 文件系統(tǒng)的總大小 |
| Used | 文件系統(tǒng)已用空間大小 |
| Avail | 文件系統(tǒng)可用空間大小 |
| Use% | 文件系統(tǒng)使用的百分比 |
| Mounted on | 文件系統(tǒng)掛載的位置(目錄) |
詳細(xì)解釋
udev 和 tmpfs:
udev: 提供對設(shè)備節(jié)點的訪問,大小為 1.8G(虛擬內(nèi)存,設(shè)備文件占用空間極?。?/li>tmpfs::基于內(nèi)存的臨時文件系統(tǒng),常用于系統(tǒng)運行時需要快速存儲的地方(如 /run、/dev/shm)。
/dev/vda2
- 主分區(qū):大小為 59G,其中已用 5.6G,剩余 51G,使用率 10%。
- 掛載在
/(根目錄),即根文件系統(tǒng),存儲系統(tǒng)的主要內(nèi)容(如操作系統(tǒng)、應(yīng)用程序等)。
掛載點 tmpfs
多個 tmpfs 文件系統(tǒng)基于內(nèi)存掛載,分別用于:
/dev/shm:提供共享內(nèi)存。/run:存儲運行時進(jìn)程數(shù)據(jù)。/run/lock:提供鎖文件的臨時存儲。/sys/fs/cgroup:Linux 的控制組文件系統(tǒng),用于資源限制和管理。
/dev/loopX
- 這些是只讀的
loop設(shè)備,常用于snap軟件包的掛載。 /snap/core18、/snap/core20等為Snap平臺的核心文件。/snap/lxd為lxd容器管理器的Snap包。
/dev/vdb
- 這是一個獨立的分區(qū),大小為 20G,已用 45M,可用 19G,使用率僅 1%。
- 掛載在
/data,可用作額外的數(shù)據(jù)存儲。
tmpfs (最后一行)
- 用于用戶 ID 為 1000 的臨時文件存儲(是當(dāng)前登錄用戶的運行時目錄 /run/user/1000)
2.finding占用空間的文件或目錄
使用 du -sh /*、du -sh /var/*等類似的命令,逐層查找大文件或大目錄,并定位具體占用空間的文件。
————此處最好使用Linux最高權(quán)限用戶root,否則會導(dǎo)致有些文件由于權(quán)限的原因無法進(jìn)行讀取信息。


這里需要我們進(jìn)行一層一層的查詢,確認(rèn)最終哪個目錄的哪個文件或者文件夾的磁盤占用最大的文件。
3.清理文件
刪除無用日志文件或臨時文件,比如使用命令rm -rf /var/log/*清理日志文件(但是最好將近期的日志文件進(jìn)行拷貝到其他的地方,以便出現(xiàn)其他服務(wù)異常的時候,可以通過日志進(jìn)行查詢)。同時也可以根據(jù)實際需求對其他無用文件進(jìn)行清理或遷移。
4.預(yù)防措施
設(shè)置日志輪轉(zhuǎn)(logrotate)來自動管理日志文件,避免將來類似的問題,同時,可以設(shè)置磁盤空間報警,提前發(fā)現(xiàn)空間不足的問題。以此來提高系統(tǒng)的高可用性。
Tips:
一、磁盤使用情況查詢工具ncdu
ncdu 是一個基于 ncurses 的磁盤使用情況分析工具。它可以幫助您快速地查看文件系統(tǒng)中哪些文件或目錄占用了較多的空間,并且以易于閱讀的樹狀視圖形式展示結(jié)果。
1. ncdu 的主要特點
直觀的界面
- 基于
ncurses的終端界面,用戶可以通過鍵盤導(dǎo)航文件系統(tǒng)結(jié)構(gòu),查看每個目錄或文件的詳細(xì)空間占用情況。
快速掃描與分析
- 使用高效的掃描算法,能夠快速遍歷大文件系統(tǒng),并計算出每個目錄或文件的空間占用。
易于操作
- 支持通過鍵盤快捷鍵進(jìn)行文件排序、目錄展開與折疊,以及直接刪除不需要的文件或目錄。
跨平臺支持
ncdu可運行在大多數(shù)基于Unix的系統(tǒng)(如Linux和macOS)上,并支持通過SSH在遠(yuǎn)程服務(wù)器上使用。
便攜性
- 由于
ncdu是輕量級工具,占用資源少,非常適合在資源受限的環(huán)境(如小型服務(wù)器或嵌入式系統(tǒng))中使用。
顏色編碼
- 默認(rèn)情況下,
ncdu使用顏色編碼來區(qū)分文件類型和目錄,使得輸出更加直觀。
靈活的選項
ncdu支持多種選項,比如排除某些目錄、按照大小排序、以及導(dǎo)出和導(dǎo)入掃描結(jié)果。
2. 適用場景
- 磁盤空間清理:快速定位占用磁盤空間最多的文件或目錄,幫助清理不必要的數(shù)據(jù)。
- 服務(wù)器維護(hù):通過
SSH在遠(yuǎn)程服務(wù)器上運行ncdu,高效管理存儲資源。 - 大文件系統(tǒng)分析:適合于分析復(fù)雜或多層級的文件系統(tǒng),特別是磁盤配額不足的情況下。
3. 安裝和使用
本次實機演示為ubuntu系統(tǒng),后續(xù)的操作命令均是以其系統(tǒng)為主
在大多數(shù) Linux 發(fā)行版中,可以直接通過包管理器安裝:
# Debian/Ubuntu sudo apt install ncdu # CentOS/RHEL sudo yum install ncdu # macOS (通過 Homebrew) brew install ncdu

4. 基本用法
4.1 如何查看需要或適用的參數(shù)——help
ncdu --help 獲取對應(yīng)的幫助信息

ncdu <options> <directory>
這是您需要鍵入命令的格式
- <directory>:指定要掃描的目錄。如果未提供,
ncdu默認(rèn)掃描當(dāng)前工作目錄 - <options>:可選參數(shù),用于調(diào)整掃描行為或界面顯示
基本功能
-h, --help:顯示幫助信息,列出所有支持的選項-v, -V, --version:輸出 ncdu 的版本號-r:只讀模式。在該模式下,用戶無法通過 ncdu 刪除文件或目錄,適合希望避免誤操作的場景
界面與顯示
-q:啟用安靜模式(Quiet Mode)。掃描期間屏幕刷新間隔為 2 秒,適合在慢速網(wǎng)絡(luò)或資源受限的環(huán)境中運行
-0, -1, -2:控制掃描時的用戶界面顯示
0:無界面模式,適合腳本或直接導(dǎo)出掃描結(jié)果1:基本界面2:完整 ncurses 界面(默認(rèn))
--si:使用十進(jìn)制(基于 10 的 SI 前綴)顯示文件大小
- 例如:1 KB = 1000 字節(jié)
- 1 MB = 1000 KB,默認(rèn)情況下,
ncdu使用二進(jìn)制單位(1024 字節(jié)為 1 KB) --color SCHEME:指定顏色方案,可根據(jù)用戶喜好自定義界面顏色。--confirm-quit:退出 ncdu 時要求確認(rèn),防止誤操作導(dǎo)致退出。
文件和目錄處理
-x:只掃描與目標(biāo)目錄相同的文件系統(tǒng),忽略跨文件系統(tǒng)的目錄或文件。例如,掃描/時不會跨越到掛載的/data分區(qū)。--exclude PATTERN:排除匹配指定模式的文件。例如:
ncdu --exclude '*.log' /var # 上述命令會掃描 /var 目錄,但排除所有 .log 文件。
-X, --exclude-from FILE:從指定文件中讀取排除模式。例如,文件exclude.txt內(nèi)容如下:
*.log *.tmp
然后運行:
ncdu -X exclude.txt /var # 會排除所有 .log 和 .tmp 文件。
--exclude-caches:排除包含CACHEDIR.TAG的目錄。這些目錄通常是緩存文件存儲目錄(如瀏覽器緩存),排除它們可以加快掃描速度。-L, --follow-symlinks:跟隨符號鏈接(僅限文件),但不會跟隨指向其他目錄的符號鏈接。
導(dǎo)入與導(dǎo)出
-o FILE:將掃描結(jié)果導(dǎo)出到指定文件。導(dǎo)出結(jié)果是壓縮的二進(jìn)制格式,適合后續(xù)分析。- 例如:
ncdu -o result.dat /path/to/directory -f FILE:從指定文件導(dǎo)入掃描結(jié)果。- 例如:
ncdu -f result.dat(這可以避免重復(fù)掃描大目錄,直接查看之前導(dǎo)出的結(jié)果)。
4.2 基礎(chǔ)使用 + 演示
4.2.1 掃描當(dāng)前目錄并顯示結(jié)果
ncdu

4.2.2 掃描 /var 目錄并排除 .log 文件
ncdu --exclude '*.log' /var

4.2.3 掃描 /data 并將結(jié)果導(dǎo)出到data_scan.dat
ncdu -o data_scan.dat /data

4.2.4 讀取之前的掃描結(jié)果
ncdu -f data_scan.dat


4.2.5 只掃描根目錄,不跨越到其他文件系統(tǒng)
ncdu -x /

4.2.6 排除緩存目錄并顯示文件大小單位為 SI 前綴:
ncdu --exclude-caches --si /path/to/directory

4.2.7 設(shè)置顏色
ncdu --color dark /home

二、日志管理
通過配置logrotate,可以設(shè)置日志文件的輪轉(zhuǎn)、壓縮和刪除時間點。
例如,在/etc/logrotate.d目錄下,對某個日志文件進(jìn)行配置,確保它按時歸檔和清理。
三、臨時文件管理
Linux系統(tǒng)中,/tmp 和 /var/tmp 目錄通常用于存放臨時文件。
定期清理這些目錄的文件,或者設(shè)置 tmpwatch 來自動出除過期的臨時文件,可以避免大量臨時文件長期占用磁盤空間。
四、軟鏈接和硬鏈接
有時候,多個文件其實是同樣的數(shù)據(jù),合理地使用硬鏈接可以減少實際占用的磁盤空間,同時,善用軟鏈接也可以方便管理文件和目錄結(jié)構(gòu)。
五、磁盤配額
在多用戶系統(tǒng)中,可以啟用磁盤配額(quota),限制每個用戶或用戶組所能使用的磁盤空間,這可以有效防止單個用戶因濫用磁盤空間而影響其他用戶使用和系統(tǒng)正常運行。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux printf如何將十進(jìn)制轉(zhuǎn)換為十六進(jìn)制
文章總結(jié):介紹了十進(jìn)制、十六進(jìn)制和八進(jìn)制之間的轉(zhuǎn)換方法,包括使用\b命令和bc工具進(jìn)行轉(zhuǎn)換的技巧2024-12-12
升級Linux系統(tǒng)內(nèi)核的三種實現(xiàn)方法
在現(xiàn)代?IT?基礎(chǔ)設(shè)施中,Linux?內(nèi)核作為操作系統(tǒng)的核心,其穩(wěn)定性、安全性和性能直接影響整個系統(tǒng)的運行效率,本篇博客將帶你從零開始,全面了解如何安全、高效地升級?Linux?內(nèi)核,需要的朋友可以參考下2026-03-03
Linux命令編寫一個用于監(jiān)控系統(tǒng)資源的腳本
這篇文章主要為大家詳細(xì)介紹了如何通過Linux命令編寫一個用于監(jiān)控系統(tǒng)資源的腳本,支持CPU、內(nèi)存、磁盤使用率和系統(tǒng)負(fù)載等監(jiān)控項,希望對大家有所幫助2026-06-06

