Hệ điều hành (OS), Linux

Disk 90% Full – cách khắc phục sự cố trong 15 phút

Bạn đã bao giờ nhận được cảnh báo “Ổ đĩa đầy 90%” trên production server và không biết disk bị full dữ liệu và server chạy chậm có nguy cơ bị treo chưa?

Trong real-world case study này, tôi sẽ chỉ cho bạn cách tôi sử dụng lệnh `find` của Linux để kiểm tra các files lớn khổng lồ, xử lý sự cố cùng như recover một Server trong vòng 15 phút.

Để bắt đầu hãy tưởng tượng bạn vừa đăng nhập vào một server cũ. Server này vẫn đang chạy NGINX bình thường, trang web vẫn hoạt động, nhưng… bạn không thể nhớ các files cấu hình website đang nằm ở thư mục nào. Bạn chỉ còn nhớ đại khái file cấu hình chính có tên kiểu như nginx.conf, site.conf hoặc example.com.conf, và có thể nó nằm trong thư mục /etc. Thay vì mò mẫm di chuyển qua từng thư mục con để tìm kiếm bằng cách thủ công tốn thời gian và công sức, bạn có thể sử dụng ngay lệnh findrất tiện cho việc tìm kiếm files:

find /etc -name nginx.conf

Nếu chỉ nhớ một phần tên của file (ví dụ file có thể có ký tự “nginx”), bạn có thể dùng dấu * đại diện (wildcard) kết hợp với tùy chọn -name. Ví dụ:

find /etc -name '*nginx*'

Lệnh trên sẽ liệt kê chính xác đường dẫn đến mọi files có chứa từ khóa “nginx” trong tên. Cách này nhanh gọn, tiết kiệm thời gian, và không cần phải lần mò vào từng thư mục từng thư mục một để xem. Như một số tài liệu Linux nhấn mạnh, lệnh find là một trong những công cụ hữu ích nhất của Linux, giúp bạn tìm kiếm mọi thứ không chỉ dựa trên tên của file.

Tìm bảng lương nhân sự cho phòng HR với find

Trong thực tế quản trị hệ thống, tình huống như này rất hay thường gặp. Giả sử phòng Nhân sự (HR) cần tìm file chứa bảng lương năm 2025 của công ty. File này có tên làsalary2025.csv, nhưng nó nằm đâu đó trong thư mục home của user. Bạn đăng nhập vào tài khoản HR (VD user là hrapp) và chạy lệnh:

find ~ -name 'salary2025.csv'

Ở đây, dấu ~ là cách viết tắt thư mục home của user hiện tại. Lệnh trên sẽ tìm trong toàn bộ thư mục home và trả về đường dẫn đến salary2025.csv nếu nó tồn tại. Đây là cách đơn giản nhất để tìm một file khi bạn biết gần đúng tên của nó.

Bước tiếp theo, HR muốn tìm thư mục chứa dữ liệu lương của các năm trước. Họ chỉ nhớ tên thư mục bắt đầu bằng “salary”. Bạn có thể dùng lại find với wildcard và tùy chọn -type d (dành cho directory). Ví dụ:

find ~ -name 'salary*' -type d

Lệnh này tìm tất cả các thư mục (-type d) trong thư mục home có tên bắt đầu bằng “salary”.

Chú ý: khi dùng ký tự đại diện (*), luôn đặt mẫu trong dấu nháy để tránh shell tự mở rộng và lệnh làm việc một cách đúng đắn. Với cách này, find sẽ trả về tất cả thư mục khớp với mẫu salary*, giúp bạn xác định nhanh vị trí lưu trữ dữ liệu lương cũ cho phòng HR.

Tìm video và ảnh sự kiện cho bộ phận trong công ty

Giả sử HR lại nhờ tìm các file MP4 và JPG của buổi team-building gần đây nhất để họ đăng bài lên linkedin.com. Bạn cần phải tìm giúp họ cả videos và ảnh, có nghĩa là hai loại đuôi files khác nhau. find hỗ trợ dùng nhiều điều kiện -name kết hợp với toán tử -or. Ví dụ:

find ~ -name '*.mp4' -or -name '*.jpg'

Lệnh trên sẽ liệt kê tất cả file có đuôi .mp4 hoặc .jpg trong thư mục home. Theo tài liệu Linux, find cho phép kết hợp điều kiện với -or để tìm các file thỏa mãn một trong hai mẫu tìm kiếm. Như vậy, bạn nhanh chóng lọc được cả video và ảnh cần tìm.

Xử lý cảnh báo ổ đĩa bị đầy: tìm các log files lớn

Một buổi sáng như thường lệ khi vào công ty làm việc bạn nhận được email cảnh báo: ổ đĩa của server sắp đầy (đã dùng đến ~90%). Website vẫn chạy, nhưng nếu đầy ổ đĩa thì mọi thứ có thể sập bất cứ lúc nào. Trong trường hợp này, bạn suy luận và nghi ngờ đầu tiên của bạn là dung lượng của một log file nào đó đang tăng lên không kiểm soát.

Log thông thường nằm trong thư mục /var/log.

Bạn chuyển sang quyền root để có quyền làm việc với hệ thống (Lệnh: sudo -i ) và sau đó chạy lệnh:

find /var/log -type f -name '*.log'

Lệnh này liệt kê tất cả các file log (các files có đuôi .log) trong /var/log, nhưng kết quả có thể rất dài.

Điều quan trọng là tìm ra file nào đang lớn bất thường. Với find, bạn có thể lọc theo dung lượng của file bằng tùy chọn -size. Ví dụ, để tìm file lớn hơn 100MB dùng lệnh sau:

find /var/log -type f -size +100M

Lệnh trên trả về tất cả file trong /var/log có dung lượng trên 100MB. Ngay lập tức bạn sẽ nhìn thấy file log nào đang “ngốn” nhiều dung lượng nhất. Lệnh này rất hiệu quả để xác định nguyên nhân full disk gần đầy. Nhiều hướng dẫn cũng đề cập dùng find . -type f -size +100M để lệnh find liệt kê nhanh các files lớn hơn.

Tìm các file lớn để giải phóng dung lượng Disk

Không chỉ các log files, đôi khi trong server có thể chứa nhiều files lớn do người dùng lưu trữ. Bạn nên kiểm tra thư mục /home (nơi người dùng thường lưu các files cá nhân). Ví dụ, lệnh sau sẽ liệt kê mọi files lớn hơn 1GB trong /home:

find /home -type f -size +1G

Nếu muốn quét toàn hệ thống Linux (khá chậm và nhiều lỗi Permission), bạn có thể chạy:

find / -type f -size +1G 2>/dev/null

Ở đây 2>/dev/null giúp ẩn các thông báo “Permission denied” khi không có quyền xem một số thư mục. Như trang Red Hat lưu ý, bạn có thể thêm 2>/dev/null để tránh hiện lỗi khi tìm trong cả thư mục hệ thống. Sau khi xác định các file quá lớn, bạn có thể xem xét xóa hoặc di chuyển chúng sang ổ cứng backup để giải phóng dung lượng.

Tìm các files thay đổi gần đây để xử lý sự cố

Giả sử một ứng dụng trên server đột nhiên lỗi không chạy, và bạn nghi ngờ có người đã sửa đổi một file cấu hình hoặc mã nguồn. find có thể giúp tìm ra file nào vừa bị chỉnh sửa. Ví dụ, để tìm tất cả files trong /etc được sửa trong 24 giờ qua:

find /etc -type f -mtime -1

Tùy chọn -mtime -1 nghĩa là file sửa đổi trong vòng 1 ngày gần đây nhất.

Tương tự, nếu bạn chỉ quan tâm đến các file cấu hình bị sửa đổi (.conf) trong vòng 2 ngày qua, sử dụng lệnh:

find /etc -type f -name '*.conf' -mtime -2

Các tìm kiếm dựa trên thời gian sửa đổi rất hữu ích khi bạn muốn rà soát những thay đổi gần đây có thể gây ra lỗi hệ thống.

Lưu ý, -mtime -1 gồm cả file thay đổi trong 24 giờ, còn -mtime +1 là nhiều hơn 24 giờ trở lên.

Ứng dụng thực tế của lệnh find

Như vậy, trong thực tế quản trị hệ thống, chúng ta không chỉ dùng find để tìm một file bị “ thất lạc” đâu đó. Lệnh find rất linh hoạt và được dùng cho nhiều tình huống khác nhau:

  • Tìm file log chiếm nhiều dung lượng: Giúp giải quyết lỗi full disk.

  • Tìm file lớn trong hệ thống: Để xóa bỏ hoặc di chuyển, giải phóng dung lượng disk.

  • Tìm file sửa đổi gần đây: hữu ích khi điều tra sự cố hoặc phát hiện các thay đổi cấu hình trái phép.

  • Tìm file hoặc thư mục theo tên, theo loại: Tìm nhanh cấu hình, mã nguồn hoặc dữ liệu cần thiết.

  • Kết hợp với các hành động khác: bạn có thể kết hợp -exec với grep, rm… để lọc thêm hoặc xử lý files (ví dụ find … -exec grep … tìm nội dung, hoặc -exec rm {} \; xóa file).

Trong thực tế, lệnh find nằm trong số những công cụ cơ bản và hữu ích nhất của Linux, được sysadmin và DevOps sử dụng hàng ngày. Nó có sẵn trên hầu hết mọi hệ thống Linux và đủ mạnh để phục vụ cho hầu hết nhu cầu tìm kiếm file. Dù có những công cụ khác (như locate hay fd) nhanh hơn trong một vài trường hợp, tuy nhiên find vẫn luôn sẵn có và phù hợp với hầu hết tình huống tìm kiếm file trên máy chủ.

Khi cần tìm kiếm file hay thư mục trong Linux, thay vì mò mẫm thủ công, lệnh find cho phép bạn định vị nhanh chóng mọi thứ theo tên, dung lượng, thời gian sửa đổi,… một cách tiện lợi và chính xác.

Hashtags: #Linux #LệnhFind #QuảnTrịHệThống #DevOps #TìmFile #AdminLinux

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *