Căn chỉnh đúng các phân vùng trên ổ cứng định dạng nâng cao bằng cách sử dụng Parted


15

Đầu tiên tôi tạo một phân vùng được căn chỉnh chính xác trong bảng GPT mới bằng cách chia phần bằng cách chỉ định tỷ lệ phần trăm cho bắt đầu và kết thúc phân vùng:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 0% 1%
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary

(parted) quit

Lưu ý rằng đĩa này đang sử dụng Định dạng nâng cao, nhưng báo cáo chính xác kích thước khu vực vật lý của 4096BParted. Chúng ta hãy xem xét lại, sử dụng các ngành làm đơn vị:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size   File system  Name     Flags
 1      2048s  4095s  2048s               primary

(parted) quit
  • Tại sao nó bắt đầu phân vùng tại 2048svà không phải 34slà khu vực đầu tiên có thể ?
  • 34skhông phải là một khu vực bắt đầu được căn chỉnh chính xác nếu kích thước khu vực vật lý là 4096Bvà kích thước khu vực logic (mà bạn chỉ định trong Parted) là 512B. Một khu vực bắt đầu được căn chỉnh đúng là một số chia cho 8(vì kích thước khu vực vật lý / kích thước khu vực logic = 8). Nhưng điều đó có nghĩa 40slà khu vực bắt đầu được căn chỉnh chính xác đầu tiên, nhưng nó không được sử dụng. Tại sao?

Nếu chúng ta cố gắng tạo một phân vùng 100MiBdung lượng được căn chỉnh chính xác bắt đầu từ 40strong bảng phân vùng GPT mới:

# parted -a optimal /dev/sdb
GNU Parted 2.3
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Y
(parted) mkpart primary 40s 204839s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) unit MiB
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 2861588MiB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End     Size    File system  Name     Flags
 1      0.02MiB  100MiB  100MiB  fat32        primary

(parted)
(parted) unit s
(parted) p
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End      Size     File system  Name     Flags
 1      40s    204839s  204800s  fat32        primary

(parted)
  • Chúng tôi vẫn nhận được Warning: The resulting partition is not properly aligned for best performance.cảnh báo, mặc dù 40svà 204840 ( 204839s+ 1) đều có thể chia hết cho 8. Tại sao?

Câu trả lời:


23

Chia tay chỉ là quá bảo thủ. Cách làm thông thường hiện nay là căn chỉnh các phân vùng trên ranh giới 1MiB (2048-sector) vì cách này hoạt động trên các đĩa Định dạng nâng cao, trên một số loại thiết lập RAID yêu cầu căn chỉnh và trên hầu hết các ổ SSD. Đối với đĩa Định dạng Nâng cao, miễn là căn chỉnh là bội số của 8, bạn vẫn ổn và 2048 là bội số của 8. Không gian đĩa bị mất là hình phạt - 0,0000336% tổng dung lượng đĩa của bạn, nếu tôi đã làm toán đúng và không gõ nhầm gì cả. Vì vậy, đừng lo lắng về nó; chỉ cần sử dụng căn chỉnh 1MiB.


Có không gian đĩa bị mất không quan trọng với tôi. Tôi chỉ muốn biết rằng tôi hiểu mọi thứ một cách chính xác. Hiện tại tôi đang kiểm tra mã nguồn của Parted, nhưng mất nhiều thời gian hơn tôi có thời gian. Vì vậy, tôi sẽ tiếp tục và sử dụng liên kết 1MiB. Cảm ơn đã giúp đỡ một lần nữa!
Đã xóa

1
Điều đáng nói là đây không chỉ đơn thuần là sự bảo thủ của chia tay mà là giới hạn của lớp khối Linux. Ổ đĩa ATA không cung cấp optimal_io_sizegợi ý. Do đó, không có cách nào để phân biệt giữa các thiết bị ATA "di sản" không cung cấp alignment_offsetalignment_offsetmặc định là 0 và các thiết bị có alignment_offset=0. fdisk / parted sử dụng căn chỉnh phân vùng 1MB cho các ổ đĩa như vậy.
roolebo

1
Và chính con số - căn chỉnh phân vùng 1MB dường như đến từ hành vi của Windows Vista , như được tham chiếu trong cam kết chia tay .
roolebo

1

Tôi có lẽ sẽ thêm rằng trên Linux người ta có thể gặp tình huống partedcó thể không bao giờ vượt qua kiểm tra căn chỉnh tối ưutối thiểu cùng một lúc.

Lý do cho điều này là parted(ít nhất là từ phiên bản 3.2) dựa vào libblkidđó, lần lượt báo cáo các giá trị từ /sys/block/<disk>/queue/minimum_io_size/sys/block/<disk>/queue/optimal_io_size(xem io-terms.txt ).

Vì vậy, trong khi đối với đĩa Định dạng Nâng cao, cái trước có thể là khoảng 4k, thì cái sau có thể có một số giá trị điên - ví dụ 65535 * 512 == 33553920.

Bây giờ nếu chúng ta xem mã nguồn - căn chỉnh "phù hợp" hoặc "hiệu suất tốt nhất" được xác định bởi công thức trong parted.c :: phân vùng_align_check () :

part->geom.start % pa->grain_size == pa->offset, 

trong đó grain_sizexuất phát từ kích thước khối I / O ở trên, geom.startlà phần bù phân vùng của chúng tôi và phần bù căn chỉnh pa->offsetlà khá thường xuyên bằng không.

Theo mặc định, parted sẽ giả sử 1 MiB là tối ưu và ~ 4k là tối thiểu (không hoàn toàn như vậy, đó là một chút kích thước khối), vì vậy các giá trị này sẽ tương quan; tuy nhiên, nếu libblkidquyết định khác, partedcó xu hướng tin tưởng nó và thay thế giá trị mặc định đó là 1 MiB bằng giá trị được tìm thấy /sys/block/<disk>/queue/optimal_io_size. (Đồng thời, /sys/block/<disk>/queue/minimum_io_sizerất có thể sẽ cung cấp cho bạn cùng 4096 B.)

Trong trường hợp đó, kiểm tra tối ưu chia tay sẽ không bao giờ vượt qua đồng thời với kiểm tra tối thiểu , điều có thể gây nhầm lẫn một chút.

Với ý nghĩ đó - nếu nghi ngờ, hãy xem queue/optimal_io_sizequeue/minimum_io_sizevà nếu cái trước không chia hết cho cái sau, hãy bỏ qua cảnh báo chia tay, và tự quyết định xem bạn muốn đi với một kiểm tra tối ưu hay tối thiểu .

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.