การจัดตำแหน่งอุปกรณ์จัดเก็บข้อมูล - คำนวณการจัดตำแหน่งของพาร์ติชันที่ตามมาของ 32MiB จัดตำแหน่งที่เหมาะสม


3

สรุป

ฉันพยายามที่จะเข้าใจวิธีการคำนวณการจัดตำแหน่งของพาร์ทิชันที่ตามมาของการจัดตำแหน่งที่ดีที่สุด32MiB( 65535ภาค) ค่อนข้างปกติ1MiB( 2048 sector)

พื้นหลัง

ฉันเพิ่งซื้อSAMSUNG SSD 850 EVO (M.2 1TB),

# cat /sys/block/sdx/queue/optimal_io_size
> 33553920
# cat /sys/block/sdx/queue/minimum_io_size
> 512
# cat /sys/block/sdx/alignment_offset
> 0
# cat /sys/block/sdx/queue/physical_block_size
> 512
# cat /sys/block/sdx/queue/logical_block_size
> 512
# cat /sys/block/sdx/queue/hw_sector_size
> 512

# fdisk -l
> Disk /dev/sdx: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
> Units: sectors of 1 * 512 = 512 bytes
> Sector size (logical/physical): 512 bytes / 512 bytes
> I/O size (minimum/optimal): 512 bytes / 33553920 bytes
> Disklabel type: gpt

การคำนวณภาคแรกนั้นไม่ยาก

อนุญาตให้ GNU แยกส่วนเพื่อคำนวณการจัดตำแหน่งโดยอัตโนมัติ

(parted) mkpart primary 0% 100%

ผลลัพธ์คือการจัดตำแหน่งที่เริ่มต้นที่เซกเตอร์65535( 32MiB)

คำนวณการจัดตำแหน่งด้วยตนเอง

(optimal_io_size + alignment_offset) / physical_block_size

การใช้ข้อมูลสำหรับSAMSUNG SSD 850 EVO (M.2 1TB)และการใช้สูตรผลลัพธ์

(33553920 + 0) / 512 = 65 535

ปัญหา

โดยปกติเมื่อสร้างพาร์ติชันฉันเพียงแค่เพิ่มoffset + lengthพาร์ติชั่นก่อนหน้าเป็นการเริ่มพาร์ติชั่นถัดไปตัวอย่างเช่น

(parted) mkpart primary 1MiB   2MiB
(parted) mkpart primary 2MiB   514MiB
(parted) mkpart primary 514MiB 1538MiB
...

พยายามทำสิ่งที่คล้ายกัน SAMSUNG SSD 850 EVO (M.2 1TB)

(parted) mkpart primary 65535s 67582s  # OK ~32MiB 33MiB
(parted) mkpart primary 67583s 100%
or
(parted) mkpart primary 33MiB 100%

ผลลัพธ์ในคำเตือนต่อไปนี้:

Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?

วิธีการรักษา

ไดรฟ์ค่อนข้างพิถีพิถันและความพยายามที่ดีที่สุดของฉันคือการคำนวณภาคที่แน่นอน โชคไม่ดีที่สิ่งนี้ส่งผลให้เกิดการคำนวณที่ซับซ้อนซึ่งฉันไม่สามารถอธิบายได้ว่าเหตุใดพาร์ติชันจึงถูกจัดตำแหน่งอย่างเหมาะสม ( align-check optimal <partition number>)

(parted) unit s
(parted) print free
Number  Start        End          Size         File system  Name  Flags
        34s          65534s       65501s       Free Space
 1      65535s       67582s       2048s
        67583s       131069s      63487s       Free Space
 2      131070s      1179645s     1048576s
        1179646s     1245164s     65519s       Free Space
 3      1245165s     9633772s     8388608s
        9633773s     9699179s     65407s       Free Space
 4      9699180s     1953467279s  1943768100s
        1953467280s  1953525134s  57855s       Free Space

เท่าที่ฉันสามารถบอกได้ว่าแต่ละภาคส่วนจะต้องเริ่มต้นใน65535ช่วงเวลาหนึ่งซึ่งสอดคล้องกับ ~ 32MiB (หรือ65535+1 = 32MiB) ฉันคิดว่าไบต์ชดเชยและไม่ได้0 1ป.ร. ให้1MiB = 2048sไว้

ขนาดพาร์ทิชันแรกคือการเป็นจึงหยุดคือ1MiB65535 + 2048 - 1 = 67582

(parted) mkpart primary 65535s 67582s

ถ้าพาร์ติชันที่ผ่านมาต่ำกว่าพาร์ทิชันต่อไปเพียงแค่เริ่มต้นที่32MiB previous partition offset + 32MiBสำหรับพาร์ติชัน2ในตัวอย่างที่แยกส่วนด้านบนจะเริ่มต้นที่~64MiB( 65535s * 2 = 131070s) ขนาดที่จะเป็น512MiB( 512 * 2048 = 1048576) 131070 + 1048576 - 1 = 1179645ดังนั้นหยุดคือ

(parted) mkpart primary 131070s 1179645s

จนถึงตอนนี้ดี แต่สิ่งที่จะเริ่มต้นที่ดีที่สุดสำหรับพาร์ทิชัน3? ออฟเซ็ตใดเป็นช่วงเวลา 32MiB แรกที่มีอยู่

1179645 / 65535 ~= 18,000223

ขณะนี้ใช้ช่วงเวลา 18 และหกในวันที่ 19; พาร์ติชันถัดไปควรเริ่มต้นในช่วงเวลาที่ 19 หรือไม่

19 * 65535 = 1245165

ขนาดที่จะเป็น4096MiB( 4096 * 2048 = 8388608) 1245165 + 8388608 - 1 = 9633772ดังนั้นหยุดคือ

(parted) mkpart primary 1245165s 9633772

สำหรับพาร์ติชั่นถัดไป

9633772 / 65535 ~= 147,0019
148 * 65535 = 9699180

และอื่น ๆ และอื่น ๆ.

ฉันไม่เคยพบการสนทนาใด ๆ เกี่ยวกับเรื่องนี้มาก่อนและรู้สึกเหมือนกำลังแบ่งพาร์ติชันมากเกินไป


มีบางอย่างผิดปกติฉันไม่สามารถเชื่อได้ว่าขนาดที่เหมาะสมไม่ใช่พลังของ 2 (65535) ในขณะที่ 65536 เป็นพลังของ 2 ฉันเกือบจะแน่ใจว่านี่เป็นข้อผิดพลาดบางแห่ง ผมเห็นคุณกำลังใช้ GPT แต่ fdisk ดูเหมือนว่าจะมีปัญหากับพาร์ทิชัน DOS อย่างน้อย ( unix.stackexchange.com/a/303358/130000 )
PIM

ติดตามคำใบ้ [@pim] ของคุณฉันยังพบsuperuser.com/questions/352572/ซึ่งอ้างถึงgen ในการจัดแนวดิสก์พาร์ติชัน ซึ่งแนะนำ gdisk ร็อดสมิ ธ ใช้gdisk verify diskผลลัพธ์ในCaution: Partition [1-4] doesn't begin on a 8-sector boundary. This may result in degraded performance on some modern (2009 and later) hard disks.
user212827

คำตอบ:


2

การใช้GPT fdisk Tutorial gdiskจะคำนวณการจัดตำแหน่งของพาร์ติชันที่ตามมาโดยอัตโนมัติเมื่อนำหน้าด้วย+ตัวอย่างเช่น

Last sector (8390656-15634398, default = 15634398) or {+-}size{KMGTP}: +2G

สร้าง 2GiB (gibibyte) จากภาคที่ให้ไว้ล่าสุด

2048sพาร์ทิชันที่มีความสอดคล้อง GNU parted ยืนยันว่าพาร์ติชั่นนั้นเป็นalign-check minimalแต่ไม่ได้align-check optimal.

ผลตอบแทนblockdev --getalignoff /dev/sdx0


2

ขนาด I / O นี้ที่ดีที่สุดคือการทำผิดข้อผิดพลาดที่มีการอ้างอิงหลายครั้งเช่น ในอูบุนตู , บน RedHat Th ข้อมูลเพิ่มเติมอาจจะหน้าบล็อกนี้

ในกรณีใด ๆ นี้ 65535 เป็นเพียงค่าสูงสุดในสองไบต์ก็ไม่ได้จัดในภาค 4 หรือ 8 X 512bytes เคอร์เนลแยกส่วน lvm กำลังติดตามอย่างผิด ๆ อย่าพยายามปฏิบัติตาม


1

บางคนบอกว่ามันเป็นสิ่งสำคัญในการจัดแนว SSD ตามแนว ERASE BLOCK และ NAND PAGE SIZES

evo 840 เห็นได้ชัดว่ามีการลบบล็อกและพารามิเตอร์ nand ที่ผิดปกติ: 1536kb และ 8k ฉันไม่แน่ใจใน 850 (samsung ไม่เต็มใจที่จะปล่อยข้อมูลนี้ (ความลับทางการค้า)) ...

ฉันได้มากับค่าการจัดตำแหน่งสากลที่ครอบคลุมทั้งหมดของ ssd ที่รู้จักและการลบบล็อกและขนาดหน้า nand ฉันขอแนะนำให้ใช้ออฟเซ็ตของ 6291456 ไบต์ (ภาค 12288 (6144kb = 6mb) หรือหลาย ๆ (12mb, 18mb, 24mb ฯลฯ ) ออฟเซ็ตนี้ควรทำงานกับ ssd (หรือ hdd ที่รู้จักสำหรับเรื่องนั้น) ขึ้นอยู่กับ NAND หน้าขนาดที่คุณกำลังติดต่อกับฉันขอแนะนำให้จับคู่ขนาดหน่วยของคุณกับขนาดหน้า NAND เมื่อเป็นไปได้ในระหว่างรูปแบบเพื่อหลีกเลี่ยงปัญหา READ MODIFY WRITE อย่างไรก็ตาม 4k ควรเป็นค่าที่ยอมรับได้สำหรับ SSD เกือบทุกตัวหากจำเป็น มีการจัดสรรเกินภายในฉันยังคงปล่อยให้ 10% ของดิสก์ที่ไม่ฟอร์แมตเพื่อช่วยหลีกเลี่ยงปัญหาการขยายสัญญาณ WRITE (ฉันปล่อยให้ 17% OP) ฉันยังแนะนำเมื่อคุณได้กำหนดพารามิเตอร์ของคุณแน่นอนไม่ใช้ "รูปแบบด่วน " ตัวเลือกทำรูปแบบปกติใช้เวลาไม่นานสำหรับ SSD แจ้งให้เราทราบว่าสิ่งนี้จะช่วยคุณได้หรือไม่และอย่าลังเลที่จะเพิ่มแนวคิดใด ๆ ที่คุณอาจมี ....

ป.ล. ฉันพบว่าใช้งานได้ดีและชอบ gdisk ใน gdisk คุณสามารถตั้งค่า "ตั้งค่าการจัดตำแหน่งเซกเตอร์" โดยใช้ "l" ภายใต้เมนู xpert เมื่อคุณทำทุกพาร์ติชันที่สร้างขึ้นจะถูกคำนวณโดยอัตโนมัติเพื่อเริ่มต้นที่หลาย ๆ ค่าที่ใกล้ที่สุดทำให้พาร์ทิชันทั้งหมดได้รับการจัดตำแหน่งอย่างเหมาะสมโดยที่ค่าที่กำหนดนั้นถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.