Disk / filesystem 監控¶
Sysadmin 早晨問題:有東西滿了嗎?什麼在吃空間?
本頁紀錄 disk 相關 helper 與 tv disk channel。完整對照表見
helpers.md。
為什麼在意¶
凌晨 3 點會吵醒你的三種失敗模式:
- Disk full (
No space left on device) —disk_full_action = halt時 auditd 會 panic kernel。多數其他 daemon 只是安靜停止接受寫入。 - Inode 用盡 — disk 有空間但
touch foo失敗,因為 inode 表滿了。 常見於建大量小檔的 app(mail spool、調差的 cache)。 - Mount 掉了 / mount option 錯了 — 路徑還在但不在你以為的地方,或
被改成
nosuid,nodev(手動 remount 後的 security regression)。
Helper 涵蓋三者。
快速 CLI¶
disk-usage # 每 mount df,色階綠/黃/紅
disk-inodes # 每 mount inode 用量
disk-largest /var # /var 下第一層最大子項
disk-largest /var/log --top 10 # 經典 /var/log 分流
mount-info # active mount + /etc/fstab
disk-watch / # 即時 root mount 用量
disk-largest 在路徑是 root-owned 時自動 sudo -v 提權(例如
disk-largest /var/lib/docker)。跟 audit helper 同一踩雷:這些是 shell
function,所以 sudo disk-largest … 不行;用 sudo -v 預熱
cache 一次,之後 helper 自己處理。
互動:tv disk¶
Ctrl+S 切 5 個來源:每 mount df → inode → /var /home /tmp /opt /srv
下最大目錄 → active mount → >100M 最大檔。預覽路徑感知(dir 用 du
--max-depth=1、file 用 ls -lh + file)。Enter yazi 開 dir 或 less
開 file。Alt+E 編 /etc/fstab。Alt+T tail
dmesg -wT --color=always 即時抓 ENOSPC 與 I/O error。
每日 / 每週食譜¶
早晨掃描¶
兩個都綠就 5 秒搞定。disk-usage 出紅:
tv disk 鑽入階段更快,因為路徑感知預覽省掉第二次 disk-largest。
/var/log 滿了¶
常見嫌犯:
journal/—sudo journalctl --vacuum-size=200M設上限。*.log.1.gz累積 — logrotate 設定錯,或 service 沒收到 reopen 信號。audit/— auditd;按 auditd.md 調max_log_file/num_logs。
Disk 有空間但 touch foo 失敗¶
inode 用盡:
找 IUse% >= 95%。要找兇手(百萬小檔):
sudo find / -xdev -type d -exec sh -c 'echo "$(ls -A "$1" 2>/dev/null | wc -l) $1"' _ {} \; 2>/dev/null \
| sort -rn | head -20
(大檔系統很慢;離峰跑。)
Mount 審計¶
看:
/homemount 沒帶nosuid,nodev— 提權面。/tmpmount 沒帶noexec,nosuid,nodev— 攻擊者常用 drop 點。/etc/fstab裡該 mount 但不在 active 清單的 — 開機 mount 失敗。
注意事項¶
- macOS 沒有
df -hT— helper template 在 Darwin 改用df -h。 du --max-depth=1是 GNU 擴展 — macOS BSDdu用-d 1。 Helper 用--max-depth=1(可行因為本 repo 的 Brewfile 在 macOS 預設 裝 GNU coreutils 把du蓋掉);純 macOS 沒 coreutils 會 reject。 解:brew install coreutils(用本 repo 的 Brewfile 已裝過)。disk-largest不跟 mount 邊界 除非你叫它跟。預設du把 mount 的子目錄算進 parent 的 total。要 per-filesystem 用du -x。dmesg多數現代 kernel 需 root (kernel.dmesg_restrict=1)。tv disk的Alt+T透過 sudo 呼叫。
另見¶
- auditd 框架 —
disk_full_action政策 - 本 repo 提供的 helper
- Cookbook recipe 12 — disk + firewall + scheduled-jobs 合一週掃