du -s - kích thước ứng dụng VS du -s


7

Ai đó có thể cho tôi biết sự khác biệt từ:

du -s dir 
3705012 dir

du -s --apparent-size dir
3614558 dir

các thư mục này nằm trong một thiết bị khối (được tạo bằng cryptsetup). Hoặc tốt hơn: tại sao tôi chỉ cần thêm kích thước - chỉ với các tệp bên trong một thiết bị khối được mã hóa?


1
Câu trả lời này từ stackoverflow sẽ giúp bạn: stackoverflow.com/a/5694854/2231796

Câu trả lời:


10

"Kích thước rõ ràng" của một tệp là có bao nhiêu dữ liệu hợp lệ thực sự trong tệp. Đây là lượng dữ liệu thực tế có thể được đọc từ tệp. Các thiết bị định hướng khối chỉ có thể lưu trữ về mặt khối chứ không phải byte. Do đó, việc sử dụng đĩa luôn được làm tròn lên khối cao nhất tiếp theo. Một "khối" trong trường hợp này có thể không tương đương với một khối vật lý trên thiết bị lưu trữ, tùy thuộc vào cách hệ thống tệp phân bổ không gian.

Trong trường hợp thiết bị được mã hóa của bạn, hệ thống tệp có thể mở rộng dung lượng được sử dụng để bao gồm cả chi phí để hỗ trợ thông tin mã hóa / giải mã. Nó cũng có thể mã hóa hoặc ngẫu nhiên không gian chưa sử dụng giữa phần cuối của tệp và phần cuối của khối chứa nó, điều này có thể làm cho nó có vẻ lớn hơn du.

Không ai trong số này tính đến việc xử lý tệp thưa thớt, có thể không được hỗ trợ trong hệ thống tệp được mã hóa.


2

Ví dụ độ chi tiết khối tối thiểu

Hãy chơi một chút để xem những gì đang xảy ra.

mountcho tôi biết tôi đang ở trên một phân vùng ext4 được gắn tại /.

Tôi tìm thấy kích thước khối của nó với:

stat -fc %s .

cung cấp cho:

4096

Bây giờ hãy tạo một số tệp có kích thước 1 4095 4096 4097:

#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
  dd if=/dev/zero of=f bs=1 count="${size}" status=none
  echo "size     ${size}"
  echo "real     $(du --block-size=1 f)"
  echo "apparent $(du --block-size=1 --apparent-size f)"
  echo
done

và kết quả là:

size     1
real     4096   f
apparent 1      f

size     4095
real     4096   f
apparent 4095   f

size     4096
real     4096   f
apparent 4096   f

size     4097
real     8192   f
apparent 4097   f

Vì vậy, chúng tôi thấy rằng bất cứ điều gì dưới đây hoặc bằng để 4096chiếm 4096byte trong thực tế.

Sau đó, ngay khi chúng tôi đi qua 4097, nó đi lên đến 8192đó là 2 * 4096.

Rõ ràng là đĩa luôn lưu trữ dữ liệu tại một ranh giới khối của 4096byte.

Điều gì xảy ra với các tập tin thưa thớt?

Tôi đã không điều tra đại diện chính xác là gì, nhưng rõ ràng điều đó --apparentsẽ được xem xét.

Điều này có thể dẫn đến kích thước rõ ràng là lớn hơn so với việc sử dụng đĩa thực tế.

Ví dụ:

dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f

cho:

8192    f
1073741825      f

Liên quan: /programming/38718864/how-to-test-if-spude-file-is- hỗ trợ

Phải làm gì nếu tôi muốn lưu trữ một loạt các tệp nhỏ?

Một số khả năng là:

Thư mục:

Đã thử nghiệm trong Ubuntu 16.04.

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.