檔案系統已滿 - 除非不是

檔案系統已滿 - 除非不是

我有一個 Solaris 8 機器,報告檔案系統已滿:

db% tail -2 /var/adm/messages
Nov 22 08:32:27 db ufs: [ID 845546 kern.notice] NOTICE: alloc: /u03: file system full
Nov 22 08:34:51 db last message repeated 12 times

但 df 說它沒有用完空閒塊,也沒有用完空閒 inode:

db% df -k /u03
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/md/dsk/d6       282330903 254957403 24550191    92%    /u03
db% df -o i /u03
Filesystem             iused   ifree  %iused  Mounted on
/dev/md/dsk/d6      29663278 4230866    88%   /u03

所以我想也許某個進程正在將打開的檔案描述符保存到 20+GB 的已刪除檔案。但是 lsof 按大小排序,沒有報告超過 2GB 的內容,這是一個合法文件:

db% lsof /u03 | sort -n +6
COMMAND     PID     USER   FD   TYPE DEVICE   SIZE/OFF     NODE NAME
[...]
oracle     1257   oracle  278u  VREG   85,6 2097160192  9685782 /u03/oradata/(redacted)/data/foo_tab_14.dbf
db%

我很感激任何指向任何其他資源的指針,保存可用區塊和索引節點,其耗盡可以填滿檔案系統,或「隱藏」使用的區塊/索引節點的其他方式,或任何人有的任何其他想法。重新啟動此機器或關閉 oracle 不是有效的調查選項。

編輯:哈立德,我當時不能。我無法發布輸出,因為其中一位 DBA 已釋放了大約 4GB,這意味著機器可以繼續運行,如果我再次「填滿」作為測試,事情就會崩潰。但這是 24 小時內第二次達到約 92% 並「填滿」(例如,無法建立新文件,並/var/adm/messages報告「文件系統已滿」),是的,當發生這種情況時,肯定會發生這種情況。

答案1

檢查該nbfree

fstyp -v | head -18

如果這說明價值較低,我發現這篇博文可能對你有幫助。我引用帖子的開頭:

在工作中,我們有一個帶有 UFS 的 Solaris 8,它告訴應用程式它無法建立新檔案。 df 命令顯示有足夠的空閒 inode,並且 FS 中也有足夠的可用空間。應用程式出現錯誤的原因是,雖然仍有大量空閒碎片,但已經沒有可用的空閒區塊了。您不能只使用片段建立新文件,每個新文件至少需要有一個空閒區塊。

若要查看 UFS 的空閒區塊數,您可以呼叫“fstyp -v | head -18”,看看“nbfree”後面的值。

相關內容