NTFS sử dụng thuật toán phân bổ khối nào?


10

Trên Windows XP 64, tôi đã tải xuống một tệp 1,2 GB và nó đã bị phân mảnh, như hình ảnh hiển thị. Thật không may, trước khi chụp ảnh nhanh từ Piriform Defraggler, tôi đã phân mảnh các tệp khác, vì vậy bạn không thể thấy trạng thái chính xác tại thời điểm tệp được viết. Tuy nhiên, đĩa lúc nào cũng trống rỗng như bây giờ (25% đã sử dụng) và hầu như không bị phân mảnh.

ảnh chụp màn hình 1

NTFS sử dụng thuật toán phân bổ khối nào? Nó trông giống như ngẫu nhiên hoặc có thể đặt nó ở nơi đầu đĩa thực sự đứng.

CẬP NHẬT:

Đây là những gì đã xảy ra hôm nay sau khi viết 67 MiB của một tệp mới. Nó được chia thành 731 mảnh, kích thước trung bình chỉ 95 KiB. Các tập tin đã được sử dụng để lấp đầy một số khoảng trống, nhưng không phải tất cả chúng, nó cũng không sử dụng không gian trống liên tục lớn. Lạ thật phải không?

ảnh chụp màn hình 2

CẬP NHẬT 2:

Không giống như PC Guru , tôi thực sự không nghĩ Opera là thủ phạm. Tôi nghĩ rằng (trái ngược với Google Chrome) không cho Windows biết kích thước dự kiến, tuy nhiên, có nhiều trường hợp không thể thực hiện được và đó là trách nhiệm của HĐH để xử lý nó theo cách lành mạnh. Hình ảnh sau đây cho thấy những gì đã xảy ra sau vài ngày với tôi gần như không làm gì trên phân vùng này - thư mục TEMP và tất cả dữ liệu của tôi (ngoại trừ những người được quản lý bởi Windows) đều nằm ở nơi khác. Bản thân Windows dường như không sử dụng SetEndOfFilevà phân mảnh các tệp của chính nó theo cách khủng khiếp (600 phân đoạn cho một vài tệp nhỏ khoảng 40 MB). NTFS dường như không sử dụng khu vực có sẵn đầu tiên, vì có một lần nữa các tệp ở giữa và cũng gần cuối đĩa khá trống (sử dụng 23%),

ảnh chụp màn hình 3

Câu trả lời:


12

IIRC, hệ thống tệp NTFS cố gắng phân bổ tệp trong bộ lưu trữ liền kề. Tuy nhiên, nó chỉ có thể làm điều đó nếu hệ thống tập tin biết kích thước của tập tin. Nếu bạn mở một tệp và bắt đầu ghi vào nó, nó sẽ ghi vào vị trí "tốt nhất" để vừa với tệp (thường hướng ra bên ngoài đĩa). Nhưng nơi "tốt nhất" đó có thể không đủ lớn để vừa với tệp.

Nếu ứng dụng cho NTFS kích thước thực của tệp (với SetEndOfFile ()), NTFS có thể thực hiện công việc tìm không gian liền kề cho tệp tốt hơn (API SetEndOfFile khiến NTFS phân bổ dung lượng lưu trữ cho toàn bộ tệp).


Nhưng có vẻ như NTFS đã lấp đầy tất cả các khoảng trống và trải đều các phần còn lại thống nhất trên tất cả các đĩa. Như tôi đã nói, đĩa chưa bao giờ đầy đủ hơn bây giờ, các phần của tệp đã được ghi vào một số khu vực cuối cùng (nghĩa là đến các vị trí xấu nhất). Các phần khác đã bị ép trong các khu vực nhỏ giữa hai khu vực chiếm đóng mặc dù có rất nhiều nơi miễn phí ở nơi khác.
maaartinus

Bạn đã gọi setEndOfFile trước khi ghi tệp vào đĩa chưa? nếu bạn không làm thế, NTFS không có cách nào để biết kích thước thực của tệp để nó sẽ phát triển tệp bằng cách sử dụng bộ nhớ có sẵn.
Tái lậpMonica Larry Osterman

Đó không phải là tôi, đó là Opera. Có lẽ là không. Tuy nhiên, đó không phải là lý do để làm bất cứ điều gì lạ.
maaartinus

Bạn có ý nghĩa gì "kỳ lạ"? Nếu NTFS biết kích thước của tệp bạn đang viết, nó sẽ thực hiện những điều thông minh về tệp. Nếu nó không biết kích thước tệp, nó không thể thực hiện tốt công việc phân bổ lưu trữ.
Tái tạoMonica Larry Osterman

@ Larry Osterman: Chắc chắn, không biết kích thước tập tin, thật khó để làm điều đó đúng. Nhưng làm điều đó xấu cũng khó.
maaartinus

2

Vấn đề của bạn phải là với Opera. Tôi vừa xem một loạt các tập tin trên một ổ đĩa rất đầy đủ và phân mảnh. Các tệp lớn được tải xuống bằng Chrome đều liền kề nhau.

Điều này cho thấy Chrome đã biết kích thước tệp khi bắt đầu tải xuống, do đó, đã nói với NTFS kích thước tệp mong đợi. Nếu bạn làm điều đó, NTFS sẽ cố gắng đặt tệp vào một đoạn duy nhất hoặc khi không có đoạn nào đủ lớn, thành các đoạn lớn nhất có sẵn. Điều thú vị là nó luôn sử dụng các đoạn này theo thứ tự kích thước giảm dần, vì vậy các tệp lớn được Explorer sao chép vào một ổ đĩa bị phân mảnh, có thể nhảy xung quanh tất cả các ổ đĩa.

Trường hợp chương trình không biết kích thước tệp hoặc không bận tâm đến NTFS, nhưng thay vào đó chỉ mở tệp và bắt đầu ghi dữ liệu tuần tự, có vẻ như NTFS hoạt động rất giống với FAT32, chỉ đơn giản bắt đầu ở cụm có sẵn đầu tiên (hoặc cái đầu tiên có sẵn sau lần phân bổ cuối cùng trong phiên đó) sau đó sử dụng bất cứ thứ gì có sẵn từ đó trở đi. Ví dụ, cùng lúc tôi yêu cầu CCleaner quét registry, khiến nó sao lưu nó thành một tệp "tR" lớn. Tập tin này bắt đầu gần khi bắt đầu ổ đĩa và sau đó được phân tán trên 127 mảnh khác nhau. Không giống như các tệp được sao chép bằng Explorer hoặc được tải xuống bằng Chrome, trong mọi tệp tôi đã xem, các cụm được phân bổ theo thứ tự tăng dần.

Đối với nghiên cứu này, tôi đã sử dụng Winhex (phiên bản dùng thử miễn phí có sẵn từ Winhex.com). Khi nhìn vào một mục thư mục. nhấp chuột phải vào tên tệp và chọn Vị trí, Danh sách cụm, để xem danh sách các cụm được sử dụng bởi tệp đó.


Tôi nhận xét câu trả lời của bạn trong câu hỏi của tôi, vì nhận xét của tôi đã dài và tôi đã thêm một hình ảnh.
maaartinus
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.