VPS

Dọn rác build: vì sao ổ đĩa đầy nhanh bất ngờ

Thanh Nguyễn Đăng 10 phút đọc 7 khối lệnh

Dọn rác build: vì sao ổ đĩa đầy nhanh bất ngờ
Mục lục bài viết
  1. Đo trước khi xóa
  2. Bốn thủ phạm quen mặt
  3. Cẩn thận với ổ dữ liệu Docker
  4. Phân biệt rác với thứ cần giữ
  5. Đặt lịch dọn và cảnh báo
  6. Tìm thư mục ngốn chỗ trước khi xóa
  7. Bảng thủ phạm chiếm ổ và cách dọn từng loại
  8. Cẩn thận với vùng lưu trữ dữ liệu của container
  9. Cảnh báo khi ổ còn dưới 20 phần trăm
  10. Câu hỏi thường gặp
  11. Bài viết liên quan

Trả lời nhanh: Ổ đĩa máy làm việc đầy gần như luôn vì bốn thứ: thư mục thư viện của các dự án cũ, bộ nhớ đệm của công cụ build, ảnh và container Docker không dùng, và các bản dựng trung gian. Cả bốn đều tạo lại được nên xóa an toàn. Điều phải cẩn thận là đừng xóa nhầm bản sao lưu mã nguồn (backup code) hay dữ liệu chưa đẩy lên đâu. Cách làm đúng là đo trước xem cái gì đang chiếm chỗ, rồi mới xóa.

Sáng ra máy chủ báo hết dung lượng và bạn không nhớ mình đã lưu gì. Thực tế phần lớn không phải thứ bạn lưu mà là thứ các công cụ tự sinh ra và không bao giờ tự dọn. Bài này chỉ cách tìm đúng chỗ và dọn mà không mất gì.

Đo trước khi xóa

TerminalĐo trước khi xóabash
# Xem thu muc nao chiem cho, sap giam dandu -h --max-depth=2 / 2>/dev/null | sort -hr | head -20 # Rieng thu muc nhadu -h --max-depth=2 ~ | sort -hr | head -20 # Tim file don le lon nhatfind / -type f -size +500M -exec ls -lh {} + 2>/dev/null | awk '{print $5, $9}'

Lệnh đầu tiên gần như luôn đủ để tìm ra thủ phạm. Chạy nó trước khi xóa bất cứ thứ gì, vì cảm giác của bạn về cái gì đang chiếm chỗ thường sai.

Trên máy chủ, nhớ kiểm tra cả phần nhật ký hệ thống. Một dịch vụ ghi log rất nhiều mà không có xoay vòng có thể một mình ngốn hàng chục GB, và đó là thứ ít ai nghĩ tới đầu tiên.

Bốn thủ phạm quen mặt

Thư mục thư viện của dự án cũ. Mỗi dự án web dễ dàng chiếm vài trăm MB tới hơn một GB. Mười dự án cũ là vài GB nằm không.

TerminalBốn thủ phạm quen mặtbash
# Tim va xoa thu muc thu vien cua cac du an lau khong dungfind ~/du-an -name node_modules -type d -prune -mtime +60 -exec rm -rf {} +

Bộ nhớ đệm của công cụ build. Của trình quản lý gói, của công cụ build Android, của trình biên dịch. Xóa thì lần build sau lâu hơn, nhưng không mất gì.

Docker. Thủ phạm lớn nhất trên máy chủ chạy nhiều thứ. Ảnh cũ, container đã dừng, ổ dữ liệu mồ côi đều nằm lại mãi.

TerminalBốn thủ phạm quen mặtbash
docker system df                    # xem dang chiem bao nhieudocker image prune -a               # xoa anh khong con container nao dungdocker volume ls -qf dangling=true  # xem o du lieu mo coi

Bản dựng trung gian. Thư mục kết quả build của từng dự án, đặc biệt lớn với dự án mobile.

Cẩn thận với ổ dữ liệu Docker

Lệnh xóa ổ dữ liệu mồ côi là chỗ nguy hiểm nhất trong cả bài. Ổ dữ liệu của Docker thường chứa dữ liệu thật: database của môi trường thử, file tải lên, cấu hình dịch vụ.

Một ổ bị coi là mồ côi khi không container nào đang dùng nó. Nhưng container dừng tạm thời cũng khiến ổ của nó trông như mồ côi, và xóa là mất dữ liệu vĩnh viễn.

Quy tắc an toàn: xem danh sách trước, xác định từng ổ là của cái gì, rồi mới xóa từng cái một. Đừng bao giờ chạy lệnh xóa hàng loạt ổ dữ liệu trên máy chủ có dữ liệu thật.

TerminalCẩn thận với ổ dữ liệu Dockerbash
# Xem chi tiet mot o truoc khi quyet dinhdocker volume inspect <ten-o>

Với dữ liệu quan trọng, hãy có bản sao lưu độc lập trước khi dọn dẹp bất cứ thứ gì, theo bài về chu kỳ sao lưu.

Phân biệt rác với thứ cần giữ

Ranh giới rất đơn giản: thứ tạo lại được từ mã nguồn là rác, thứ không tạo lại được thì phải giữ.

Tạo lại được, xóa thoải mái: thư mục thư viện, bộ nhớ đệm, bản dựng trung gian, ảnh Docker.

Không tạo lại được, tuyệt đối giữ:

  • Mã nguồn chưa đẩy lên kho từ xa. Kiểm tra trước khi xóa một thư mục dự án cũ.
  • Bản sao lưu mã nguồn và database. Nếu bạn giữ chúng trên cùng máy, hãy chuyển sang nơi khác thay vì xóa.
  • File cấu hình chứa thông tin không có ở đâu khác.
  • Khóa ký ứng dụng. Mất là không cập nhật được ứng dụng nữa, theo bài về keystore.

Thói quen phù hợp để không phải lo: đẩy mọi thứ đáng giữ lên kho từ xa ngay khi làm xong. Khi đó việc dọn ổ trở thành thao tác không cần suy nghĩ.

Đặt lịch dọn và cảnh báo

TerminalĐặt lịch dọn và cảnh báobash
#!/usr/bin/env bash# Don rac hang tuan tren may devset -e # Thu vien cua du an lau khong dungfind ~/du-an -name node_modules -type d -prune -mtime +60 -exec rm -rf {} + 2>/dev/null # Anh Docker khong con dung, giu lai 30 ngay gan nhatdocker image prune -af --filter "until=720h" # Cache cua trinh quan ly goinpm cache clean --force 2>/dev/null || true # Canh bao khi o con duoi 15 phan tramdf -h / | awk 'NR==2 && $5+0 > 85 {print "Canh bao: o dia da dung " $5}'

Đặt chạy hằng tuần và gửi kết quả vào kênh nội bộ của đội. Cảnh báo sớm quan trọng hơn việc dọn: ổ đầy giữa lúc đang triển khai là sự cố khó chịu hơn nhiều so với việc mất vài phút dọn theo lịch.

Với máy chạy CI, phần dọn cần chặt tay hơn vì tốc độ tích tụ nhanh hơn nhiều, chi tiết nằm ở bài về cache build. Và nếu bạn thấy mình dọn liên tục mà vẫn đầy, đó là dấu hiệu nên nâng dung lượng thay vì tiếp tục vật lộn.

Tìm thư mục ngốn chỗ trước khi xóa

TerminalTìm thư mục ngốn chỗ trước khi xóabash
# 1. Xem thu muc nao lon nhatdu -h --max-depth=1 / 2>/dev/null | sort -h | tail -15du -sh ~/.cache ~/.npm ~/.gradle ~/.m2 2>/dev/null # 2. Docker thuong la thu pham lon nhatdocker system dfdocker system df -v | head -30 # 3. Nhat ky he thongjournalctl --disk-usagedu -sh /var/log # 4. Tim file lon nhat tren ofind / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null | head -20 # 5. File da bi xoa nhung tien trinh van giu (o van day du da xoa)lsof +L1 2>/dev/null | head -10

Lệnh cuối giải thích một tình huống khó hiểu: bạn xóa tệp lớn mà dung lượng trống không tăng. Nguyên nhân là một tiến trình vẫn đang mở tệp đó, và chỉ khi khởi động lại tiến trình thì chỗ mới được trả về.

Bảng thủ phạm chiếm ổ và cách dọn từng loại

Thủ phạmCách dọnRủi ro
Ảnh và vùng lưu trữ container cũLệnh dọn có bộ lọc thời gianCẩn thận với vùng lưu trữ chứa dữ liệu
Bộ nhớ đệm thư việnXóa theo thời gian truy cậpThấp, chỉ tải lại
Nhật ký hệ thống và nhật ký ứng dụngĐặt giới hạn kích thướcThấp
Kết quả dựng và tệp tạm của dự ánXóa thư mục kết quảThấp

Cẩn thận với vùng lưu trữ dữ liệu của container

TerminalCẩn thận với vùng lưu trữ dữ liệu của containerbash
# Lenh don manh nhat cung xoa CA vung luu tru khong gan voi container nao.# Neu ban vua dung mot container chua co so du lieu ma chua khoi dong lai,# vung luu tru cua no bi tinh la khong gan va se bi xoa. # An toan hon: xem truoc roi moi xoadocker volume ls -f dangling=true # Chi xoa anh va container, giu nguyen vung luu trudocker system prune -a --filter "until=168h" # Chi xoa vung luu tru khi da chac chandocker volume rm TEN_VUNG_CU_THE

Cảnh báo khi ổ còn dưới 20 phần trăm

  • Cảnh báo khi ổ còn dưới 20% là thứ đáng giá nhất trong toàn bộ bài. Ổ đầy làm mọi dịch vụ trên máy cùng chết, và đó là sự cố mất nhiều thời gian khắc phục nhất.
  • Đặt tác vụ dọn hằng tuần, có bộ lọc thời gian để không xóa thứ vừa dùng.
  • Đặt giới hạn kích thước nhật ký ngay từ khi dựng máy, đừng đợi nó phình rồi mới xử.
  • Ghi lại dung lượng theo tuần để thấy xu hướng, thay vì chỉ phát hiện khi đã đầy.

Câu hỏi thường gặp

Xóa thư mục thư viện của dự án có sao không?

Không sao, nó tạo lại được bằng một lệnh cài đặt từ file khai báo trong repo. Chỉ mất thời gian tải lại ở lần chạy tiếp theo. Đây là thứ an toàn nhất để xóa khi cần dung lượng gấp.

Lệnh dọn Docker nào an toàn?

Xóa ảnh không còn container nào dùng là an toàn. Xóa ổ dữ liệu thì phải cẩn thận vì chúng có thể chứa database hoặc file thật. Hãy xem chi tiết từng ổ trước khi quyết định.

Vì sao ổ đầy mà tôi không lưu gì nhiều?

Vì các công cụ tự sinh ra rất nhiều dữ liệu trung gian và không tự dọn. Chạy lệnh đo dung lượng theo thư mục là thấy ngay, thường là thư viện dự án, bộ nhớ đệm build và Docker.

Bao lâu nên dọn một lần?

Đặt tác vụ tự động hằng tuần cho máy dev và máy CI, kèm cảnh báo khi ổ vượt 85 phần trăm. Nếu bạn phải dọn liên tục mà vẫn đầy thì nên nâng dung lượng thay vì tiếp tục dọn.

Chia sẻ:Facebook

Thanh Nguyễn

TND

Tư vấn bản quyền, VPS và máy chủ kèm hóa đơn VAT, hợp đồng đầy đủ cho doanh nghiệp.