Process

找出哪個程序在硬碟驅動器上打開了在目錄樹中不再可見的數據

  • January 1, 2019

在我的伺服器上,根分區為 73GB,但磁碟顯示已滿,儘管該設備上僅使用了大約 6GB:

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
udev                        997M     0  997M   0% /dev
tmpfs                       202M   41M  162M  20% /run
/dev/mapper/p22server-root   73G   68G  655M 100% /

(我在伺服器上使用 LVM:)/dev/mapper/p22server-root -> ../dm-0如果我檢查

ncdu -x /

我發現總使用量只有 5.9GB。

我的猜測是,必須有文件仍然打開,在文件樹中不可見。

我該如何調試呢?我想,重新啟動將恢復失去的空間,但現在無法重新啟動。

有兩種可能:

  1. 某些程序仍然打開已刪除的文件

您可以使用 . 查看所有打開的文件lsof。例如,這些是顯示的類型lsof以及它們在輸出中出現的頻率:

# lsof|cut -c50-54|sort|uniq -c
375  CHR 
610  DIR 
211 FIFO 
 32 IPv4 
 17 IPv6 
 40 link 
419 node 
152 nown 
6008  REG 
  9 sock 
598 unix 

這僅顯示文件描述符列 (FD):

# lsof|awk -v field="FD" 'NR==1 {c = index($0,field)} {print substr($0,c-1,length(field)+4)}'|sort|uniq -c|sort -n|tail

DEL在 的輸出中查找具有該值的文件lsof以獲取提示。


2.文件隱藏在掛載點後面

但更有可能的是,這些文件只是由於掛載點而“隱藏”了,當大量文件儲存在掛載文件夾中時沒有使用該掛載點,現在它們對ncdu.

將根目錄掛載到另一個位置並分析:

mkdir /temp-root
mount --bind / /temp-root
ncdu -x /temp_root

如果您的懷疑屬實,您可能會更輕鬆地使用lsof

在輸出中查找“(已刪除)”或類似內容。

引用自:https://unix.stackexchange.com/questions/491685