Chào bạn, Bùi Mạnh Đức đây. Quản lý dung lượng lưu trữ là một kỹ năng quan trọng đối với bất kỳ ai làm việc với máy chủ Linux. Việc ổ cứng bị đầy đột ngột có thể gây ra nhiều vấn đề nghiêm trọng, từ việc các ứng dụng không thể ghi log, website ngừng hoạt động cho đến cả hệ thống không thể khởi động. Hiểu rõ dung lượng mỗi thư mục đang chiếm dụng giúp bạn chủ động hơn trong việc dọn dẹp, tối ưu và lập kế hoạch nâng cấp hệ thống. Tuy nhiên, với những người mới, việc thao tác qua dòng lệnh có thể khá bỡ ngỡ. Trong bài viết này, Đức sẽ hướng dẫn chi tiết cách sử dụng các lệnh du và df – hai công cụ dòng lệnh mạnh mẽ và phổ biến nhất để kiểm tra dung lượng thư mục và ổ đĩa trên Linux một cách chính xác và hiệu quả.
Giới thiệu về kiểm tra dung lượng thư mục trong Linux
Việc kiểm tra dung lượng thư mục trên Linux không chỉ đơn thuần là xem còn bao nhiêu GB trống. Đây là một tác vụ quản trị hệ thống nền tảng, giúp đảm bảo hiệu suất và sự ổn định. Khi không gian lưu trữ cạn kiệt, hệ thống của bạn có thể đối mặt với nhiều rủi ro nghiêm trọng như ứng dụng bị treo, cơ sở dữ liệu không thể ghi dữ liệu mới, và thậm chí là lỗi hệ thống toàn diện. Đặc biệt với các máy chủ web hay VPS, việc các file log, bản sao lưu hoặc dữ liệu người dùng tăng đột biến mà không được kiểm soát có thể nhanh chóng làm đầy ổ cứng.
Thách thức lớn nhất là xác định chính xác “thủ phạm” gây tốn dung lượng nằm ở đâu trong cây thư mục phức tạp của Linux. Rất may, Linux cung cấp sẵn các công cụ dòng lệnh cực kỳ hiệu quả để giải quyết vấn đề này. Hai trong số những công cụ phổ biến và mạnh mẽ nhất là du (disk usage) và df (disk free). Lệnh du giúp bạn tính toán dung lượng của từng thư mục và file cụ thể, trong khi df cung cấp cái nhìn tổng quan về dung lượng đã sử dụng và còn trống trên toàn bộ hệ thống file.
Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu sâu về cách sử dụng hai lệnh này. Đức sẽ hướng dẫn bạn từ cú pháp cơ bản, các tùy chọn quan trọng để kết quả hiển thị dễ đọc hơn, cho đến những mẹo nâng cao kết hợp các lệnh với nhau để phân tích và quản lý không gian lưu trữ một cách chuyên nghiệp.

Sử dụng lệnh du để kiểm tra dung lượng thư mục
Lệnh du (viết tắt của “disk usage”) là công cụ không thể thiếu khi bạn muốn biết dung lượng chính xác mà một thư mục hoặc một file đang chiếm dụng. Nó hoạt động bằng cách đi sâu vào từng thư mục con và file bên trong đường dẫn bạn chỉ định, sau đó tính tổng dung lượng của chúng.
Giới thiệu lệnh du và chức năng chính
Chức năng cốt lõi của du là quét và báo cáo dung lượng sử dụng của các file và thư mục. Khi bạn chạy lệnh này trên một thư mục, nó sẽ đệ quy xuống tất cả các thư mục con, tính toán dung lượng của từng mục và cuối cùng đưa ra tổng dung lượng. Điều này cực kỳ hữu ích khi bạn cần xác định xem thư mục nào đang chiếm nhiều không gian nhất trên ổ đĩa.
Cú pháp cơ bản của lệnh rất đơn giản, giúp bạn dễ dàng làm quen và sử dụng ngay lập tức. Bạn chỉ cần gõ du và theo sau là đường dẫn đến thư mục hoặc file bạn muốn kiểm tra.
Cú pháp tổng quát như sau:
du [tùy chọn] [đường_dẫn]
Nếu bạn không chỉ định đường dẫn nào, lệnh du sẽ mặc định kiểm tra dung lượng của thư mục hiện tại mà bạn đang đứng. Kết quả mặc định thường hiển thị dưới dạng các khối (blocks), có thể hơi khó đọc. Đó là lý do vì sao chúng ta cần đến các tùy chọn đi kèm để định dạng lại kết quả.
Các tùy chọn phổ biến của lệnh du
Để lệnh du trở nên hữu dụng và thân thiện hơn, bạn nên kết hợp nó với các tùy chọn (flags). Mỗi tùy chọn sẽ thay đổi cách lệnh hoạt động và hiển thị kết quả, giúp bạn có được thông tin mình cần một cách nhanh chóng.
Dưới đây là những tùy chọn quan trọng và được sử dụng thường xuyên nhất:
-h (human-readable): Đây có lẽ là tùy chọn hữu ích nhất. Nó sẽ hiển thị dung lượng dưới các đơn vị mà con người dễ đọc như Kilobytes (K), Megabytes (M), Gigabytes (G) thay vì các khối dung lượng mặc định. Ví dụ: du -h /var/log. Tham khảo thêm các kiến thức RAM là gì liên quan tới hiệu suất hệ thống.

-s (summarize): Tùy chọn này yêu cầu du chỉ hiển thị tổng dung lượng của thư mục được chỉ định, thay vì liệt kê chi tiết dung lượng của từng thư mục con bên trong. Điều này rất tiện lợi khi bạn chỉ muốn biết tổng dung lượng của một thư mục lớn. Ví dụ: du -sh /home/username.

-a (all files): Ngược lại với -s, tùy chọn -a sẽ yêu cầu du hiển thị dung lượng của tất cả các file, không chỉ các thư mục. Bạn sẽ thấy một danh sách chi tiết dung lượng của từng file riêng lẻ cùng với các thư mục con. Ví dụ: du -ah /etc.
--max-depth=N: Tùy chọn này cho phép bạn giới hạn độ sâu của cây thư mục mà du sẽ quét và hiển thị. Ví dụ, --max-depth=1 sẽ chỉ hiển thị dung lượng của các thư mục và file ngay bên trong đường dẫn bạn chỉ định, không đi sâu hơn. Điều này giúp kết quả gọn gàng và dễ phân tích hơn. Ví dụ: du -h --max-depth=1 /var. Để tìm hiểu thêm về hệ điều hành nổi bật, bạn có thể xem bài viết về Hệ điều hành Ubuntu là gì.
Bằng cách kết hợp các tùy chọn này, bạn có thể tùy chỉnh lệnh du để có được báo cáo dung lượng chính xác theo nhu cầu của mình. Ví dụ, lệnh du -sh --max-depth=1 /var/www sẽ cho bạn biết tổng dung lượng của từng thư mục website một cách rõ ràng và dễ hiểu.
Sử dụng lệnh df để kiểm tra dung lượng đĩa và thư mục
Trong khi du tập trung vào dung lượng của từng thư mục, df (viết tắt của “disk free”) lại cho bạn một bức tranh toàn cảnh về không gian lưu trữ trên toàn bộ hệ thống. Nó báo cáo dung lượng đã sử dụng, dung lượng còn trống và tổng dung lượng của các hệ thống file (filesystem) được gắn kết vào máy chủ của bạn.
Giới thiệu lệnh df và ứng dụng trong kiểm tra dung lượng hệ thống
Chức năng chính của df là hiển thị thông tin về việc sử dụng không gian đĩa của các phân vùng. Khi bạn cần kiểm tra nhanh xem ổ cứng còn bao nhiêu dung lượng trống, hoặc một phân vùng cụ thể nào đó sắp đầy hay chưa, df chính là lệnh bạn cần. Nó lấy thông tin trực tiếp từ siêu dữ liệu của hệ thống file, nên hoạt động rất nhanh.
Cú pháp cơ bản của lệnh df cũng rất đơn giản:
df [tùy chọn] [đường_dẫn]
Nếu bạn chạy lệnh df mà không có tùy chọn hay đường dẫn nào, nó sẽ liệt kê thông tin của tất cả các hệ thống file đang được gắn kết.
Sự khác biệt cốt lõi giữa df và du là:
df hoạt động ở cấp độ hệ thống file (phân vùng), báo cáo tổng dung lượng được cấp phát.
du hoạt động ở cấp độ file và thư mục, tính toán dung lượng thực tế mà các file đang chiếm dụng.
Đôi khi, bạn có thể thấy sự chênh lệch nhỏ giữa kết quả của df và du. Điều này có thể xảy ra do các file đã bị xóa nhưng vẫn đang được một tiến trình nào đó sử dụng, khiến không gian chưa được giải phóng hoàn toàn trên hệ thống file.

Các tùy chọn quan trọng của lệnh df
Tương tự như du, lệnh df cũng có các tùy chọn giúp kết quả trở nên dễ đọc và cung cấp thêm thông tin hữu ích.
Dưới đây là các tùy chọn bạn nên biết:
-h (human-readable): Giống hệt với du, tùy chọn này định dạng kết quả đầu ra sang các đơn vị GB, MB, KB để bạn dễ dàng nắm bắt thông tin. Đây là tùy chọn gần như luôn được sử dụng. Ví dụ: df -h.
-T (print-type): Tùy chọn này sẽ thêm một cột “Type” vào kết quả, cho bạn biết kiểu của từng hệ thống file (ví dụ: ext4, xfs, nfs…). Thông tin này hữu ích khi bạn quản lý một hệ thống phức tạp với nhiều loại phân vùng khác nhau. Ví dụ: df -hT.
-i (inodes): Ngoài dung lượng lưu trữ, một hệ thống file còn có một giới hạn khác là số lượng inode. Mỗi file hoặc thư mục trên hệ thống sẽ sử dụng một inode. Tùy chọn -i giúp bạn kiểm tra thông tin sử dụng inode. Điều này quan trọng vì ngay cả khi bạn còn nhiều dung lượng trống, hệ thống vẫn có thể gặp lỗi nếu hết inode. Ví dụ: df -i.
Bằng cách sử dụng df -h, bạn có thể nhanh chóng có cái nhìn tổng quan về tình trạng sức khỏe của các ổ đĩa trên máy chủ, từ đó đưa ra các quyết định quản trị kịp thời.
Hướng dẫn phân tích và hiểu kết quả kiểm tra dung lượng
Chạy lệnh chỉ là bước đầu tiên. Điều quan trọng hơn là phải hiểu được những con số mà du và df trả về. Việc phân tích đúng kết quả sẽ giúp bạn xác định chính xác vấn đề và đưa ra hành động phù hợp.
Hiểu ý nghĩa các cột trong kết quả lệnh du và df
Khi bạn chạy lệnh df -h, bạn thường sẽ thấy các cột sau:
- Filesystem: Tên của phân vùng hoặc thiết bị lưu trữ.
- Size: Tổng dung lượng của phân vùng.
- Used: Dung lượng đã sử dụng.
- Avail: Dung lượng còn trống cho người dùng thông thường (không tính phần dự trữ cho root).
- Use%: Tỷ lệ phần trăm dung lượng đã sử dụng.
- Mounted on: Thư mục mà phân vùng này được gắn vào.
Dấu hiệu cảnh báo rõ ràng nhất là khi cột Use% vượt quá 80-90%. Đây là lúc bạn cần phải hành động trước khi ổ cứng bị đầy hoàn toàn.
Đối với lệnh du -h, kết quả đơn giản hơn, thường chỉ có hai cột:
- Cột đầu tiên: Dung lượng của file hoặc thư mục.
- Cột thứ hai: Tên của file hoặc thư mục đó.
Khi xem kết quả của du, bạn cần chú ý đến những dòng có con số dung lượng lớn bất thường. Đó chính là những “ứng cử viên” hàng đầu cho việc dọn dẹp.

Phân tích trường hợp thực tế và áp dụng kết quả để quản lý hiệu quả
Hãy xem xét một ví dụ thực tế. Giả sử lệnh df -h cho thấy phân vùng / (root) của bạn đã sử dụng đến 95%. Đây là một tình huống khẩn cấp. Bước tiếp theo là sử dụng du để tìm ra thủ phạm.
Bạn có thể bắt đầu bằng lệnh: du -h --max-depth=1 /
Lệnh này sẽ hiển thị tổng dung lượng của từng thư mục cấp một trong hệ thống. Giả sử bạn thấy thư mục /var chiếm dung lượng lớn nhất.
Bây giờ, bạn tiếp tục đi sâu hơn: du -h --max-depth=1 /var
Kết quả có thể cho thấy /var/log là thư mục con chiếm nhiều dung lượng nhất.
Tiếp tục điều tra: du -h /var/log
Bạn có thể phát hiện ra một vài file log có dung lượng lên tới vài GB do một ứng dụng nào đó đang gặp lỗi và ghi log liên tục.
Dựa trên kết quả phân tích này, bạn có thể đưa ra quyết định:
- Dọn dẹp: Xóa các file log cũ không cần thiết hoặc nén chúng lại.
- Khắc phục: Tìm và sửa lỗi của ứng dụng để nó không còn tạo ra file log khổng lồ.
- Di chuyển: Nếu dữ liệu quan trọng, bạn có thể di chuyển nó sang một phân vùng khác còn nhiều dung lượng hơn.
- Mở rộng: Nếu dung lượng thực sự cần thiết, bạn cần lên kế hoạch mở rộng ổ đĩa.
Quá trình phân tích từ tổng quan (df) đến chi tiết (du) như vậy giúp bạn quản lý không gian lưu trữ một cách hệ thống và hiệu quả.
Các mẹo và công cụ dòng lệnh hữu ích khác
Ngoài những cách sử dụng cơ bản, bạn có thể kết hợp du và df với các lệnh khác để tạo ra những báo cáo mạnh mẽ hơn. Đồng thời, có những công cụ chuyên dụng khác giúp việc quản lý dung lượng trở nên trực quan và dễ dàng hơn.
Mẹo nâng cao khi kiểm tra dung lượng thư mục
Sức mạnh của dòng lệnh Linux nằm ở khả năng kết hợp các công cụ nhỏ lại với nhau. Đây là một vài mẹo nâng cao giúp bạn làm việc hiệu quả hơn.
Tìm các thư mục lớn nhất:
Đây là một trong những tác vụ phổ biến nhất. Bạn có thể kết hợp du với lệnh sort (để sắp xếp) và head (để lấy vài dòng đầu tiên) để nhanh chóng tìm ra những thư mục chiếm nhiều dung lượng nhất.
Câu lệnh thần thánh này sẽ là người bạn đồng hành của bạn:
du -h /path/to/check | sort -hr | head -n 10
Giải thích lệnh:
du -h /path/to/check: Tính dung lượng của các thư mục.
|: Đây là “pipe”, nó chuyển đầu ra của lệnh bên trái thành đầu vào cho lệnh bên phải.
sort -hr: Sắp xếp kết quả. -h để nó hiểu các đơn vị (G, M, K), -r để sắp xếp theo thứ tự giảm dần (lớn nhất lên đầu).
head -n 10: Chỉ lấy 10 dòng đầu tiên của kết quả đã sắp xếp.

Sử dụng grep để lọc kết quả:
Nếu bạn chỉ quan tâm đến một loại thư mục hoặc file cụ thể, bạn có thể dùng grep để lọc. Ví dụ, để tìm dung lượng của tất cả các file log trong thư mục /var/log:
du -h /var/log/* | grep '\.log'
Những mẹo nhỏ này giúp bạn tiết kiệm rất nhiều thời gian và nhanh chóng khoanh vùng được khu vực cần chú ý.
Giới thiệu một số công cụ hỗ trợ khác như ncdu, baobab
Mặc dù du và df rất mạnh mẽ, đôi khi giao diện dòng lệnh thuần túy có thể hơi khó nhìn. Có những công cụ khác được xây dựng để cung cấp một giao diện thân thiện hơn.
ncdu (NCurses Disk Usage):
Đây là một phiên bản nâng cấp của du với giao diện người dùng dựa trên văn bản (text-based user interface). Sau khi quét một thư mục, ncdu sẽ hiển thị một danh sách các file và thư mục được sắp xếp theo dung lượng. Bạn có thể dễ dàng điều hướng qua lại giữa các thư mục bằng phím mũi tên, xem dung lượng, và thậm chí xóa file/thư mục không cần thiết ngay trong giao diện của ncdu.
Để cài đặt và sử dụng (trên Ubuntu/Debian):
sudo apt update
sudo apt install ncdu
ncdu /path/to/check

baobab (Disk Usage Analyzer):
Nếu bạn đang sử dụng phiên bản Linux Desktop có giao diện đồ họa (GUI) như Ubuntu, baobab là một công cụ tuyệt vời. Nó sẽ quét ổ đĩa của bạn và hiển thị kết quả dưới dạng biểu đồ tròn (ring chart) trực quan. Bạn có thể dễ dàng thấy được thư mục nào đang chiếm phần lớn dung lượng và nhấp vào để xem chi tiết bên trong. Đây là lựa chọn lý tưởng cho những ai thích sự trực quan của đồ họa.
Những công cụ này không thay thế du và df nhưng là sự bổ sung tuyệt vời, giúp bạn có nhiều lựa chọn hơn trong việc quản lý không gian lưu trữ của mình.
Các vấn đề thường gặp và cách khắc phục
Trong quá trình sử dụng du và df, đôi khi bạn có thể gặp phải những kết quả không như mong đợi. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn tự tin hơn khi xử lý các tình huống này.
Kết quả lệnh du không hiển thị đúng dung lượng
Một trong những vấn đề phổ biến là du báo cáo dung lượng thấp hơn so với thực tế, hoặc bỏ qua một số thư mục.
Nguyên nhân:
- Quyền truy cập (Permission Denied): Nguyên nhân hàng đầu là do người dùng hiện tại không có quyền đọc các thư mục mà bạn đang cố gắng quét. Khi đó,
du sẽ bỏ qua các thư mục này và không tính chúng vào tổng dung lượng, dẫn đến kết quả bị sai lệch.
- Liên kết tượng trưng (Symbolic Links): Mặc định,
du chỉ tính dung lượng của bản thân file liên kết chứ không tính dung lượng của file/thư mục mà nó trỏ tới. Điều này thường là hành vi mong muốn, nhưng đôi khi có thể gây nhầm lẫn.
Cách khắc phục:
- Chạy với quyền
sudo: Để giải quyết vấn đề quyền truy cập, cách đơn giản nhất là chạy lệnh du với sudo ở phía trước. Điều này sẽ cấp cho lệnh quyền quản trị cao nhất, cho phép nó truy cập và đọc tất cả các file và thư mục trên hệ thống. Ví dụ: sudo du -sh /var/cache. Tham khảo thêm về Kernel là gì để hiểu sâu hệ thống Linux.
- Xử lý symlink: Nếu bạn thực sự muốn
du tính cả dung lượng của file/thư mục mà symlink trỏ tới, bạn có thể sử dụng tùy chọn -L. Ví dụ: du -shL /path/with/symlinks. Hãy cẩn thận khi dùng tùy chọn này vì nó có thể tính trùng dung lượng nếu có nhiều liên kết trỏ đến cùng một nơi.

Lệnh df báo cáo dung lượng sai lệch so với thực tế
Đôi khi, bạn đã xóa một file rất lớn nhưng lệnh df vẫn không báo cáo dung lượng trống tăng lên.
Nguyên nhân:
- File đang được sử dụng (Open File Descriptors): Đây là nguyên nhân phổ biến nhất trên Linux. Khi bạn xóa một file (ví dụ, một file log lớn) mà vẫn còn một tiến trình (ví dụ, một web server) đang mở và ghi vào file đó, hệ thống sẽ chỉ xóa tên file khỏi thư mục. Tuy nhiên, không gian đĩa thực tế sẽ không được giải phóng cho đến khi tiến trình đó đóng file lại. Lệnh
du sẽ không thấy file đó nữa, nhưng df vẫn thấy không gian bị chiếm dụng.
- Hệ thống file bị lỗi: Trong một số trường hợp hiếm gặp, hệ thống file có thể bị lỗi (corruption), dẫn đến việc báo cáo dung lượng không chính xác.
Giải pháp:
- Khởi động lại dịch vụ liên quan: Cách giải quyết an toàn nhất cho vấn đề file đang mở là xác định dịch vụ nào đang giữ file đó và khởi động lại nó. Ví dụ, nếu đó là file log của Nginx, bạn có thể chạy
sudo systemctl restart nginx. Việc khởi động lại sẽ buộc dịch vụ phải đóng tất cả các file đang mở, và không gian lưu trữ sẽ được giải phóng.
- Sử dụng
lsof để tìm tiến trình: Bạn có thể dùng lệnh lsof | grep '(deleted)' để tìm các tiến trình đang giữ những file đã bị xóa. Lệnh này sẽ cho bạn biết PID của tiến trình, từ đó bạn có thể quyết định khởi động lại hoặc dừng nó.
- Kiểm tra hệ thống file: Nếu nghi ngờ phân vùng bị lỗi, bạn có thể sử dụng công cụ
fsck (file system check) để kiểm tra và sửa lỗi. Tuy nhiên, tác vụ này thường yêu cầu bạn phải ngắt kết nối (unmount) phân vùng trước, nên cần được thực hiện một cách cẩn thận, tốt nhất là trong chế độ bảo trì.
Những lưu ý khi kiểm tra dung lượng thư mục trên Linux
Sử dụng các lệnh kiểm tra dung lượng là tác vụ thường xuyên, nhưng bạn cũng cần tuân thủ một vài nguyên tắc để đảm bảo an toàn và hiệu quả cho hệ thống.
- Luôn kiểm tra quyền truy cập trước khi chạy lệnh: Như đã đề cập, việc thiếu quyền có thể dẫn đến kết quả không chính xác. Nếu bạn không chắc chắn, hãy sử dụng
sudo. Tuy nhiên, hãy ý thức rằng bạn đang chạy lệnh với quyền cao nhất.
- Tránh xóa dữ liệu quan trọng khi chưa xác định rõ: Khi phát hiện một thư mục lớn, đừng vội vàng dùng lệnh
rm -rf. Hãy dành thời gian để kiểm tra xem nội dung bên trong là gì. Đó có thể là dữ liệu quan trọng của ứng dụng, cơ sở dữ liệu, hoặc các file hệ thống. Luôn sao lưu trước khi thực hiện các hành động xóa không thể phục hồi.
- Hạn chế chạy lệnh trên các thư mục hệ thống nhạy cảm trong giờ cao điểm: Chạy lệnh
du trên một thư mục rất lớn (như toàn bộ thư mục gốc /) có thể tiêu tốn nhiều tài nguyên I/O của đĩa. Trên một máy chủ đang hoạt động với tải cao, việc này có thể làm giảm hiệu suất của các ứng dụng khác. Hãy cân nhắc chạy các lệnh quét sâu và rộng vào những thời điểm ít tải hơn.
- Hiểu rằng
du và df có mục đích khác nhau: Đừng hoang mang khi thấy kết quả của chúng không hoàn toàn khớp nhau. Hãy nhớ, df cho biết sức khỏe của phân vùng, trong khi du cho biết dung lượng thực tế của các file bạn có thể thấy. Cả hai đều cung cấp những thông tin giá trị bổ sung cho nhau.

Kết luận
Qua bài viết này, hy vọng bạn đã có một cái nhìn toàn diện và chi tiết về cách kiểm tra dung lượng thư mục trên Linux. Việc quản lý không gian lưu trữ là một kỹ năng cơ bản nhưng cực kỳ quan trọng, giúp đảm bảo hệ thống của bạn luôn hoạt động ổn định và hiệu quả. Nắm vững cách sử dụng các lệnh du và df cùng các tùy chọn của chúng chính là chìa khóa để bạn làm chủ được kỹ năng này.
Hãy nhớ rằng, df giúp bạn có cái nhìn tổng quan về các phân vùng, trong khi du là công cụ để bạn “lặn sâu” vào từng thư mục để tìm ra nguyên nhân gây tốn dung lượng. Bằng cách kết hợp chúng với các lệnh khác như sort, head và các công cụ hỗ trợ như ncdu, bạn sẽ có trong tay một bộ công cụ mạnh mẽ để chẩn đoán và xử lý mọi vấn đề liên quan đến không gian đĩa.
Đừng chỉ đọc, hãy mở terminal lên và thực hành ngay. Bắt đầu bằng việc kiểm tra dung lượng thư mục /home của bạn, hoặc thử tìm 5 thư mục lớn nhất trong /var. Việc thực hành thường xuyên sẽ giúp bạn biến kiến thức thành kỹ năng thực thụ, giúp bạn tự tin hơn trong việc quản trị và duy trì bất kỳ hệ thống Linux nào.
Chúc bạn thành công