it-swarm-vi.tech

khác biệt so với df

Tôi có một máy chủ tệp trong đó df báo cáo 94%/đầy đủ. Nhưng theo du, ít được sử dụng hơn:

# df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             270G  240G   17G  94% /
# du -hxs /
124G    /

Tôi đọc rằng các tập tin mở nhưng bị xóa có thể chịu trách nhiệm cho nó nhưng khởi động lại không khắc phục điều này.

Đây là Linux, ext3.

trân trọng

33
Andreas Kuntzagk

Ok, tìm thấy nó.

Tôi đã có một bản sao lưu cũ trên/mnt/Sao lưu trong cùng hệ thống tệp và sau đó một ổ đĩa ngoài được gắn ở vị trí đó. Vì vậy, du đã không nhìn thấy các tập tin. Vì vậy, làm sạch này đã cho tôi trở lại không gian đĩa của tôi.

Có lẽ nó đã xảy ra theo cách này: ổ đĩa ngoài đã từng bị ngắt kết nối trong khi tập lệnh sao lưu hàng ngày chạy.

32
Andreas Kuntzagk

Tôi không nghĩ rằng bạn sẽ tìm thấy một lời giải thích kỹ lưỡng hơn sau đó liên kết này vì tất cả các lý do có thể bị tắt. Một số điểm nổi bật có thể giúp:

  • Việc sử dụng inode của bạn là gì, nếu nó gần như 100% có thể làm mọi thứ rối tung lên:

    df -i

  • Kích thước khối của bạn là gì? Rất nhiều tệp nhỏ và kích thước khối lớn có thể làm lệch nó một chút.

    Giai điệu Sudo2fs -l/dev/sda1 | grep 'Kích thước khối'

  • Đã xóa các tệp, bạn nói rằng bạn đã điều tra việc này, nhưng để có được tổng dung lượng bạn có thể sử dụng đường dẫn sau (tôi thích tìm thay vì lsof chỉ vì lsof là một nỗi đau để phân tích):

    Tìm kiếm Sudo/Proc/*/fd -printf "% l\t% s\n" | grep đã xóa | cắt -f2 | (tr '\ n' +; echo 0) | bc

Tuy nhiên, đó là gần gấp 2 lần. Chạy fsck trên phân vùng trong khi nó không được kết nối để được an toàn.

18
Kyle Brandt

Có vẻ như một trường hợp các tệp bị xóa trong khi các quy trình vẫn mở chúng. Việc ngắt kết nối này xảy ra do lệnh du tổng cộng không gian của các tệp tồn tại trong hệ thống tệp, trong khi df hiển thị các khối có sẵn trong hệ thống tệp. Các khối của một tệp mở và bị xóa không được giải phóng cho đến khi tệp đó được đóng lại.

Bạn có thể tìm thấy các quy trình đã mở nhưng đã xóa các tệp bằng cách kiểm tra/Proc

find /proc/*/fd -ls | grep deleted
11
TCampbell

Lý do rất có thể trong trường hợp của bạn là bạn có rất nhiều tệp rất nhỏ (nhỏ hơn kích thước khối của bạn trên ổ đĩa). Trong trường hợp đó, df sẽ báo cáo tổng của tất cả các khối được sử dụng, trong khi du sẽ báo cáo tổng kích thước tệp thực tế.

8
wolfgangsz

Tôi đồng ý rằng

lsof +L 1 /home | grep -i deleted

là một nơi tốt để bắt đầu, trong trường hợp của tôi, tôi nhận thấy rằng tôi có rất nhiều tập lệnh Perl đang chạy và giữ rất nhiều tệp, mặc dù chúng đáng lẽ phải bị xóa.

Tôi đã giết các hàm Perl và điều này làm cho dudf gần như giống hệt nhau, trường hợp đóng lại.

7
Sverre

Theo mặc định, khi bạn định dạng một hệ thống tệp với EXT3, 5% ổ đĩa được dành riêng cho root. tài khoản df cho dự trữ này khi nó báo cáo những gì có sẵn, trong khi du hiển thị những gì thực sự được sử dụng.

Bạn có thể xem các khối dành riêng bằng cách chạy:

tune2fs -l/dev/sda | grep -i dự trữ

và bạn sẽ nhận được một cái gì đó như:

Reserved block count:     412825
Reserved GDT blocks:      1022
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)

Nếu bạn muốn điều chỉnh tỷ lệ đó xuống phần trăm thấp hơn, bạn có thể làm như vậy với một cái gì đó như

tune2fs -m 1/dev/sda

Bạn có thể giảm nó xuống 0, tuy nhiên vì đây là hệ thống tập tin gốc của bạn nên tôi sẽ cảnh giác khi làm điều đó. Nếu hệ thống tập tin thực sự được lấp đầy, nó có thể làm cho các nhiệm vụ bảo trì cần thiết để dọn dẹp nó trở nên khó khăn.

1
Alex

Có thể là có lẽ du không thêm vào kích thước của các thư mục? Tuy nhiên, có vẻ như một sự khác biệt lớn, điều đó không thể chịu trách nhiệm cho tất cả.

0
Brian Knoblauch