Làm thế nào để xem việc sử dụng đĩa với ít chi phí trong bash?


8
du -csh /

Ở trên sẽ mất một lượng lớn thời gian để tính toán, có cách nào để xem kết quả kém chính xác hơn với ít chi phí hơn không?

CẬP NHẬT

Những gì tôi muốn biết là tổng kích thước trong một thư mục cụ thể.

Câu trả lời:


9

Theo như một phiên bản tối ưu hơn du, tôi không biết về một phiên bản . Những điều mà tôi suy nghĩ là:

  1. Lưu trữ các tệp này trên đĩa ram hoặc một cái gì đó tương tự.
  2. Nếu chỉ có một ứng dụng ghi vào thư mục này và thư mục con của nó, thì ứng dụng sẽ theo dõi.
  3. Nếu tất cả các tệp này có cùng kích thước và số lượng chúng được phân bổ đều giữa các thư mục, bạn có thể chỉ cần đếm số lượng thư mục con và nhân số đó với tệp trên mỗi thư mục và sau đó kích thước cho mỗi tệp. Bạn có thể thực hiện việc này một cách nhanh chóng bằng cách chỉ sử dụng số lượng liên kết cứng cho thư mục nếu chỉ bạn chỉ có một thư mục sâu cấu trúc ( stat -c '%h') - 2.
  4. Tạo tất cả các tệp này thuộc sở hữu của một người dùng cụ thể và sử dụng cơ chế hạn ngạch.
  5. Sử dụng một phân vùng chuyên dụng và chỉ cần sử dụng df. Một hệ thống tệp ảo (một tệp trên hệ thống tệp được gắn thông qua loopback) cũng có thể làm điều này.

Trong số này, các tùy chọn hạn ngạch và phân vùng chuyên dụng có lẽ là dễ nhất và hiệu quả nhất.


6

Vấn đề là 'du' phải liệt kê mọi đối tượng trong cây con. Đây là một hoạt động chuyên sâu về siêu dữ liệu và mất một thời gian cho hầu hết các hệ thống tệp Linux. Một số hệ thống tập tin, NSS của NTFS và Novell xuất hiện, có khả năng theo dõi các kích thước thư mục như thế này trong siêu dữ liệu giúp thao tác này nhanh hơn rất nhiều. Nói chung, nếu hệ thống tệp của bạn hỗ trợ hạn ngạch thư mục thuộc loại nào đó, thì nó phải theo dõi dữ liệu này trong nội bộ để thực thi, mọi thay đổi kích thước được sao chép lên cây thư mục đến điểm hạn ngạch (NTFS) hoặc mọi thư mục (NSS ) khi nó xảy ra, vì vậy nhận được kích thước cây thư mục là rất nhanh.

Thật không may, không có cách nào để khiến du chạy nhanh hơn, chỉ là công việc.

  • Chạy 'du' ở chế độ hàng loạt và sống với kết quả không trực tiếp
  • Tạo một hệ thống tệp mới và sử dụng 'df' thay thế
  • Tạo một tệp lớn sẽ giữ thư mục của bạn, loopback-mount nó, định dạng nó và sử dụng 'df' thay vào điểm gắn kết mới đó. Nếu bạn cần thêm dung lượng, hãy ngắt kết nối mountback, mở rộng tệp và kết nối lại.

+1 Đây là một câu trả lời rất hữu ích.
Richard Holloway

4
du -h --max-depth=1

Cung cấp cho bạn các kích thước ở định dạng KB / MB / GB của con người từ thư mục làm việc hiện tại của bạn.


Tôi nghĩ rằng họ muốn biết tại sao phải mất quá lâu để du tạo và trả lời. Tôi nghĩ rằng các cửa sổ hành động tương tự quá. Nếu bạn nhấp chuột phải vào một thư mục thì bạn phải đợi trong khi nó tính toán kích thước của mỗi thư mục con. Đó chỉ là cách hệ thống tập tin hoạt động.
Unix Janitor

Vâng, trừ khi họ chạy một dịch vụ lập chỉ mục hoặc một cái gì đó.
David Rickman

3

Với các công cụ tiêu chuẩn, bạn phải lấy kích thước của mỗi tệp trong thư mục mỗi lần bạn muốn biết tổng kích thước. Một cách hiệu quả hơn có thể làm là có một "màn hình kích thước thư mục", theo dõi kích thước hiện tại của thư mục. Không có điều đó (mà tôi biết), nhưng bạn có thể thực hiện một với inotify. Có thể không phải với bash (và inotify-tools), nhưng bạn có thể sử dụng python và pyinotify chẳng hạn.



2

Ngoài ra, hãy xem xét tùy chọn -x trên du - "một hệ thống tệp" nếu bạn đang làm

du -xh / --max-depth=1 

Bạn sẽ chỉ thấy tóm tắt sử dụng đĩa trên phân vùng gốc của mình và nó sẽ không thử thêm / Proc, / sys, / dev, v.v.


2

nếu bạn chỉ muốn sử dụng đĩa cho hệ thống tập tin gốc, thì

df -h /


1

Không. Bạn có thể định kỳ thực hiện một hành trình đến một tệp văn bản, trong một công việc định kỳ được thiết lập để chạy qua đêm, vì vậy bạn không có sẵn dữ liệu hiện tại ngay lập tức?

Lưu ý rằng việc đo dung lượng ổ đĩa được sử dụng bởi một thư mục chứa một lượng lớn tệp không có trong Windows tương tự sẽ mất một thời gian.


0

df -h sẽ thực hiện các mẹo


Những gì tôi muốn biết là tổng kích thước trong một thư mục cụ thể.
apache


0

Có lẽ

df -h

văn bản bổ sung vì một câu trả lời ngắn gọn, súc tích không đủ để serverfault nghĩ tôi là con người.


Nhưng tôi cần biết tổng kích thước trong một thư mục cụ thể
apache

sau đó sử dụng sẽ cần sử dụng du
The Unix Janitor

Nhưng trong các cửa sổ, tôi có thể thấy tổng dung lượng đã sử dụng không có phí, tại sao không thể có trong linux?
apache

bạn nghiêm túc chứ? ntfs không phải là ext3
Unix Janitor

1
@apache, ồ có phí quá cao, hãy thử xem kích thước của thư mục 20 GB với rất nhiều tệp 10-20 MB. Có def trên đầu.
Zypher

0

Để tìm không gian trong thư mục đó, hãy liệt kê nó thay vì /. Để tìm không gian trong thư mục foobar, liệt kê cả hai:

du -csh foo bar

0

Bạn nên sử dụng dnotify để tính toán mức sử dụng đĩa nếu hệ thống tập tin không được thay đổi thường xuyên.

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.