Tối ưu hóa kích thước khu vực logic cho kích thước khu vực vật lý 4096 HDD


20

Với nhiều ổ đĩa cứng mới, kích thước cung cấp vật lý là 4096. Có thể làm cho hệ thống sử dụng kích thước khu vực logic có cùng kích thước, thay vì kích thước khu vực logic mặc định là 512?

Nó sẽ tăng tốc độ đọc và viết số lượng lớn? Nó có thể được cấu hình ở đâu?


Xem unix.stackexchange.com/a/18542/1131 để nhận xét về các vấn đề căn chỉnh. Các phiên bản gần đây mkfs.*sẽ tự động sử dụng kích thước cung cấp tối ưu. Bạn có thể thực hiện một số mkfs.*thử nghiệm và kiểm tra kết quả (trong đầu ra dài dòng của mkfs hoặc trong chương trình tiện ích fs có liên quan).
maxschlepzig

Cảm ơn nhưng không có vấn đề liên kết
Matan

Câu trả lời:


29

512 byte không thực sự là kích thước cung mặc định. Nó phụ thuộc vào phần cứng của bạn.

/sysVí dụ, bạn có thể hiển thị kích thước khu vực vật lý / logic của báo cáo đĩa của mình thông qua hệ thống tệp giả:

# cat /sys/block/sda/queue/physical_block_size
4096
# cat /sys/block/sda/queue/logical_block_size
512

Sự khác biệt giữa hai giá trị đó là gì?

  • Đây physical_block_sizelà kích thước tối thiểu của một khối mà ổ đĩa có thể ghi trong một hoạt động nguyên tử.
  • Đây logical_block_sizelà kích thước nhỏ nhất mà ổ đĩa có thể ghi (xem tài liệu kernel linux).

Do đó, nếu bạn có ổ đĩa 4k, điều đó có nghĩa là ngăn xếp lưu trữ của bạn (hệ thống tập tin, v.v.) sử dụng một cái gì đó bằng hoặc lớn hơn kích thước của khu vực vật lý.

Những giá trị đó cũng được hiển thị trong các phiên bản gần đây của fdisk, ví dụ:

# fdisk -l /dev/sda
[..]
Sector size (logical/physical): 512 bytes / 4096 bytes

Trên các bản phân phối linux hiện tại, các chương trình (cần quan tâm đến kích thước cung cấp tối ưu) như thế mkfs.xfssẽ chọn kích thước cung tối ưu theo mặc định (ví dụ: 4096 byte).

Nhưng bạn cũng có thể chỉ định rõ ràng thông qua một tùy chọn, ví dụ:

# mkfs.xfs -f -s size=4096 /dev/sda

Hoặc là:

# mkfs.ext4 -F -b 4096 /dev/sda

Trong mọi trường hợp, hầu hết mkfscác biến thể cũng sẽ hiển thị kích thước khối được sử dụng trong khi thực hiện.

Đối với hệ thống tệp hiện có, kích thước khối có thể được xác định bằng một lệnh như:

# xfs_info /mnt
[..]
meta-data=                       sectsz=4096
data     =                       bsize=4096
naming   =version 2              bsize=4096
log      =internal               bsize=4096
         =                       sectsz=4096
realtime =none                   extsz=4096

Hoặc là:

# tune2fs -l /dev/sda
Block size:               4096
Fragment size:            4096

Hoặc là:

# btrfs inspect-internal dump-super /dev/sda | grep size
csum_size             4
sys_array_size        97
sectorsize            4096
nodesize              16384
leafsize              16384
stripesize            4096
dev_item.sector_size  4096

Khi tạo hệ thống tập tin trên một phân vùng, một điều cần kiểm tra sau đó là nếu địa chỉ bắt đầu phân vùng thực sự được căn chỉnh theo kích thước khối vật lý. Ví dụ, nhìn vào fdisk -lđầu ra, chuyển đổi địa chỉ bắt đầu thành byte, chia chúng theo kích thước khối vật lý - lời nhắc phải bằng 0 nếu các phân vùng được căn chỉnh.


Cảm ơn, việc bạn làm rõ những gì Linux mô tả là kích thước khối vật lý và logic là rất hữu ích. Gần đây tôi đã gặp phải một tình huống trong đó cùng một ổ cứng 8TB xuất hiện dưới dạng các khối 512 byte trong một vỏ USB và các khối 4K ở một khối khác, cả logic và vật lý. Tôi nghĩ có gì đó không đúng vì Linux đã không nhìn thấy bản đồ phân vùng khi tôi thay đổi bao vây, nhưng sau đó tôi thấy rằng GPT bắt đầu trên khối logic thứ hai, vì vậy nó đã ở sai vị trí cho căn chỉnh mới. Tôi đã sử dụng gdisk để tạo lại một phân vùng lớn duy nhất và tất cả dữ liệu của tôi vẫn ở đó (ext4 với các khối 4K).
Raptor007

Là phương pháp bạn mô tả để kiểm tra sự liên kết đáng tin cậy? Tôi đã sử dụng tiện ích "chia tay" và nó báo cáo rằng một phân vùng hdd được căn chỉnh, nhưng với cách tiếp cận của bạn, tôi đã truy vấn kích thước khối vật lý, lấy 512, sau đó lấy địa chỉ bắt đầu của phân vùng từ đó fdisk -l, chia cho 8 và sau đó 512. Phần còn lại không phải là 0, vì vậy phân vùng dường như không được căn chỉnh
user907860

1
@ user907860 Tại sao bạn chia cho 8? Một fdisk -lbáo cáo Units = sectors of 1 * 512 = 512 bytestrong một trong các hệ thống Linux của tôi - do đó, đối với ổ đĩa logic / vật lý 512/4096 với 2 phân vùng bắt đầu từ năm 2048 và 1026048 tôi tính toán 2048*512%40961026048*512%4096- ví dụ trong vỏ trăn. Vì cả hai biểu thức đều bằng 0 nên các phân vùng được căn chỉnh 4k.
maxschlepzig

cảm ơn bạn rất nhiều vì lời giải thích, tôi đã không nhận thấy rằng số đó là các lĩnh vực, không phải bit.
Đáng

2

Không, điều đó là không thể, cũng không thành vấn đề nếu có. IO thường được thực hiện theo đơn vị ít nhất 4096 byte, và thường là nhiều hơn nữa.


2
Không chắc câu lệnh này liên quan đến câu hỏi của tôi như thế nào Quan tâm làm rõ?
Matan

2
@Matan, tôi không thể hiểu ý kiến ​​của bạn được. Tôi đã giải thích rằng IO không được thực hiện 512 byte cùng một lúc, vì vậy thực tế là đĩa được xử lý trong các cung 512 byte không thành vấn đề. Lần duy nhất ổ đĩa phải thực hiện bất kỳ mô phỏng nào là nếu bạn cố thực hiện ghi không được căn chỉnh 4k và vì IO thường được thực hiện theo bội số 4k và các công cụ phân vùng hiện đại đảm bảo phân vùng bắt đầu trên ranh giới 4k, Điều đó sẽ không xảy ra.
psusi

1
"Câu trả lời" này hoàn toàn sai, cả trong tuyên bố và kết luận của nó. Kích thước logic được đặt khi âm lượng được định dạng. Sự không phù hợp giữa kích thước logic và vật lý có chi phí nhất định trong các công nghệ như lưu trữ dựa trên flash.
Chris Stratton

@ChrisStratton, không, bạn đang nghĩ về kích thước khối / cụm hệ thống tập tin. Kích thước khu vực logic là kích thước của một khu vực mà ổ đĩa báo cáo cho HĐH và nó chỉ có thể đọc và ghi các đơn vị có kích thước đó hoặc bội số của kích thước đó và các khu vực được đánh số theo đơn vị kích thước đó. So sánh với kích thước khu vực vật lý, trong đó một số ổ đĩa thực sự đọc và ghi các lĩnh vực 4k bên trong, nhưng giả vờ rằng họ đang sử dụng các lĩnh vực 512 byte để tương thích ngược với các hệ điều hành cũ không thể xử lý các lĩnh vực logic 4k.
psusi

Sai. Vấn đề tồn tại bất cứ khi nào bạn có phần mềm cố gắng hoạt động trên các đơn vị nhỏ hơn kích thước vật lý của hệ thống lưu trữ. Điều này đặc biệt đúng với các đơn vị logic nhỏ hơn kích thước khối xóa flash - phần mềm cuối cùng phải nhân đôi các phần chưa được xử lý thành một khối vật lý mới và chi phí xóa tuổi thọ, bất kể nó được thực hiện bởi mã hệ thống tệp hệ điều hành hay mã nội bộ vào ổ đĩa.
Chris Stratton

1

Có, điều đó là có thể, tuy nhiên làm như vậy sẽ khiến ổ đĩa nhanh hơn nhiều so với bình thường. Đối với các tệp nhỏ hơn 512K, mỗi tệp sau đó sẽ chiếm 4096K (4 MB) đầy đủ và lấp đầy phần còn lại của ngành bằng 0 do không có khả năng cho hầu hết các hệ thống tệp (NTFS và tương tự) để cho phép các tệp chia sẻ các cung. Tùy chọn tốt nhất cho hệ thống tệp sẽ là cho phép các kích thước cung thay đổi, tuy nhiên, điều này làm tăng kích thước của MFT (bảng tệp chính) và tăng nguy cơ hỏng dữ liệu trong khi giảm khả năng khôi phục dữ liệu dễ dàng. Nói cách khác, các ranh giới sẽ không hoàn toàn được biết đến bởi phần mềm khôi phục. Vì vậy, trong khi kích thước khu vực logic 4096K là tuyệt vời cho các tệp lớn, đối với PC sử dụng hàng ngày thông thường, nó chỉ là một loạt 0. Bây giờ, với điều đó nói rằng, có tùy chọn lưu trữ dữ liệu trong chính MFT khi nói đến dữ liệu nhỏ hơn kích thước cung cấp logic. Tuy nhiên, điều này có nghĩa là MFT của bạn trở nên khổng lồ và dữ liệu sẽ được ghi hai lần (có hai bản sao MFT trên ổ cứng của bạn). Bạn cũng sẽ phải chỉ định kích thước tối đa của MFT có thể gây ra sự cố khi bạn đạt đến mức tối đa hoặc mức sử dụng ổ đĩa vượt quá mức miễn phí cho MFT sử dụng. Tất cả điều này dựa trên việc sử dụng hệ thống tệp NTFS. Về mặt sáng sủa hơn, NTFS cho phép bạn sử dụng nén riêng cho các tệp ở cấp độ khối cho bất kỳ kích thước khu vực logic nào từ 4MB trở xuống. Giới hạn này được áp dụng do cách thức nén NTFS hoạt động. Các khối 4MB được đọc và nén bất kể kích thước khu vực logic. Điều này, tất nhiên,

Vì vậy, điều này rõ ràng lên cho bạn một chút?


Tôi nghĩ rằng câu trả lời này sẽ tốt hơn nếu nó không sử dụng NTFS làm hệ thống tệp ví dụ, vì (trừ khi mọi thứ đã thay đổi trong vài năm qua), nó không được hỗ trợ tốt hoặc hoàn toàn dưới Unix và bạn bè
Fox

Chữ K là viết tắt của Kilo, tiền tố đơn vị số liệu có nghĩa là một nghìn. 4 MiB là 1024 lĩnh vực chứ không phải 1 như bạn đề xuất. 4096 byte là 4 KiB hoặc 0,00390625 MiB.
Aeyoun

Đây không phải là một câu trả lời. OP đang nói về kích thước khu vực của ổ cứng, không phải kích thước khối của hệ thống tập tin. Đó là lớp khác nhau.
炸鱼 薯条

-1
Sector:

1) Logical Sector: Called Native Sector.

Manufacture default setting. user cannot change.

Before 2010 year: 512b/sector

After 2010 year: 4k/sector.

Few manufacture provide HDD tool to change native sector.

2) Physical Sector: Called Cluster(or allocation unit - FAT windows) or Block(Linux/Unix)

User can change physical sector size 512b,1k,2k,4k,... by format or partition tool. Physical sector contains one or few more native sectors.

(example1: if you have HDD 512b/native sector: user can set 4K/Physical sector. this mean 1 cluster = 4 native sector)

(example2: if you have HDD 4K/native sector: user can set 4K/Physical sector. this mead 1 cluster = 1 native sector)

3) File system deal with Physical sector(or block or Cluster) only.

Bạn đã bỏ lỡ để viết ra nguồn trích dẫn này. Mặt khác, tôi nghĩ rằng đây là bản sao của nhận xét trước đây của bạn tại đây: superuser.com/a/1372494/141252
andras.tim
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.