Linux下清理磁盤空間——df 磁盤占用100%,du占用很少空間的原因

背景

一臺測試服務器,/data磁盤大小為300G,時不時就滿了,通過df命令查看300G基本全用了,use 100%。但是進到/data目錄中通過du 命令查看,也就用了20個G左右,怎么都對不上。如何清理都沒有釋放太多空間。查看如下所示:

df -lh

在這里插入圖片描述

du -lh *

在這里插入圖片描述

排查

出現以上問題,即df -lh 查看和du -lh 查看磁盤大小不同,排查思路:

  1. 檢查是否掛載點出現問題,即沒找到相應的掛載點或者是掛載點覆蓋了原來的磁盤目錄。
# mount 命令檢查掛載點
mount  |grep '/data'

在這里插入圖片描述
沒看出來啥問題,這個命令執行完后,和df -lh顯示的目錄對應的文件系統是一致的,好像也沒啥錯啊。
2. 是否是有些文件刪除后,沒有釋放導致的呢?先檢查一下哪些文件被標記為已刪除的文件

 lsof +L1|grep '/data'|grep -i deleted

上述命令中含義如下所示:

  • lsof 是查找,
  • +L1:列出所有連接計算小于1的文件(已被刪除的文件)
  • grep ‘/data’: 只顯示/data 目錄下的文件
  • grep -i ‘deleted’:過濾出狀態為deleted的文件
    執行此命令后,輸出會包含多列,其中我們需要關注的是“PID”列(進程ID)和“FD”列(文件描述符),顯示如下所示:
    在這里插入圖片描述

還真有很多被標記了已刪除的文件,到底有沒有完全刪除釋放空間啊?不知道,如何撤底刪除呢?(好比windows下我們刪除了文件,進了回收站,實際還是會占用C盤資源一樣,我們需要清空回收站)
“清空回收站”需要以下命令:

truncate -s 0 /proc/[PID]/fd/[FD_NUM]  # 通過lsof獲取FD_NUM

如何查找PID、FD_NUM呢,需要了解一下lsof那一步中顯示結果各列的含義了。以下補充了表頭信息,我們只需找到對應的PID 和FD_NUM即可.

COMMAND   PID    USER      FD   TYPE DEVICE    SIZE/OFF         NODE         NAME                            STATUS
java     978732 appuser    1w   REG  253,4  303252014991  0   269777363 /data/js/WARN_CENTER/warn_center.log (deleted)
java     978732 appuser    2w   REG  253,4  303252014991  0   269777363 /data/js/WARN_CENTER/warn_center.log (deleted)
java     978732 appuser    4r   REG  253,4            0   0   269664611 /data/js/WARN_CENTER/warn_center.jar (deleted)
java     978732 appuser   10r   REG  253,4            0   0   269664611 /data/js/WARN_CENTER/warn_center.jar (deleted)

由此可見,PID為第二列對應的978732,FD_NUM對應的是第四列FD且只取數字即可:1W中的1;2W中的2即可,而其后面的字母代表文件模式,如w代表可寫入;
下面我們執行"清空回收站"的命令吧:

truncate -s 0 /proc/978732/fd/1
truncate -s 0 /proc/978732/fd/2

在這里插入圖片描述

操作完再次df -lh檢查,磁盤已釋放了,問題圓滿解決
在這里插入圖片描述

總結

df 磁盤占用100%,du占用很少時,兩個命令對應不上大小時,可以試著清空“回收站”(已被刪除的文件,未釋放資源)

  1. 查看刪除狀態的文件有哪些,并找到相應的PID和FN_NUM
 lsof +L1|grep '/data'|grep -i deleted
  1. 通過truncate命令清除掉所有刪除文件占用的資源
#PID參考上述命令結果中的第二列;FUN_NUM參考第四列并只取數字truncate -s 0 /proc/[PID]/fd/[FUN_NUM]

以上就是解決問題的問鍵了,但是還有一個問題,為啥rm -rf刪除文件后,沒有釋放資源呢,原因就是進程并沒有重啟,如果進程重啟后也可以釋放,如沒重啟,空間資源就未釋放了,那我們是不是也可以通過程啟進程的方法替換truncate呢,答案是肯定的。當然可以。

除此,一般清理磁工作,可以通過du命令查看當前文件夾以子文件夾占用空間最大的文件,并指定排序后取前N條,參考以下命令

#du -ah --max-depth=1 |sort -rh|head -n 20
du -ah  |sort -rh|head -n 20

du 和df 都是Linux下磁盤空間管理的兩個核心命令,有啥區別啊?

在這里插入圖片描述
概述一下兩命令使用場景:df查看整個磁盤或分區的使用情況,而du分析特定目錄或文件的空間占用。df 看大盤,du 查細節
兩個命令后面常用到的參數說明:
-a: (all): 顯示所有的文件和目錄占用空間(默認僅顯示目錄)
-h(human-readable) 不加 ?h 時輸出單位為字節,可讀性差。加了h是用人類能看懂的方式整式,以 K/M/G/T 等易讀單位自動轉換字節值(例如 1.2G 代替 1234567890)

  • 日常檢查用 du?sh(只顯示目錄總和)
  • 深度分析用 du?ah??max?depth=N(控制遞歸深度)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96662.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分鐘級長視頻生成迎來“記憶革命”,7倍成本降低,2.2倍端到端生成速度提升!|斯坦福字節

論文鏈接:https://arxiv.org/pdf/2508.21058 項目鏈接:https://primecai.github.io/moc/亮點直擊提出了一種自適應上下文混合(Adaptive Mixture of Contexts,MoC)框架,該框架學習將每個查詢路由到視頻序列中…

JavaScript 設計模式概覽

1. 設計模式是什么? 設計模式是開發中解決常見問題的經典方案。設計模式并非具體代碼,而是解決問題的通用解決方案,幫助開發者避免重復造輪子,提升代碼的可維護性、可擴展性。 2. 設計模式的歷史 設計模式起源于建筑領域,由克…

(九)Spring Cloud Alibaba 2023.x:微服務接口文檔統一管理與聚合

目錄 前言 準備 實踐 網關服務配置 1.pom.xml 引入 webflux 版本 springboc 依賴 2.application-dev.yml 配置 springboc 多服務地址 3.application-dev.yml 配置springboc 文檔路由 4.網關過濾器AuthFilter.class 中放行 springboc 訪問路徑 業務服務配置 1.pom.xml…

在Cursor里安裝極其好用的Mysql Database Client 插件

📸 插件界面展示 圖片1:插件主界面和連接配置圖片2:數據編輯和查詢結果展示🎯 核心優勢 1. 直接編輯數據 - 像DataGrip一樣強大 ? 點擊即編輯: 直接雙擊數據單元格,立即進入編輯模式? 實時保存: 編輯完成后按 Enter …

Cursor 不香了?替代與組合實踐指南(Windsurf、Trae、Copilot、MCP)

當你感覺 Cursor 的產出質量和穩定性不如從前,未必一定要“全盤換掉”。本文從“替代”與“組合”兩個維度給出可落地的工具編排方案,并附帶決策矩陣與常見工作流,幫助你在不同場景獲得穩定、可控的產出。0. 適用讀者 正在使用或評估 Cursor&…

【MFC】對話框屬性:X Pos(X位置),Y Pos(Y位置)

前言 本文介紹對話框屬性中的X Pos(X位置)、Y Pos(Y位置),同時給出相關示例便于理解。 目錄1 位置2 詳解3 示例1 位置 首先介紹一下這個屬性在哪里。 在資源視圖中雙擊對話框節點,打開該對話框; 鼠標右鍵工作區空白處,單擊屬性&am…

Java面試小冊(1)

1【Q】:序列化和反序列化【A】:序列化是將Java對象轉化為字節流,用于網絡傳輸,持久化或緩存。Java提供了java.io.Serializable接口實現序列化。反序列化是將字節流轉為為對象。2【Q】: Java中Exception和Error有什么區…

html獲取16個隨機顏色并不重復

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>16個不重復隨機顏色</title><style>…

Redis 緩存穿透、擊穿、雪崩:防御與解決方案大全

&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全 文章目錄&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全&#x1f9e0; 一、緩存穿透&#xff1a;防御不存在數據的攻擊&#x1f4a1; 問題本質與危害&#x1f6e1;? 解…

量子計算機的發展對傳統密碼學的打擊

量子計算機的發展對傳統密碼學的核心威脅&#xff0c;源于其能高效解決傳統計算機“計算不可行”的數學問題——而這些問題正是當前主流密碼算法保障安全的基石。這種影響并非“全面摧毀”&#xff0c;而是針對傳統密碼學的不同分支&#xff08;非對稱密碼、對稱密碼、哈希函數…

《var, let, const:現代JS聲明指南》

文章目錄JavaScript 中 var、let、const 的差異1. 作用域&#xff08;Scope&#xff09;2. 變量提升&#xff08;Hoisting&#xff09;3. 重復聲明4. 變量值是否可變對比表5. 示例代碼總結JavaScript 中 var、let、const 的差異 1. 作用域&#xff08;Scope&#xff09; var 函…

在 Docker 中安裝 MySQL 教程

拉取 MySQL 鏡像docker pull mysql:8.0創建并啟動 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令說明&#xff1a;-d&#xff1a;后臺運行容器 --name mysql8&#xff1a;給容器起個名字…

C#線程理解

目錄 一.線程類 1.基礎線程類&#xff08;Thread&#xff09; 2.線程池類&#xff08;Threadpool&#xff09; 3.任務并行庫&#xff08;Task&#xff09; 4.并行循環&#xff08;Parallel&#xff09; 二.線程池(threadPool)和Thread/Task之間的聯系 1.ThreadPool和Thr…

Java入門級教程16——JUC的安全并發包機制

目錄 1.JUC的安全并發包機制 1.1 包含 1.2 Barrier(柵欄)機制——CyclicBarrier&#xff08;循環屏障&#xff09; 1.2.1 定義 1.2.2 特性 1.2.1 模擬包車 1.2.2 模擬學生到齊上課 1.2.3 計算任務總耗時 1.3 CountDownLatch(閉鎖)機制 1.3.1 定義 1.3.2 特性 1.3.3…

【網絡通信】全面解析MAC地址:網絡設備的唯一標識

【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識 文章目錄【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識前言一、MAC 地址的定義&#xff1a;設備的 “網絡身份證”?二、MAC 地址的格式與組成&#xff1a;48 位的 “數字編碼”?三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默認啟用現代分析引擎、支持 MISRA C:2025 新規、CI構建性能提升等

Perforce Klocwork 現已更新至2025.2版本&#xff01;該版本增強了對 C/C的分析能力&#xff0c;提升了現代 C 分析的準確性&#xff0c;并改進了對源文件編碼的支持。該版本還為 MISRA C:2025 標準引入了新的分類體系&#xff0c;并增強了 Visual Studio Code 插件的可用性。 …

機器人馭風而行:低空經濟如何開啟智能新紀元【科普類】

新晉碼農一枚&#xff0c;小編會定期整理一些寫的比較好的代碼和知識點&#xff0c;作為自己的學習筆記&#xff0c;試著做一下批注和補充&#xff0c;轉載或者參考他人文獻會標明出處&#xff0c;非商用&#xff0c;如有侵權會刪改&#xff01;歡迎大家斧正和討論&#xff01;…

Java學習筆記四(繼承)

1 繼承繼承的實現&#xff1a;public class 子類 extends 父類 {… }注釋&#xff1a;子類可直接使用&#xff0c;父類&#xff08;保護&#xff0c;公開&#xff09;的屬性和方法優點&#xff1a;減少重復代碼&#xff0c;缺點&#xff1a;只能單繼承// 父類 public class Tes…

NAT技術:SNAT與DNAT區別詳解

1. 什么是NAT&#xff1f; 定義&#xff1a;NAT 是一種網絡技術&#xff0c;用于在私有網絡&#xff08;如家庭或企業局域網&#xff09; 與 公共網絡&#xff08;如互聯網&#xff09; 之間轉換IP地址。它允許使用私有IP地址的設備通過一個&#xff08;或多個&#xff09;公共…

java語言中,list<String>轉成字符串,逗號分割;List<Integer>轉字符串,逗號分割

java語言中&#xff0c;list<String 轉成字符串&#xff0c;逗號分割 在 Java 中&#xff0c;將 List<String> 轉成逗號分割的字符串有多種方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一個靜態方法&#xff0c;它可以方便地將集合中的元素用…