Làm cách nào để tôi xuất dữ liệu thưa thớt của một tập tin?


15

Làm thế nào để tôi xuất bao nhiêu kích thước danh nghĩa tập tin thực sự được lấp đầy với dữ liệu? Giốngvmtouch hiển thị bao nhiêu tệp hiện có trong bộ nhớ ...

Tôi hy vọng quy trình làm việc sẽ như thế này:

$ fallocate -l 1000000 data 
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000  data
$ measure_sparseness
50%

Cách giải quyết: sử dụng du -bshdu -shvà so sánh chúng.


1
có liên quan: filefragđối với bất kỳ hệ thống tệp nào và xfs_bmap -vplcho XFS là các công cụ chính để hiển thị vị trí của dữ liệu (và vị trí của các phạm vi không được cấp phép trước) khi chơi xung quanh với các tệp thưa thớt và bấm lỗ.
Peter Cordes

filefrag data-> nhiều FIBMAP: Invalid argument-> data: 1 extent found...
Vi.

trên hệ thống tập tin nào? filefrag -ehoạt động hoàn hảo trên XFS và ext4 ít nhất. Tôi đã không thử nghiệm trên người khác. Nó sử dụng FIEMAP (bản đồ phạm vi), với dự phòng là FIBMAP. Nếu những cái đó ioctlkhông hoạt động, thì nó sẽ không hữu ích.
Peter Cordes

Trên tmpfs. Tôi filefragkhông có -elựa chọn.
Vi.

Làm thế nào cũ của bạn là e2fsprogs? Tôi khá chắc chắn rằng nó không phải là một tính năng gần đây. Ngoài ra còn có một -vtùy chọn in thông tin dài dòng tương tự (cộng với một số dòng tiêu đề bổ sung). Có lẽ bạn filefragsẽ có điều đó. xfs_bmapMặc dù vậy, không giống như , nó không chỉ ra rõ ràng các lỗ hổng với các dòng riêng biệt, nó chỉ có sự không liên tục ở vị trí tệp. Dù sao, tôi không ngạc nhiên khi tmpfskhông hỗ trợ FIEMAP, vì không có thiết bị chặn nào làm cửa hàng sao lưu, vì vậy không có giá trị hợp lý cho vị trí của các khu vực.
Peter Cordes

Câu trả lời:


19

find%Sđịnh dạng định dạng mà thậm chí còn được đặt tên là "độ thưa"

         %S     File's  sparseness.   This  is  calculated as (BLOCKSIZE*st_blocks / st_size).  The exact value you will get for an ordinary file of a certain
                 length is system-dependent.  However, normally sparse files will have values less than 1.0, and files which use indirect  blocks  may  have  a
                 value which is greater than 1.0.   The value used for BLOCKSIZE is system-dependent, but is usually 512 bytes.   If the file size is zero, the
                 value printed is undefined.  On systems which lack support for st_blocks, a file's sparseness is assumed to be 1.0.
$ fallocate -l 1000000 data
$ find data -printf '%S\n'
1.00352
$ fallocate -p -o 250000 -l 500000  data
$ find data -printf '%S\n'
0.507904

Hấp dẫn. Hầu hết các tệp thông thường trên một hệ thống sẽ có độ thưa thớt trên 1.0, thư mục, liên kết mềm và ổ cắm sẽ luôn có chính xác 1.0.
hóa học

Không phải một số hệ thống lưu liên kết tượng trưng (ngắn) trực tiếp trong nút, mà không sử dụng khối dữ liệu nào cả? Tự hỏi sự thưa thớt của nó nên là gì. Bên cạnh đó, không phải là định nghĩa sai, xung quanh, chắc chắn một tệp bình thường (tức là không thưa thớt) nên có độ thưa không? :)
ilkkachu

@grochmal, trên ext4 (Linux): ln -s foo link , "độ thưa" của link: 0. Ổ cắm và FIFO có độ dài bằng 0, vì vậy findhiển thị độ thưa thớt 1.
ilkkachu

1

Nếu bạn findkhông có tùy chọn đó, một phương thức hoạt động trên UNIX kể từ những năm 70 là:

ls -ls file

Nó sẽ in số khối thực tế được sử dụng và byte cao nhất từng được viết. Từ đó bạn có thể dễ dàng tính toán có bao nhiêu khối thực sự chưa được phân bổ.


0

Trong khi find's %Ssẽ in một đầu ra ngắn gọn, cho biết thêm chi tiết bạn có thể muốn nhìn vào sparsetestđó tôi đã viết - mã nguồn mở, và trên github đây . Vui lòng sửa đổi nó nếu bạn muốn in ra (ví dụ) mỗi lỗ.

Bài viết blog cho thấy vấn đề với phân bổ thưa thớt ở đây bằng cách sử dụng sparsetestđể gỡ lỗi vấn đề.


Nó có thể in một "bản đồ" các phạm vi trong một tệp, như vmtouch -vin bản đồ của các vùng được lưu trong bộ đệm không?
Vi.

@Vi. Tôi đã viết nó một lúc trước và quên một số chi tiết - những gì nó thực sự đang làm là tạo một tệp thưa thớt, ghi dữ liệu vào đó, sau đó in số liệu thống kê. Bạn chỉ muốn bit tạo thống kê. Để in lỗ bạn sẽ cần lseekvới SEEK_HOLESEEK_DATA. Dễ làm.
abligh
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.