Hệ thống tập tin Linux; sự khác biệt trong tính toán kích thước bằng cách sử dụng df & du


8

Khi tôi chạy dfnó cho thấy thiết bị root đã đầy.

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.4G     0 100% /

Tôi đã xem xét việc inodesử dụng và có khá nhiều không gian có sẵn cho thiết bị root

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda1               640K    103K    538K   16% /

Nhưng, khi tôi chạy dulệnh, nó cho thấy tôi chỉ sử dụng 2Ghết 9.9G.

ip-XXX-XXX-XXX-XXX:/$ du -xh --max-depth=1
14M ./etc
4.0K ./mnt
96K ./tmp
3.5M ./bin
0   ./sys
964K ./boot
4.0K ./srv
0   ./dev
55M ./lib
25M ./root
1.1G ./usr
4.0K ./opt
846M ./var
4.3M ./sbin
23M ./home
16K ./lost+found
0   ./proc
2.0G .

Nó chỉ khiến tôi phát điên và thú vị quá. Đây là một vấn đề lớn đối với chúng tôi vì đĩa gốc đã /đầy và một số chức năng trong trang web của chúng tôi bị lỗi.

Xin hãy giúp tôi giải quyết (cũng hiểu) vấn đề này.

Cảm ơn.



@Gilles như bạn đã nói, tôi đã chạy du -x /và tôi chỉ thấy 2G được sử dụng và tôi đã tính kích thước inode 160M. Nó giúp tôi hiểu các công cụ nhưng tôi chỉ muốn giải quyết vấn đề này.
Rakesh Sankar

Bạn đã chạy dunhư root? Nếu không, nó chỉ có thể báo cáo về các tập tin bạn có thể truy cập.
Gilles 'SO- đừng trở nên xấu xa'

@Gilles Tôi đang chạy nhưroot
Rakesh Sankar

Tôi không có nhiều thứ để thêm vào đây ngoài ncduchương trình tuyệt vời , giúp hình dung việc sử dụng đĩa.
Cướp

Câu trả lời:


4

Khi các tệp bị xóa trong * nix, chúng tiếp tục tồn tại trên đĩa (và chiếm dung lượng đĩa) miễn là một quá trình mở chúng. Điều khá phổ biến là tận dụng điều này để "bảo mật" các tệp tạm thời bằng cách tạo chúng với kích thước nhỏ, xóa chúng và sau đó sử dụng tệp đã xóa để lưu trữ dữ liệu mà không phải lo lắng về các quy trình khác (dễ dàng) truy cập vào nó, vì vậy lượng không gian trong các tệp bị xóa có thể tăng khá lớn nếu, giả sử, cơ sở dữ liệu tạm thời hoặc phiên chỉnh sửa đa phương tiện đang được xử lý theo cách này. Một khả năng khác về cách bạn có thể có quá nhiều "không gian" sẽ là nếu hệ thống được nâng cấp (nhiều lần) mà không khởi động lại hoặc khởi động lại chương trình, dẫn đến tất cả các thư viện .so cũ của bạn được mở bởi các chương trình đã được khởi động trước nâng cấp và vẫn đang chạy.

dfnhìn thấy không gian được sử dụng bởi các tệp này vì nó chỉ xem có bao nhiêu không gian được phân bổ trên thiết bị, nhưng dukhông nhìn thấy chúng vì không có bất kỳ mục nhập thư mục tương ứng.

"Ẩn" không gian đã sử dụng như thế này chỉ có thể được giải phóng khi các quy trình đã xóa các tệp mở đóng chúng. Bạn có thể tìm thấy các quy trình này bằng fuserlệnh và chấm dứt chúng (hoặc, đối với nhiều trình nền, gửi tín hiệu yêu cầu chúng đóng và mở lại bất kỳ tệp đang mở nào).


cảm ơn, thông tin tốt, một cái gì đó (nhiều hơn) tôi hiểu ngày hôm nay. Nhưng để tìm một hiddenkhông gian đã sử dụng, tôi cố gắng chạy fuserlệnh để xem tất cả các tệp đang được sử dụng bởi một quy trình nhưng không được liên kết - tôi không thể tìm thấy bất kỳ. Bạn có bất kỳ lệnh hoặc hướng dẫn tôi để tìm thấy nó? Đây là lệnh tôi sử dụngfuser -v -a /
Rakesh Sankar

Tôi đã phải khởi động lại nó để thoát khỏi không gian ẩn nhưng tôi không thể tìm ra giải pháp thích hợp để loại bỏ những tập tin ẩn đó.
Rakesh Sankar

1

Đã có lúc đĩa đầy, sau đó có thể bị nhầm lẫn cho đến khi khởi động lại / nhắc lại rằng đĩa vẫn đầy, ngay cả khi bạn đã xóa một tải tệp.


Tôi không thể khởi động lại vì đó là một trang web sản xuất. Nhưng tôi đang tìm kiếm một giải pháp có thể giúp tôi tìm thấy những không gian ẩn này và mang nó trở lại.
Rakesh Sankar

Nó có thể sản xuất nhưng đôi khi khởi động lại là câu trả lời duy nhất. Đó là vấn đề đáng tiếc của nó là đĩa gốc của bạn và tất cả hệ điều hành của bạn nằm trên nó. Đó là lý do tại sao nhiều người ủng hộ việc sử dụng tmp, var, home, v.v. trên các đĩa khác, vì sau đó chúng có thể được kể lại. Dường như phổ biến hơn là HĐH không nhận ra không gian có sẵn cho đĩa gốc.
BugSense

1

Về phía tôi, tôi chỉ cần khởi động lại syslogd để lấy lại dung lượng đĩa. Tôi đã mất 3GB! Máy chủ của tôi đã hoạt động được 250 ngày.


0

Có một cách để dọn sạch không gian mà không cần khởi động lại ứng dụng. Đây là những thông tin chi tiết:

  1. Giả sử bạn có quá trình foochạy và tạo tệp 2 GB có tên abc.log. Bây giờ nói abc.log này bị xóa bởi người khác.

  2. Nhận foopid (giả sử 123). Vì vậy, /proc/123/fdsẽ hiển thị danh sách các mô tả tập tin được mở bởi foo. Một với abc.log sẽ hiển thị là đã xóa. Giả sử fdabs.log là 111. Nếu bạn chạy less /proc/123/fd/111, nó vẫn sẽ hiển thị cho bạn tất cả 2 GB dữ liệu đó.

  3. Chạy đi echo " " > /proc/123/fd/111. Điều này sẽ ghi đè lên nội dung với một chuỗi trống. Sau lệnh này nếu bạn thử, dfnó sẽ hiển thị thêm 2 GB được khôi phục bằng cách xóa abc.log.

Đó là nó. Tôi đã thử điều này trên CentOS và nó hoạt động.


Đây là một điều hữu ích để biết. Nhưng nó không phải là một câu trả lời cho câu hỏi.
Isaac Rabinovitch

xin lỗi ans của tôi đã được nhắm mục tiêu nhiều hơn vào việc làm sạch không gian đĩa nếu bạn biết id quá trình đã xóa tệp. Đối với trường hợp cụ thể này, bạn phải duyệt qua tất cả các tệp trong / Proc / [0-9] * / fd, grep những tệp đã xóa và tuân theo logic được đề cập ở trên.
Kaustubh Sedit

Nếu bạn thực sự tò mò tập tin nào đã gây rò rỉ dung lượng ổ đĩa, hãy dọn sạch tập tin bị xóa tại một thời điểm, kiểm tra đầu ra df mỗi lần và đăng nhập thông tin này.
Kaustubh Sedit
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.