Tạo phân vùng căn chỉnh bằng cách sử dụng parted


68

Tôi đang phân vùng ổ cứng không phải ổ SSD bị chia tay vì tôi muốn có bảng phân vùng GPT.

parted /dev/sda mklabel gpt

Bây giờ, tôi đang cố gắng tạo các phân vùng được căn chỉnh chính xác vì vậy tôi sử dụng lệnh sau để biết khu vực đầu tiên bắt đầu:

parted /dev/sda unit s p free

Disk /dev/sda: 488397168s
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End         Size        File system  Name      Flags
        34s    488397134s  488397101s  Free Space

Chúng ta có thể thấy rằng nó bắt đầu trong khu vực 34 (đó là mặc định khi bảng phân vùng này được sử dụng).

Vì vậy, để tạo phân vùng đầu tiên tôi đã thử:

parted /dev/sda mkpart primary 63s 127s

để căn chỉnh nó trên sector 64 vì nó là bội số của 8 nhưng nó cho thấy:

Cảnh báo: Phân vùng kết quả không được căn chỉnh chính xác để có hiệu suất tốt nhất.

Các kích thước khu vực logic và vật lý trong đĩa cứng của tôi đều là 512 byte:

cat /sys/block/sda/queue/physical_block_size
512

cat /sys/block/sda/queue/logical_block_size 
512

Làm cách nào để tạo phân vùng được căn chỉnh chính xác? Tôi đang làm gì sai?


Bạn có chắc chắn số ngành bắt đầu từ 0?
Burton Samograd

1
Tôi cũng đã thử parted /dev/sda mkpart primary 64s 128s(trong trường hợp nó bắt đầu bằng 1) nhưng nó cũng trả lại cảnh báo tương tự.
Marc

Dường như có một lệnh để kiểm tra xem một giá trị có được căn chỉnh hay không: gnu.org/software/parted/manual/html_node/align_002dcheck.html . Có thể thử điều đó với các giá trị khác nhau bằng cách sử dụng vòng lặp for và nhổ các giá trị đó là ok?
Burton Samograd

Burton, tôi không biết về lệnh đó nhưng nó không thể được sử dụng cho đến khi có phân vùng.
Marc

Xin lỗi về điều đó, tôi đã không đọc mô tả cẩn thận đủ.
Burton Samograd

Câu trả lời:


68

Để căn chỉnh phân vùng với partedbạn có thể sử dụng --aligntùy chọn. Các loại căn chỉnh hợp lệ là:

  • không có - Sử dụng căn chỉnh tối thiểu được cho phép bởi loại đĩa.
  • xi lanh - Căn chỉnh các phân vùng để xi lanh.
  • tối thiểu - Sử dụng căn chỉnh tối thiểu như được cung cấp bởi thông tin cấu trúc liên kết đĩa. Giá trị này và giá trị opt sẽ sử dụng thông tin bố trí được cung cấp bởi đĩa để căn chỉnh các địa chỉ bảng phân vùng logic với các khối vật lý thực tế trên các đĩa. Giá trị tối thiểu là căn chỉnh tối thiểu cần thiết để căn chỉnh phân vùng đúng với các khối vật lý, giúp tránh sự suy giảm hiệu suất.
  • tối ưu Sử dụng căn chỉnh tối ưu như được cung cấp bởi thông tin cấu trúc liên kết đĩa. Điều này phù hợp với nhiều kích thước khối vật lý theo cách đảm bảo hiệu suất tối ưu.

Mẹo hữu ích khác là bạn có thể đặt kích thước với tỷ lệ phần trăm để căn chỉnh nó. Bắt đầu ở mức 0% và kết thúc ở mức 100%. Ví dụ:

parted -a optimal /dev/sda mkpart primary 0% 4096MB


5
Có nên kết thúc lệnh không 0% 100%? Nơi nào 4096MBđến từ đâu?
njahnke

4
Giá trị 4096MB được sử dụng ở đây chỉ là một ví dụ cho thấy khả năng trộn% và số kích thước cụ thể
Lik

3
Chỉ cần một lưu ý, tôi đã phải kèm theo '0%'dấu ngoặc kép cho shell của mình để thực thi lệnh đúng cách.
Adam Eberlin

@lik bạn có đề xuất cho bài đăng này unix.stackexchange.com/questions/236139/iêu
AnkurTank

1
Không bao giờ nói ở trên, tôi chỉ nhận thấy phần chia printsử dụng kB là 1000 byte ...
jiggunjer

9

Giải pháp của tôi là sử dụng gdisk , có thể tự động căn chỉnh phân vùng trên 2048 sector (1024KiB) theo mặc định, mặc dù nó có thể được thay đổi trong menu chuyên gia.


7

Từ Wiki Wiki :

Khi tạo phân vùng, chia tay có thể cảnh báo về căn chỉnh phân vùng không đúng nhưng không gợi ý về căn chỉnh phù hợp. Ví dụ:

(parted) mkpart primary fat16 0 32M
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?                                                     

Cảnh báo có nghĩa là phân vùng startkhông được căn chỉnh.

Nhập Ignoređể đi trước nào , in bảng phân vùng trong các lĩnh vực để xem nơi nó bắt đầu, và gỡ bỏ / tái tạo phân vùng với khu vực bắt đầu làm tròn lên đến tăng quyền hạn của 2 cho đến khi dừng cảnh báo. Lấy một ví dụ, trên một ổ đĩa flash có các cung 512B, các phân vùng muốn phân chia bắt đầu trên các cung là bội số của năm 2048, là căn chỉnh 1MB.

Ngoài ra, ngay phía trên phần này, họ tuyên bố rằng các đơn vị nhị phân IEC chính xác hơn của KiB, MiB, GiB, v.v., được chấp nhận cho các đơn vị cũng như KB, MB, GB, v.v.

Cá nhân, lệnh chính xác của tôi đã giải quyết điều này là:

mkpart hd ext4 1024KiB 8470MB

Nó không phàn nàn, tôi đoán nó muốn sắp xếp 1MB.


Không, tôi đã thử 1048576KiB, không có xúc xắc.
Behrooz

5

Một sửa chữa nhỏ. Theo tôi hiểu, các đĩa GPT không còn các loại phân vùng nữa, chúng đều là "chính". Lệnh 'mkpart sơ cấp' không tạo phân vùng chính như trên các đĩa msdos, nó chỉ tạo một phân vùng gọi là chính. Bạn cũng có thể sử dụng lệnh

(parted) mkpart Parted-FUN! 21476MB 4000787MB
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start    End        Size       File system  Name         Flags
 1      1.05MB   17181MB    17180MB    ext4         raid-var
 2      17181MB  21476MB    4295MB                  raid-swap
 3      21476MB  4000786MB  3979310MB               Parted-FUN!

Điều này có thể gây nhầm lẫn nếu bạn thử tạo phân vùng hợp lý, tôi biết nó đã làm cho tôi.

(parted) mkpart extended 21476MB 4000787MB
(parted) mkpart logical 21476MB 1000787MB
Warning: You requested a partition from 21476MB to 1000787MB.
The closest location we can manage is 4000786MB to 4000786MB.
Is this still acceptable to you?
Yes/No? Yes
(parted) print
Model: ATA ST4000DM000-1F21 (scsi)
Disk /dev/sdf: 4000787MB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start      End        Size       File system  Name       Flags
 1      1.05MB     17181MB    17180MB    ext4         raid-var
 2      17181MB    21476MB    4295MB                  raid-swap
 3      21476MB    4000786MB  3979310MB               extended
 4      4000786MB  4000786MB  0.00MB                  logical

Bạn không thể tạo một phân vùng gọi là "logic" bên trong một phân vùng gọi là "mở rộng".


cảm ơn bạn, tôi đã lãng phí khá nhiều thời gian nhờ vào công cụ này, và bạn đã cho tôi biết chuyện gì đang xảy ra.
Florian Heigl

5

Các câu trả lời được chấp nhận bởi @lik cho thấy làm thế nào bạn có thể xác định sự liên kết ưa thích. Tuy nhiên, parted luôn sử dụng căn chỉnh đó để kiểm tra phân vùng kết quả, nhưng không phải lúc nào cũng tạo phân vùng với căn chỉnh đó.

TL; DR: Khi 1MiB là căn chỉnh tối ưu, chỉ định 0% sẽ hoạt động cho các đĩa 200MiB trở lên. Đối với các đĩa nhỏ hơn hoặc căn chỉnh lớn hơn, chỉ định 0G có thể hoạt động trong đó 0% không. Xem bên dưới về lý do tại sao.

Parted không cố gắng thỏa mãn các ràng buộc căn chỉnh khi tạo phân vùng, nhưng nó cũng sẽ không sai lệch quá nhiều so với các giá trị được yêu cầu của bạn. Những gì được tính là "quá nhiều" phụ thuộc vào cách bạn chỉ định các tư thế.

Khi bạn chỉ định vị trí bắt đầu (hoặc kết thúc) cho lệnh mkpart, nó sẽ tạo ra một phạm vi các giá trị chấp nhận được. Phạm vi này tập trung vào giá trị bạn chỉ định và mở rộng bằng nhau ở cả hai bên bằng một nửa kích thước đơn vị bạn đã sử dụng (đó là những gì tôi đọc được từ mã , các nhận xét cho biết một kích thước đơn vị đầy đủ ở cả hai đầu).

Ví dụ: khi bạn chỉ định "10M", nó sẽ cố gắng sử dụng bất kỳ vị trí nào trong khoảng từ 9,5M đến 10,5M. Điều tương tự cũng xảy ra với tỷ lệ phần trăm, vì vậy nếu bạn chỉ định 0%, nó sẽ sử dụng bất kỳ giá trị nào trong khoảng từ 0% đến 0,5% (rõ ràng nó không bị âm).

Một ngoại lệ là khi sử dụng sức mạnh của hai đơn vị (như KiB cho 1024, trái ngược với K cho 1000), giả định rằng bạn đang cố gắng chỉ định một vị trí chính xác và chỉ xem xét giá trị chính xác mà bạn đã chỉ định.

Vì căn chỉnh tối ưu thường có vẻ là căn chỉnh 1MiB, nên các đơn vị K và M thường sẽ không có đủ chỗ để đạt được căn chỉnh tối ưu. Chỉ định các vị trí trong G nên có nhiều chỗ, nhưng% thường cũng ổn.

Vì vậy, đây là lý do tại sao 0% thường hoạt động, mặc dù điều đó có giới hạn.


Bạn có thể tóm tắt một TLDR thực tế cho câu trả lời của bạn: chính xác những gì nên được thực hiện tốt hơn theo một cách khác so với câu trả lời được chấp nhận?
yurkennis

Đề nghị tốt, tôi đã thêm một TL; DR. Trong thực tế, tôi nghĩ rằng 0% sẽ hoạt động cho tất cả các đĩa thực sự nhỏ, nhưng câu trả lời của tôi thêm một chút nền tảng về cách hoạt động chính xác.
Matthijs Kooijman
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.