Máy chủ Linux hết dung lượng


31

Tôi đã được hỏi câu hỏi này trong hai cuộc phỏng vấn liên tiếp, nhưng sau một số nghiên cứu và kiểm tra với các quản trị viên hệ thống khác nhau, tôi đã không nhận được câu trả lời hay. Tôi tự hỏi nếu ai đó có thể giúp tôi ra khỏi đây.

Một máy chủ hết dung lượng đĩa. Bạn nhận thấy một tệp nhật ký rất lớn và xác định nó là an toàn để loại bỏ. Bạn xóa tập tin nhưng đĩa vẫn hiển thị rằng nó đã đầy. Điều gì sẽ gây ra điều này và làm thế nào bạn sẽ khắc phục nó? Và làm thế nào bạn tìm thấy quá trình nào đang viết tệp nhật ký khổng lồ này?


3
Bạn cần nói chuyện với các quản trị viên hệ thống tốt hơn. Đây là thứ tầm thường.
womble

2
Tầm thường, nhưng tình huống và câu hỏi xuất hiện thường xuyên đủ ...
ewwhite

OP sẽ có thể chấp nhận điều này?
ewwhite

5
Không quan trọng hay không, đối với người không nói * nix trôi chảy (ví dụ: quản trị viên Windows chủ yếu) thì đây là thứ tốt để học.
John Gardeniers

Câu trả lời:


56

Đây là một câu hỏi phỏng vấn phổ biến và một tình huống xuất hiện trong nhiều môi trường sản xuất.

Các mục trong thư mục của tệp đã bị xóa, nhưng quá trình ghi nhật ký vẫn đang chạy. Không gian sẽ không được hệ điều hành lấy lại cho đến khi tất cả các xử lý tệp đã bị đóng (ví dụ: quá trình đã bị hủy) và tất cả các mục nhập thư mục bị xóa. Để tìm quá trình ghi vào tệp, bạn sẽ cần sử dụng lsoflệnh.

Phần khác của câu hỏi đôi khi có thể là "làm thế nào để bạn xóa một tập tin được viết mà không làm hỏng quá trình?" Lý tưởng nhất là bạn "không" hoặc "cắt" tệp nhật ký bằng một cái gì đó giống như : > /var/log/logfilethay vì xóa tệp.


1
... Hoặc fuser.
Steven Thứ Hai ngày

1
Mở rộng một chút: cho đến khi tất cả các tham chiếu đến một tệp trên đĩa biến mất, không gian đó không thể được sử dụng bởi một thứ khác. Điều đó bao gồm xử lý tập tin. Điều đó cũng cho phép thủ thuật này hoạt động: serverfault.com/questions/45237/link-to-a-specific-inode
Jeff Ferland

1
Nếu bạn đã no-clobberthiết lập, hãy thử:>| /var/log/logfile
Belmin Fernandez

2
Tôi hỏi một biến thể của câu hỏi này trong mỗi cuộc phỏng vấn: "Bạn đang nhận được tin nhắn đầy đĩa. dfNói rằng bạn hết dung lượng, dunói rằng bạn hầu như không sử dụng bất kỳ. Điều gì gây ra nó, và tại sao hai công cụ không đồng ý?"
voretaq7

Phải làm gì nếu sau khi > /var/log/filedung lượng trên đĩa vẫn ở mức 100%? Tệp nhật ký dường như trống ... nhưng chỉ sau khi khởi động lại chương trình ghi vào tệp nhật ký này, không gian mới được phục hồi. Có cách nào để phục hồi không gian đĩa mà không cần khởi động lại chương trình không?
alemani

14

Vẫn còn một liên kết khác đến tệp (liên kết cứng hoặc xử lý tệp mở). Xóa một tập tin chỉ xóa mục nhập thư mục; dữ liệu tệp và inode treo xung quanh cho đến khi tham chiếu cuối cùng đến nó đã bị xóa.

Đó là một thực tế phổ biến đối với một dịch vụ để tạo một tệp tạm thời và ngay lập tức xóa nó trong khi vẫn giữ tệp mở. Điều này tạo ra một tệp trên đĩa, nhưng đảm bảo rằng tệp sẽ bị xóa nếu quá trình kết thúc bất thường, và cũng giữ cho các quá trình khác không vô tình dẫm lên tệp. MySQL làm điều này, ví dụ, cho tất cả các bảng tạm thời trên đĩa của nó. Phần mềm độc hại thường sử dụng các chiến thuật tương tự để ẩn các tệp của nó.

Trong Linux, bạn có thể thuận tiện truy cập các tệp đã xóa này dưới dạng /proc/<pid>/fd/<filenumber>.


8

Tôi không phải là một sysadmin, nhưng từ những gì tôi đã thu thập trên Unix.SE, một hệ thống Linux sẽ không thực sự xóa một tệp (đánh dấu không gian là miễn phí / có thể tái sử dụng) sau khi nó được hủy liên kết cho đến khi tất cả các mô tả tệp trỏ đến chúng đã bị đóng cửa. Vì vậy, để trả lời phần đầu tiên, không gian vẫn chưa miễn phí vì một quá trình vẫn đang đọc nó. Để trả lời thứ hai, bạn có thể xem quá trình đang sử dụng tệp với lsof.


2

Một câu trả lời khác bên cạnh câu trả lời liên kết cứng / mở tệp rõ ràng: tệp đó là một tệp (rất) thưa thớt, chẳng hạn như /var/log/lastlogtrên RHEL, thực tế không chiếm nhiều dung lượng. Xóa nó có rất ít tác động, vì vậy bạn cần xem tập tin lớn nhất tiếp theo.


1

Nếu quá trình ghi tệp là root, nó sẽ ghi vào không gian tệp dành riêng cho siêu người dùng. Hệ thống tệp có không gian này để giữ cho hệ thống hoạt động trong trường hợp tác vụ người dùng lấp đầy đĩa. Không gian này (imho trên 5% mặc định) là vô hình đối với nhiều công cụ.

lsof có thể cho bạn thấy, quá trình nào đã khóa tập tin, ergo đang ghi vào nó.


1
Bạn cũng có thể điều chỉnh tỷ lệ phần trăm dự trữ này bằng cách sử dụng Tune2fs. Đây có thể là một cách nhanh chóng để cho phép máy chủ tiếp tục chạy trong khi bạn giải phóng không gian đĩa.
sjbotha

1

Bên cạnh tệp đang được mở bởi một quy trình, trường hợp thứ 2 là khi bạn có một hệ thống tệp hỗ trợ ảnh chụp nhanh như btrfshoặc ZFS.

Ví dụ, bạn chụp ảnh nhanh với tệp nhật ký khổng lồ đó. Nếu bạn xóa tệp bây giờ, bạn sẽ chỉ xóa delta. Và delta chỉ bị xóa khi tập tin không được sử dụng.

Xem thêm:

Trường hợp thứ 3 là khi bạn có một hệ thống tệp hỗ trợ chống trùng lặp cấp khối và hầu hết các tệp giống hệt với tệp khác. Tôi không mong đợi điều này xảy ra đối với nhật ký trừ khi bạn có một thùng chứa hoặc VM đang gửi nhật ký đến một thùng chứa syslog hoặc VM có chung FS để nội dung nhật ký giống hệt nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.