Sau bài này bạn làm được: phân biệt hết block và hết inode; dùng df/du/ncdu có phương pháp; hiểu vì sao xoá file mà df chưa giảm (file đang mở); đề xuất layout partition hợp lý cho server nhỏ; đọc mount option liên quan an toàn và hiệu năng.
df vs du: hai câu hỏi khác nhau
df(disk free): filesystem level — block đã dùng/còn, inode (-i).du(disk usage): directory tree — cộng dồn kích thước file (có thể chậm trên tree lớn).
df -hT /
df -ih /var
du -sh /var/log/* 2>/dev/null | sort -h | tail
Mẹo incident: luôn chạy df -h và df -ih — nhiều lần “không ghi được file” là inode, không phải GB.
Inode exhaustion: khi hàng triệu file nhỏ giết máy
Mỗi file (và một số thực thể khác) tốn một inode. Ứng dụng tạo hàng triệu file nhỏ (cache shard, maildir sai cấu hình, session file) có thể làm df -i về 100% dù df -h vẫn còn GB.
Triệu chứng: No space left on device nhưng df -h không đầy — kiểm tra inode ngay.
File đã “xoá” nhưng process vẫn giữ fd
# Tìm deleted nhưng vẫn mở ( ví dụ log chưa rotate đúng )
sudo lsof +L1 | head
Khi logrotate dùng pattern copy-truncate không đúng, hoặc app không reopen log, dung lượng không trả lại filesystem cho tới khi process đóng fd/restart.
Pattern tốt: copytruncate vs rename + USR1 tuỳ app; với nginx reopen qua signal hoặc reload.
Layout partition: ý tưởng, không phải gospel
| Tách riêng | Lợi | Hại |
|---|---|---|
/var | Log/cache không làm đầy / | phức tạp resize |
/tmp tmpfs | giảm wear SSD / cô lập | RAM pressure nếu job lớn |
/home | user data tách | server thường không cần /home lớn |
Cloud image nhỏ thường một partition — khi đó logrotate + journal limit là phòng tuyến số một.
Filesystem và mount options (rất ngắn gọn)
- ext4 / xfs: phổ biến trên server; xfs mạnh file lớn và parallel IO tuỳ workload.
noatime: giảm write metadata khi đọc file — trade-off với audit access time.nodev,nosuid: trên mount không tin cậy (tmp, nfs từ nguồn lạ).
findmnt -no TARGET,SOURCE,OPTIONS / /var
LVM và snapshot: đủ để đọc doc cloud
LVM cho phép volume group + logical volume — snapshot copy-on-write hữu ích trước khi patch lớn. Nhưng snapshot không thay backup — snapshot trên cùng array vẫn chết cùng array.
Cloud: EBS volume, snapshot theo block — tư duy tương tự nhưng API khác; bài 12 nối backup chiến lược.
Công cụ tìm “ai to béo”
# Nhanh trên một cấp
du -xhd1 /var | sort -h
# ncdu nếu cài — duyệt tương tác
# ncdu /var
/var/lib/docker: layer image có thể phình — cần policy docker system prune (cẩn thận production).
NFS và network filesystem — footgun latency
NFS “treo” có thể làm process vào D state — incident lan sang toàn node. Mount với soft vs hard, timeo, retrans là trade-off mất dữ liệu vs treo — đọc doc và test.
Liên hệ bài trước / sau
Câu hỏi hay gặp
1. “du và df không khớp?”
Mount khác nhau, sparse file, hoặc deleted-but-open file — xem lsof +L1.
2. “Tôi nên dùng btrfs/ZFS không?”
Tuy nhu cầu snapshot/checksum; cloud VM thường đã chọn FS cho bạn — đừng đổi chỉ vì blog post.
3. “Swap trên server?”
Nhiều cloud tắt swap nhỏ; có swap giúp tránh OOM nhẹ nhưng tăng latency — policy theo SLA.
Bài tiếp theo trong loạt
→ Phần 8: Gói phần mềm và chiến lược cập nhật — patch là tính năng, reboot là sự kiện.