LINUX下刪除檔案磁碟空間不釋放的原因

2021-06-28 21:22:50 字數 1466 閱讀 1983

這幾天做linux實驗的時候,發覺自己刪除了乙個大檔案後用  df -h 指令檢測磁碟空間,發現空間並沒有減少,後來仔細查詢,總結出以下三種不釋放記憶體的可能:

一、該檔案已經建立硬鏈結

這個原因很簡單,hardlink是指多個檔名指向同一索引點(inode),只要其中仍然存在乙個硬鏈結都檔案記憶體都不會釋放,所以檔案具有硬鏈結是原因之一。

二、系統中有程序正在使用該檔案

這個原因解釋起來也很簡單,如果系統中有程序使用該檔案,刪除該檔案後如果記憶體釋放,則程序會自動結束,造成無法**的後果。

這裡給出一種解決方案:

1、用 lsof | grep deleted  命令列出現在被刪除但依舊使用的檔案;

2、這裡我可以用kill命令殺掉這個程序,但是請注意,如果當前系統有多個程序正在使用該檔案,則停掉會有風險,所以建議先停掉這個程序。

lsof(list open files)是乙個列出當前系統開啟檔案的工具。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。所以如傳輸控制協議 (tcp) 和使用者資料報協議 (udp) 套接字等,系統在後台都為該應用程式分配了乙個檔案描述符,無論這個檔案的本質如何,該檔案描述符為應用程式與基礎作業系統之間的互動提供了通用介面。因為應用程式開啟檔案的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠檢視這個列表對系統監測以及排錯將是很有幫助的。

在終端下輸入lsof即可顯示系統開啟的檔案,因為 lsof 需要訪問核心記憶體和各種檔案,所以必須以 root 使用者的身份執行它才能夠充分地發揮其功能。

lisof有很多命令,這裡舉幾個例子簡要介紹一下,

lsof abc.txt 顯示開啟檔案abc.txt的程序

lsof -c abc 顯示abc程序現在開啟的檔案

lsof -c -p 1234 列出程序號為1234的程序所開啟的檔案

lsof -g gid 顯示歸屬gid的程序情況lsof +d /usr/local/ 顯示目錄下被程序開啟的檔案

lsof +d /usr/local/ 同上,但是會搜尋目錄下的目錄,時間較長lsof -d 4 顯示使用fd為4的程序

lsof -i 用以顯示符合條件的程序情況

lsof -i[46] [protocol][@hostname|hostaddr][:service|port]--> ipv4 or ipv6  protocol --> tcp or udp  hostname --> internet host name  hostaddr --> ipv4位址  service --> /etc/service中的 service name (可以不止乙個)  port --> 埠號 (可以不止乙個)

三、磁碟空餘空間出現問題

這個問題原因就很複雜了,既有物理磁碟損壞又有些磁碟內部分配問題。

這裡提供乙個可能,大家都知道linux檔案系統是通過inode索引檔案管理blocks區域,如果檔案中的inode節點被用完了,則無法分配新空間。

Linux 刪除檔案後磁碟空間不釋放的解決方法

我們的系統是 red hat,有乙個盤快要滿了,需要清理一些日誌。我使用 rm 刪除了乙個600mb 的檔案,cd var log rm test.log 然後使用 ls xargs du sh 檢視log目錄下的所有檔案及資料夾的大小 發現 log 目錄減小了 600mb,然後用 df h 檢視磁...

linux下檢視磁碟空間

如果要檢視磁碟還剩多少空間,當然是用df的命令了。root localhost df h 檔案 系統 容量 已用 可用 已用 掛載點 dev sda2 14g 11g 2.6g 82 dev sda1 99m 14m 81m 14 boot tmpfs 442m 275m 168m 63 dev s...

linux下檢視磁碟空間

如果要檢視磁碟還剩多少空間,當然是用df的命令了。root localhost df h 檔案 系統 容量 已用 可用 已用 掛載點 dev sda2 14g 11g 2.6g 82 dev sda1 99m 14m 81m 14 boot tmpfs 442m 275m 168m 63 dev s...