df nói đĩa đã đầy, nhưng nó không


58

Trên máy chủ ảo hóa chạy Ubuntu 10.04, df báo cáo như sau:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Điều này làm tôi bối rối vì hai lý do: 1.) df nói rằng / dev / sda1, được gắn tại /, có dung lượng 7.4 gigabyte, trong đó chỉ có 7 gigabyte đang được sử dụng, nhưng nó báo cáo / đã đầy 100%; và 2.) Tôi có thể tạo tập tin trên / để nó rõ ràng không còn chỗ trống.

Có thể có liên quan là thư mục / www là một liên kết tượng trưng đến / home / www, nằm trên một phân vùng khác (/ dev / sda3, được gắn tại / home).

Bất cứ ai có thể đưa ra đề nghị về những gì có thể xảy ra ở đây? Máy chủ dường như hoạt động không có vấn đề, nhưng tôi muốn chắc chắn rằng không có vấn đề gì với bảng phân vùng, hệ thống tệp hoặc thứ gì khác có thể dẫn đến nổ (hoặc nổ) sau này.


Cảm ơn tất cả các câu trả lời hữu ích. Tôi không thể tạo các tệp như một người dùng bình thường để có vẻ như đó là bộ đệm 5 phần trăm ngăn chặn thảm họa. Bây giờ tôi chỉ cần tìm ra lý do tại sao đĩa đầy (Tôi hơi lo lắng điều gì đó độc hại có thể xảy ra vì không có tệp nhật ký nào chiếm nhiều dung lượng và không có nhiều phần mềm được cài đặt, chỉ là một máy chủ LAMP đơn giản) ...
Chris

3
Vị trí đầu tiên tôi muốn là / tmp. Một khả năng khác là bạn có một tệp đã bị xóa mà chương trình đang chạy đang giữ. Tôi nghĩ bạn có thể chạy 'lsof | grep đã xóa 'làm root để tìm những cái đó.
Scott

Câu trả lời:


103

Có thể một quá trình đã mở một tệp lớn đã bị xóa. Bạn sẽ phải giết quá trình đó để giải phóng không gian. Bạn có thể xác định quá trình bằng cách sử dụng lsof. Trên Linux đã xóa các tệp đang mở được biết đến lsof và được đánh dấu là (đã xóa) trong đầu ra của lsof.

Bạn có thể kiểm tra điều này với sudo lsof +L1


8
Nó đã giải quyết được bí ẩn đối với tôi. Tôi đã xóa một tệp nhật ký lớn từ uwsgi mà không khởi động lại dịch vụ. Khi được truy vấn df -ah, tôi có đĩa đầy, nhưng du -sh /nói rằng tôi nên có dung lượng trống. Sau khi khởi động lại uwsgi tôi có rất nhiều không gian trống!
Fabio Montefuscolo

Tôi có các bản ghi trị giá 40G bị mắc kẹt trong limbo và lsof + L1 đã cho tôi tầm nhìn tia X để xem điều gì đã xảy ra ;-) Tất cả những gì tôi phải làm là khởi động lại dịch vụ.
PJ Brunet

46

5% (theo mặc định) của hệ thống tập tin được dành riêng cho các trường hợp hệ thống tập tin lấp đầy để ngăn chặn các vấn đề nghiêm trọng. Hệ thống tập tin của bạn đã đầy. Không có gì thảm khốc xảy ra vì bộ đệm 5% - root được phép sử dụng bộ đệm an toàn đó và, trong thiết lập của bạn, người dùng không root không có lý do để ghi vào hệ thống tập tin đó.

Nếu bạn có trình tiện ích chạy dưới dạng người dùng không phải root nhưng cần quản lý tệp trong hệ thống tệp đó, mọi thứ sẽ bị hỏng. Một daemon phổ biến như vậy là named. Khác là ntpd.


1
Đối với câu hỏi TẠI SAO đĩa của bạn đã đầy, 7G thực sự không còn nhiều dung lượng. Bạn cũng dường như có mọi thứ bị đổ trong một phân vùng / hệ thống tập tin ( /). Điều này thường được coi là một điều xấu (bởi vì nếu một cái gì đó trở nên tồi tệ /và thế giới kết thúc) nhưng các bản phân phối Linux vẫn kiên trì thực hiện vì nó "đơn giản hơn". Tôi sẽ bắt đầu bằng cách tìm kiếm /var(đặc biệt /var/log) các logfiles lớn. du -hs /(với quyền root) sẽ giúp bạn tìm các thư mục lớn nhất và có thể chỉ cho bạn những gì cần dọn dẹp.
voretaq7


17

Hầu hết các hệ thống tệp Linux dành 5% dung lượng để chỉ sử dụng người dùng root.

Bạn có thể thấy điều này với ví dụ

dumpe2fs /dev/sda1 | grep -i reserved

Bạn có thể thay đổi số tiền dành riêng bằng cách sử dụng:

tune2fs -m 0 /dev/sda1

Trong hầu hết các trường hợp, máy chủ sẽ xuất hiện để tiếp tục hoạt động tốt - giả sử tất cả các quy trình đang được chạy dưới dạng 'root'.


8

Tôi gặp vấn đề này và gặp khó khăn khi thực tế xóa các tệp lớn khác nhau không cải thiện được tình hình (không biết về bộ đệm 5%) dù sao đi theo một số manh mối ở đây

Từ gốc đi xuống các thư mục lớn nhất được tiết lộ bằng cách lặp đi lặp lại: -

du -sh */ 

cho đến khi tôi đến một thư mục cho các tệp nhật ký máy chủ web có một số nhật ký hoàn toàn lớn

mà tôi đã cắt ngắn với

:>lighttpd.error.log

đột nhiên df -h đã giảm tới 48%!


14
Điều đó thực sự sẽ kết thúc với "... sau đó tôi thiết lập xoay vòng nhật ký."
hayalci

hayalci: thấy rằng logrotation đã trỏ đến thư mục sai.
zzapper

8

Ngoài các nguyên nhân đã được đề xuất, trong một số trường hợp, nó cũng có thể là sau:

  • một đĩa khác được gắn "trên" thư mục hiện có chứa đầy dữ liệu
  • du sẽ tính kích thước chi tiêu của đĩa được gắn và df sẽ hiển thị thực sự chi
  • Giải pháp: (khi có thể) ngắt kết nối tất cả các đĩa không root và kiểm tra lại kích thước du -md 1. Khắc phục tình trạng bằng cách di chuyển thư mục ẩn đến một nơi khác hoặc gắn vào vị trí khác.

Làm thế nào để bạn tìm thấy điểm gắn kết khác với df?
Hogan

@Hogan: có thể gọi "mount" hoặc "cat / etc / fstab" sẽ giúp ích?
Robert Lujo

5

df -hđang làm tròn các giá trị. Ngay cả tỷ lệ phần trăm được làm tròn. Bỏ qua -hvà bạn thấy sự khác biệt nhỏ hơn hạt mịn.

Oh. Và ext3 và các dẫn xuất dành một tỷ lệ phần trăm (mặc định 5%) cho hệ thống tệp cho chính xác chòm sao có vấn đề này. Nếu hệ thống tập tin gốc của bạn sẽ thực sự đầy (còn lại 0 byte), bạn không thể khởi động hệ thống. Vì vậy, phần dành riêng ngăn chặn điều này.


Cũng có thể là anh ta đã hết mực miễn phí. Chạy 'df -i' để sử dụng inodes.
Trường hợp Andrew

Ông đã không cung cấp thông tin mà các đĩa đầy đủ. Anh ta chỉ nghĩ rằng đĩa đã đầy. 100% không gian sử dụng mà không có lỗi chỉ là "hầu như đầy đủ".
mailq

1

Tôi đã thực hiện một bản cập nhật lớn của một số thư viện và có rất nhiều thư viện và tệp tạm thời không cần thiết để tôi có không gian trống trong thư mục "/" bằng cách sử dụng:

apt-get install -f
sudo apt-get clean

Và đổ rác của bạn


Đây là lời khuyên chung hợp lý về việc giảm mức sử dụng đĩa, nhưng nó không giải quyết được câu hỏi tại sao df nói rằng đĩa đầy khi không.
Andrew Schulman

0

kiểm tra / mất + tìm thấy, tôi có một hệ thống (centos 7) và một số tệp trong / mất + tìm thấy đã ăn hết dung lượng


0

Nếu phân vùng của bạn là btrfs, có thể có một subvolume chiếm không gian. Một hệ thống tập tin btrfs có thể có nhiều subvolume, chỉ một trong số đó được gắn kết. Bạn có thể sử dụng btrfs subvolume list <dir>để liệt kê tất cả các subvolume và btrfs subvolume delete <dir>/<subvolume>xóa một. Hãy chắc chắn rằng bạn không xóa cái được gắn theo mặc định.

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.