Kiến thức Hữu ích 😍

Cách kiểm tra dung lượng thư mục Linux nhanh, chính xác với lệnh du, df


Giới thiệu về kiểm tra dung lượng thư mục trong Linux

Bạn đã bao giờ gặp tình huống hệ thống Linux của mình đột nhiên hoạt động chậm chạp hoặc nhận được cảnh báo “Disk space is low”? Đây là một trong những vấn đề phổ biến nhất mà quản trị viên hệ thống và người dùng Linux phải đối mặt. Việc quản lý không gian lưu trữ không chỉ giúp duy trì hiệu suất hoạt động ổn định mà còn ngăn ngừa các sự cố nghiêm trọng như sập dịch vụ hoặc mất dữ liệu. Nếu không kiểm soát dung lượng hợp lý, các file log, dữ liệu tạm hoặc ứng dụng có thể nhanh chóng chiếm đầy ổ cứng, gây ra tình trạng tắc nghẽn và làm hệ thống không thể ghi thêm dữ liệu mới.

May mắn thay, Linux cung cấp các công cụ dòng lệnh mạnh mẽ và linh hoạt để giúp bạn theo dõi và quản lý không gian lưu trữ một cách hiệu quả. Trong số đó, hai lệnh phổ biến và không thể thiếu là du (disk usage) và df (disk free). Bài viết này của AZWEB sẽ hướng dẫn bạn chi tiết cách sử dụng hai lệnh này, từ cú pháp cơ bản đến các tùy chọn nâng cao. Chúng ta sẽ cùng nhau khám phá cách phân tích kết quả, kết hợp chúng với các lệnh khác để tìm ra “thủ phạm” chiếm dụng dung lượng, và giới thiệu một số công cụ hữu ích khác để hành trình quản lý hệ thống của bạn trở nên dễ dàng hơn bao giờ hết.

Sử dụng lệnh du để kiểm tra dung lượng thư mục

Giới thiệu lệnh du và chức năng chính

Lệnh du (viết tắt của “disk usage”) là công cụ dòng lệnh chính yếu trong Linux, được thiết kế để báo cáo dung lượng ổ đĩa mà các tệp và thư mục đang sử dụng. Hãy tưởng tượng du như một người kế toán mẫn cán, đi vào từng thư mục, xem xét kích thước của mỗi tệp và thư mục con, sau đó tổng hợp lại để cho bạn một con số chính xác. Cơ chế hoạt động của nó là duyệt đệ quy qua cây thư mục từ một điểm bạn chỉ định, tính toán và hiển thị dung lượng của từng mục.

Hình minh họa

Đây là công cụ lý tưởng khi bạn muốn biết chính xác thư mục nào đang chiếm nhiều không gian nhất trong hệ thống của mình. Cú pháp cơ bản của lệnh du rất đơn giản và dễ nhớ, giúp bạn nhanh chóng bắt đầu công việc kiểm tra mà không cần cấu hình phức tạp. Cú pháp có dạng như sau: du [tùy chọn] [đường_dẫn]. Trong đó, [tùy chọn] là các tham số để tùy chỉnh cách hiển thị kết quả, và [đường_dẫn] là thư mục hoặc tệp tin bạn muốn kiểm tra. Nếu bạn không chỉ định đường dẫn, du sẽ mặc định kiểm tra thư mục hiện tại.

Các tùy chọn phổ biến của lệnh du

Để khai thác tối đa sức mạnh của lệnh du, việc nắm vững các tùy chọn phổ biến là vô cùng quan trọng. Các tùy chọn này giúp bạn định dạng kết quả sao cho dễ đọc và tập trung vào đúng thông tin bạn cần. Dưới đây là những tùy chọn được sử dụng thường xuyên nhất mà bạn nên ghi nhớ.

Tùy chọn -h (human-readable) là người bạn đồng hành không thể thiếu. Thay vì hiển thị dung lượng bằng các con số khó hiểu tính theo byte hoặc kilobyte, -h sẽ tự động chuyển đổi chúng sang các đơn vị lớn hơn và dễ đọc hơn như Megabyte (M), Gigabyte (G), hay Terabyte (T). Ví dụ, thay vì 1048576, bạn sẽ thấy 1.0M. Điều này giúp bạn nhanh chóng nắm bắt quy mô dung lượng mà không cần phải tính toán thủ công.

Hình minh họa

Khi bạn chỉ quan tâm đến tổng dung lượng của một thư mục mà không cần xem chi tiết từng thư mục con, tùy chọn -s (summarize) là lựa chọn hoàn hảo. Nó sẽ tính toán và chỉ hiển thị một dòng duy nhất là tổng dung lượng của thư mục được chỉ định. Kết hợp du -sh /path/to/directory là một trong những cách nhanh nhất để kiểm tra kích thước của một thư mục cụ thể.

Ngược lại với -s, tùy chọn -a (all files) lại cung cấp một báo cáo chi tiết đến từng tệp tin. Thay vì chỉ liệt kê dung lượng của các thư mục con, -a sẽ hiển thị dung lượng của cả các tệp riêng lẻ bên trong cây thư mục. Tùy chọn này cực kỳ hữu ích khi bạn cần truy tìm một tệp tin đơn lẻ nào đó đang chiếm dụng quá nhiều không gian.

Cuối cùng, tùy chọn --max-depth giúp bạn kiểm soát độ sâu của báo cáo. Khi kiểm tra một thư mục có cấu trúc phức tạp với nhiều cấp thư mục con, kết quả từ du có thể trở nên quá dài và khó theo dõi. Bằng cách sử dụng --max-depth=N (với N là một số), bạn có thể giới hạn du chỉ hiển thị đến cấp thư mục thứ N. Ví dụ, du -h --max-depth=1 /var sẽ chỉ cho bạn thấy dung lượng của các thư mục con trực tiếp bên trong /var, giúp báo cáo ngắn gọn và tập trung hơn.

Hình minh họa

Sử dụng lệnh df để kiểm tra dung lượng đĩa và thư mục

Giới thiệu lệnh df và ứng dụng trong kiểm tra dung lượng hệ thống

Nếu du là công cụ để “soi” chi tiết vào từng thư mục, thì df (viết tắt của “disk free”) lại cung cấp cho bạn một cái nhìn toàn cảnh về không gian lưu trữ của toàn bộ hệ thống. Lệnh df không tính toán dung lượng của từng tệp, thay vào đó, 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 tệp (filesystems) đang được gắn kết (mount) trên máy chủ của bạn. Đây là công cụ đầu tiên bạn nên nghĩ đến khi muốn kiểm tra sức khỏe tổng thể của ổ đĩa.

Cú pháp cơ bản của df cũng rất đơn giản: df [tùy chọn] [đường_dẫn]. Nếu không có tham số nào được chỉ định, df sẽ liệt kê thông tin của tất cả các hệ thống tệp đang hoạt động. Điểm khác biệt cốt lõi giữa dudf nằm ở cách chúng thu thập thông tin. du đọc siêu dữ liệu của từng tệp và thư mục để tính tổng, trong khi df lấy thông tin trực tiếp từ superblock của hệ thống tệp. Do đó, df cho bạn biết dung lượng được phân bổ trên toàn bộ phân vùng, còn du cho bạn biết dung lượng thực tế các tệp đang chiếm giữ.

Hình minh họa

Các tùy chọn quan trọng của lệnh df

Tương tự như du, lệnh df cũng đi kèm với nhiều tùy chọn hữu ích để giúp bạn tùy chỉnh đầu ra. Việc sử dụng thành thạo các tùy chọn này sẽ giúp bạn nhanh chóng chẩn đoán các vấn đề liên quan đến dung lượng đĩa một cách chính xác.

Tùy chọn -h (human-readable) một lần nữa chứng tỏ sự hữu ích của nó. Nó giúp chuyển đổi các giá trị dung lượng từ block hoặc byte sang các định dạng quen thuộc như GB, MB, giúp bạn đọc và hiểu kết quả một cách trực quan. Chạy lệnh df -h gần như là một thói quen của mọi quản trị viên hệ thống khi bắt đầu kiểm tra dung lượng.

Để biết hệ thống tệp của bạn thuộc loại nào (ví dụ: ext4, xfs, btrfs), bạn có thể sử dụng tùy chọn -T (print filesystem type). Thông tin này rất quan trọng trong nhiều trường hợp, chẳng hạn như khi bạn cần thực hiện các thao tác bảo trì hoặc tối ưu hóa hiệu suất đặc thù cho từng loại hệ thống tệp.

Hình minh họa

Một tùy chọn nâng cao nhưng cực kỳ quan trọng là -i (inodes). Inode là một cấu trúc dữ liệu trong hệ thống tệp Linux, lưu trữ thông tin siêu dữ liệu về một tệp (như quyền, chủ sở hữu, dấu thời gian, và vị trí dữ liệu). Mỗi tệp tin hoặc thư mục đều chiếm một inode. Có một trường hợp đặc biệt là bạn có thể hết inode trước khi hết dung lượng đĩa, đặc biệt khi hệ thống có hàng triệu tệp tin nhỏ. Lệnh df -i sẽ hiển thị thông tin về việc sử dụng inode, giúp bạn phát hiện và khắc phục tình trạng này kịp thời.

Hướng dẫn phân tích và hiểu kết quả kiểm tra dung lượng

Hiểu ý nghĩa các cột trong kết quả lệnh du và df

Sau khi chạy các lệnh dudf, bước tiếp theo là hiểu đúng các thông tin mà chúng cung cấp. Đối với lệnh df -h, kết quả thường được trình bày dưới dạng bảng với các cột có ý nghĩa rõ ràng. Cột “Filesystem” cho biết tên của phân vùng hoặc thiết bị. “Size” là tổng dung lượng của phân vùng đó. “Used” là dung lượng đã được sử dụng, và “Avail” là dung lượng còn trống dành cho người dùng thông thường. Cột “Use%” hiển thị tỷ lệ phần trăm dung lượng đã sử dụng, đây là chỉ số quan trọng nhất cần theo dõi. Cuối cùng, “Mounted on” cho biết phân vùng đó được gắn vào thư mục nào trong cây hệ thống. Một dấu hiệu cảnh báo rõ ràng là khi cột “Use%” vượt ngưỡng 85-90%, cho thấy phân vùng sắp đầy và cần được xử lý.

Hình minh họa

Đố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 là dung lượng của tệp hoặc thư mục, và cột thứ hai là đường dẫn đến tệp hoặc thư mục đó. Khi bạn phân tích kết quả từ du, mục tiêu chính là tìm ra những dòng có giá trị dung lượng lớn bất thường so với các mục khác. Đây chính là những “ứng cử viên” hàng đầu gây ra tình trạng đầy ổ đĩa.

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 kịch bản thực tế: bạn quản lý một VPS tại AZWEB và nhận thấy trang web của mình tải chậm hơn bình thường. Nghi ngờ đầu tiên của bạn là do dung lượng lưu trữ có vấn đề. Đầu tiên, bạn chạy lệnh df -h. Kết quả cho thấy phân vùng được gắn tại / (thư mục gốc) đã sử dụng đến 95%. Đây chính là nguyên nhân gây ra sự chậm chạp.

Bước tiếp theo là xác định thư mục nào đang chiếm nhiều dung lượng nhất. Bạn sử dụng lệnh du -h --max-depth=1 /. Lệnh này sẽ liệt kê dung lượng của tất cả các thư mục con trực tiếp trong thư mục gốc. Sau khi xem xét, bạn phát hiện ra rằng thư mục /var có dung lượng lên tới vài chục GB. Để điều tra sâu hơn, bạn tiếp tục chạy du -h --max-depth=1 /var. Lần này, bạn thấy /var/log là “thủ phạm” chính. Cuối cùng, bạn kiểm tra các tệp trong /var/log và tìm thấy một tệp error.log khổng lồ. Từ đây, bạn có thể đưa ra quyết định: nén và lưu trữ (archive) tệp log này, xóa nó nếu không còn cần thiết, hoặc cấu hình lại cơ chế xoay vòng log (log rotation) để ngăn vấn đề tái diễn. Quá trình phân tích có hệ thống này giúp bạn giải quyết vấn đề một cách chính xác và hiệu quả.

Các mẹo và công cụ dòng lệnh hữu ích khác

Mẹo nâng cao khi kiểm tra dung lượng thư mục

Khi đã quen với dudf, bạn có thể nâng tầm kỹ năng của mình bằng cách kết hợp chúng với các lệnh Linux khác thông qua kỹ thuật “piping” (sử dụng dấu |). Một trong những chuỗi lệnh mạnh mẽ nhất để nhanh chóng tìm ra các thư mục lớn nhất là: du -h /path/to/check | sort -hr | head -n 10. Hãy phân tích chuỗi lệnh này: du -h tính toán dung lượng, sort -hr sắp xếp kết quả theo thứ tự từ lớn đến nhỏ (h: human-readable, r: reverse), và head -n 10 chỉ hiển thị 10 dòng đầu tiên. Kết quả là bạn có ngay danh sách 10 thư mục chiếm nhiều dung lượng nhất.

Hình minh họa

Một mẹo hữu ích khác là sử dụng grep để lọc kết quả. Ví dụ, nếu bạn chỉ muốn tìm các thư mục có dung lượng tính bằng Gigabyte, bạn có thể chạy lệnh: du -h / | grep 'G\b'. Lệnh này sẽ quét toàn bộ hệ thống và chỉ hiển thị những dòng kết quả có chứa ký tự “G” (Gigabyte) đứng riêng lẻ, giúp bạn nhanh chóng khoanh vùng các đối tượng lớn. Việc kết hợp các công cụ nhỏ nhưng mạnh mẽ này là tinh hoa của triết lý dòng lệnh Linux, cho phép bạn tạo ra các giải pháp linh hoạt cho những nhu-cầu-cụ-thể.

Giới thiệu một số công cụ hỗ trợ khác như ncdu, baobab

Ngoài dudf, cộng đồng Linux còn phát triển nhiều công cụ 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ột trong những công cụ dòng lệnh được yêu thích nhất là ncdu (NCurses Disk Usage). Hãy coi ncdu như một phiên bản nâng cấp, tương tác của du. Sau khi quét một thư mục, ncdu sẽ hiển thị một giao diện dựa trên văn bản, cho phép bạn duyệt qua các thư mục, xem dung lượng theo phần trăm, và dễ dàng xóa các tệp hoặc thư mục không cần thiết ngay từ trong giao diện. Bạn có thể cài đặt nó một cách dễ dàng thông qua trình quản lý gói của hệ thống (ví dụ: sudo apt install ncdu).

Hình minh họa

Nếu bạn làm việc trên môi trường desktop Linux (GUI), baobab (còn được biết đến với tên “Disk Usage Analyzer”) là một lựa chọn tuyệt vời. Công cụ này cung cấp một biểu đồ hình tròn (sunburst chart) trực quan, thể hiện cấu trúc thư mục và dung lượng tương ứng của chúng. Nhìn vào biểu đồ, bạn có thể ngay lập tức xác định được các vùng chiếm dụng nhiều không gian nhất mà không cần đọc qua hàng loạt dòng văn bản. baobab làm cho quá trình phân tích dung lượng trở nên sinh động và dễ tiếp cận hơn, đặc biệt với những người dùng mới làm quen với Linux.

Các vấn đề thường gặp và cách khắc phục

Kết quả lệnh du không hiển thị đúng dung lượng

Đôi khi, bạn có thể nhận thấy lệnh du báo cáo một con số thấp hơn so với dung lượng thực tế, hoặc hiển thị nhiều thông báo lỗi “Permission denied”. Nguyên nhân phổ biến nhất của vấn đề này là do quyền truy cập. Nếu bạn chạy du với tư cách người dùng thông thường, lệnh sẽ không thể đọc được nội dung của các thư mục thuộc sở hữu của người dùng khác hoặc của hệ thống (như root). Kết quả là dung lượng của các thư mục đó sẽ bị bỏ qua, dẫn đến tổng số không chính xác.

Cách khắc phục rất đơn giản: hãy chạy lệnh với quyền quản trị viên bằng cách sử dụng sudo, ví dụ: sudo du -sh /. Một nguyên nhân khác có thể liên quan đến các liên kết tượng trưng (symbolic links). Mặc định, du chỉ tính dung lượng của chính tệp liên kết (thường rất nhỏ), chứ không phải dung lượng của tệp hoặc thư mục mà nó trỏ tới. Nếu bạn muốn du đi theo các liên kết và tính cả dung lượng của đích, hãy sử dụng tùy chọn -L (dereference). Tuy nhiên, hãy cẩn thận khi dùng tùy chọn này vì nó có thể dẫn đến việc tính lặp nếu có các liên kết vòng.

Lệnh df báo cáo dung lượng sai lệch so với thực tế

Một tình huống khó hiểu khác là khi df báo cáo ổ đĩa đã đầy nhưng du lại cho thấy tổng dung lượng sử dụng thấp hơn nhiều. Vấn đề này thường xuất phát từ hiện tượng “deleted but still open files” (tệp đã xóa nhưng vẫn đang được mở). Trong Linux, khi bạn xóa một tệp đang được một tiến trình nào đó sử dụng, tên tệp sẽ biến mất khỏi thư mục, nhưng không gian đĩa mà nó chiếm giữ sẽ không được giải phóng cho đến khi tiến trình đó đóng tệp lại. Điều này khiến du không còn “thấy” tệp đó để tính, nhưng df vẫn “biết” không gian đó đang bị chiếm dụng.

Để tìm ra các tiến trình đang giữ những tệp “ma” này, bạn có thể sử dụng lệnh lsof | grep '(deleted)'. Sau khi xác định được tiến trình, bạn có thể khởi động lại dịch vụ tương ứng để nó giải phóng tệp. Một nguyên nhân khác cho sự chênh lệch có thể là do hệ thống tệp dành riêng một phần không gian (thường là 5%) cho người dùng root để thực hiện các tác vụ quản trị khẩn cấp. df sẽ tính cả phần này vào dung lượng đã sử dụng, trong khi du thì không.

Những lưu ý khi kiểm tra dung lượng thư mục trên Linux

Khi thực hiện kiểm tra và quản lý dung lượng trên hệ thống Linux, có một vài nguyên tắc quan trọng bạn cần ghi nhớ để đảm bảo an toàn và hiệu quả. Trước hết, 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. Sử dụng sudo khi cần thiết, đặc biệt là khi quét các thư mục hệ thống, nhưng hãy luôn ý thức về quyền lực mà bạn đang có.

Hình minh họa

Thứ hai, và cũng là quan trọng nhất, là phải hết sức cẩn trọng trước khi xóa bất kỳ dữ liệu nào. Đừng bao giờ vội vàng chạy lệnh rm -rf ngay khi tìm thấy một thư mục lớn. Hãy dành thời gian để xác minh nội dung bên trong nó. Đó có phải là file log cũ, cache an toàn để xóa, hay là dữ liệu quan trọng của ứng dụng? Sử dụng các lệnh như ls -l, file, hoặc less để kiểm tra các tệp trước khi đưa ra quyết định cuối cùng. Xóa nhầm dữ liệu hệ thống có thể gây ra hậu quả nghiêm trọng.

Cuối cùng, hãy cân nhắc về thời điểm thực hiện kiểm tra. Việc chạy một lệnh du trên toàn bộ hệ thống (du -h /) có thể gây ra một lượng lớn hoạt động đọc/ghi trên ổ đĩa (I/O). Trên một máy chủ sản xuất đang có tải cao, điều này có thể ảnh hưởng đến hiệu suất của các ứng dụng đang chạy. Tốt nhất, hãy thực hiện các cuộc kiểm tra sâu và tốn nhiều tài nguyên này trong các khung giờ bảo trì hoặc khi hệ thống ít hoạt động.

Kết luận

Quản lý dung lượng lưu trữ là một kỹ năng nền tảng và thiết yếu đối với bất kỳ ai làm việc với hệ thống Linux. Việc chủ động theo dõi không gian đĩa không chỉ giúp hệ thống của bạn hoạt động mượt mà, ổn định mà còn là biện pháp phòng ngừa hiệu quả trước các sự cố bất ngờ. Qua bài viết này, AZWEB hy vọng bạn đã nắm vững vai trò và cách sử dụng của hai công cụ không thể thiếu là dudf. Hãy nhớ rằng, df cung cấp cái nhìn tổng quan về sức khỏe của các phân vùng, trong khi du giúp bạn đi sâu vào chi tiết để tìm ra nguyên nhân gây tốn dung lượng.

Chúng tôi khuyến khích bạn hãy bắt đầu thực hành ngay hôm nay. Hãy thử các lệnh và tùy chọn đã được giới thiệu trên môi trường phát triển hoặc VPS của bạn để làm quen. Việc kết hợp du với sort, head hay khám phá các công cụ như ncdu sẽ giúp bạn trở thành một người quản trị hệ thống hiệu quả và tự tin hơn. Duy trì thói quen kiểm tra dung lượng định kỳ sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức xử lý sự cố trong tương lai. Linux nhúng cung cấp một kho tàng công cụ mạnh mẽ, và việc làm chủ chúng chính là chìa khóa để bạn khai thác tối đa tiềm năng của hệ điều hành này.

Đánh giá