我有一個 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”後面的值。