การจัดตำแหน่งพาร์ติชั่นที่เหมาะสมบน HDD ฟอร์แมตขั้นสูงโดยใช้ Parted


15

ก่อนอื่นฉันสร้างพาร์ติชันที่จัดตำแหน่งอย่างเหมาะสมในตาราง GPT ใหม่โดยใช้พาร์ทิชันโดยระบุเปอร์เซ็นต์สำหรับการเริ่มต้นและสิ้นสุดของพาร์ติชัน:

# 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

โปรดทราบว่าดิสก์นี้จะใช้รูปแบบขั้นสูง แต่อย่างถูกต้องรายงานขนาดเซกเตอร์ทางกายภาพของ4096Bการแยก ลองดูอีกครั้งโดยใช้ส่วนต่างๆเป็นหน่วย:

# 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
  • มันเริ่มต้นพาร์ทิชันที่ทำไม2048sและไม่ได้34sซึ่งเป็นภาคที่เป็นไปได้ครั้งแรก ?
  • 34sไม่ได้เป็นภาคเริ่มต้นอย่างถูกต้องสอดคล้องถ้าเซกเตอร์ขนาดทางกายภาพ4096Bและตรรกะ (ซึ่งเป็นหนึ่งที่คุณระบุในแยก) 512Bขนาดภาค เซกเตอร์เริ่มต้นที่จัดตำแหน่งอย่างถูกต้องคือการหารด้วย8(เนื่องจากขนาดเซกเตอร์กายภาพ / ขนาดเซกเตอร์ตรรกะ = 8) แต่นั่นหมายความว่า40sเป็นภาคเริ่มแรกที่มีการจัดตำแหน่งอย่างถูกต้อง แต่ก็ไม่ได้ใช้ ทำไม?

หากเราพยายามสร้างพาร์ติชันที่สอดคล้องกันอย่างเหมาะสมของ100MiBความจุเริ่มต้นที่40sในตารางพาร์ติชัน GPT ใหม่:

# 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)
  • เรายังคงได้รับWarning: The resulting partition is not properly aligned for best performance.การแจ้งเตือนแม้ว่า40sและ 204840s ( 204839s+ 1) เป็น divisable 8ทั้งสองข้าง ทำไม?

คำตอบ:


23

แยกเป็นเพียงอนุรักษ์นิยมสุดเหวี่ยง การปฏิบัติตามปกติในทุกวันนี้คือการจัดแนวพาร์ติชันบนขอบเขต 1MiB (2048- เซกเตอร์) เนื่องจากการทำงานบนดิสก์ฟอร์แมตขั้นสูงในการตั้งค่า RAID บางประเภทที่ต้องมีการจัดตำแหน่งและ SSD ส่วนใหญ่ สำหรับดิสก์ฟอร์แมตรูปแบบขั้นสูงตราบใดที่การจัดตำแหน่งเป็นหลาย ๆ 8 คุณก็โอเคและ 2048 ก็คือหลายเท่าของ 8 พื้นที่ดิสก์ที่หายไปนั้นอ่อนแอ - 0.0000336% ของพื้นที่ดิสก์ทั้งหมดของคุณถ้าฉันทำ คณิตศาสตร์ถูกต้องและไม่พิมพ์ผิดอะไรเลย ดังนั้นไม่ต้องกังวลกับมัน เพียงแค่ใช้การจัดตำแหน่ง 1MiB


ใช่พื้นที่ดิสก์ที่สูญหายนั้นไม่สำคัญสำหรับฉัน ฉันแค่อยากรู้ว่าฉันเข้าใจสิ่งต่าง ๆ อย่างถูกต้อง ฉันกำลังตรวจสอบซอร์สโค้ดของ Parted ในขณะนี้ แต่ใช้เวลานานกว่านั้นเล็กน้อย ดังนั้นฉันจะไปข้างหน้าและใช้การจัดตำแหน่ง 1MiB ขอบคุณที่ช่วยเหลืออีกครั้ง!
ลบ

1
มันมีค่ามากที่จะกล่าวถึงสิ่งนี้ไม่เพียง แต่เป็นการอนุรักษ์ของการแยกส่วน แต่เป็นข้อ จำกัด ของเลเยอร์บล็อกลินุกซ์ ไดรฟ์ ATA ไม่ได้ให้optimal_io_sizeคำแนะนำ ดังนั้นมีวิธีที่จะแยกแยะความแตกต่างระหว่าง "มรดก" อุปกรณ์ ATA ที่ไม่ได้ให้ไม่มีalignment_offsetและalignment_offsetเริ่มต้นที่ 0 alignment_offset=0และคนที่ที่มี fdisk / แยกส่วนใช้การจัดแนวพาร์ติชัน 1MBสำหรับไดรฟ์ดังกล่าว
roolebo

1
และจำนวนตัวเอง - การจัดแนวพาร์ติชัน 1MB ดูเหมือนว่ามาจากการทำงานของWindows Vistaตามที่อ้างถึงในการคอมมิทแบบแยกส่วน
roolebo

1

ฉันอาจจะเพิ่มว่าบน Linux หนึ่งสามารถมาในสถานการณ์ที่partedไม่เคยผ่านการตรวจสอบที่ดีที่สุดและการจัดตำแหน่งที่น้อยที่สุดในเวลาเดียวกัน

เหตุผลนี้คือที่parted(อย่างน้อยเป็นรุ่น 3.2) อาศัยlibblkidซึ่งจะรายงานค่าจาก/sys/block/<disk>/queue/minimum_io_sizeและ/sys/block/<disk>/queue/optimal_io_size(ดูio-limit.txt )

ดังนั้นในขณะที่สำหรับดิสก์รูปแบบขั้นสูงในอดีตมีแนวโน้มที่จะเป็นสิ่งที่ชอบ 4k หลังสามารถมีค่าบางบ้า - 65535 * 512 == 33553920เช่น

ตอนนี้ถ้าเราดูซอร์สโค้ด - "เหมาะสม" หรือการจัดตำแหน่ง "ประสิทธิภาพที่ดีที่สุด" ถูกกำหนดโดยสูตรในparted.c :: partition_align_check () :

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

ที่grain_sizeมาจากขนาดบล็อก I / O ด้านบนgeom.startคือพาร์ติชันออฟเซ็ตของเราและออฟเซ็ตการจัดตำแหน่งpa->offsetค่อนข้างบ่อยศูนย์

โดยค่าเริ่มต้นการแยกส่วนจะถือว่า 1 MiB เป็นแบบที่ดีที่สุดและ ~ 4k จะเป็นขนาดที่เล็กที่สุด (ไม่มากนักมันค่อนข้างจะเป็นการทำให้เข้าใจง่าย) ขนาดบล็อกดังนั้นค่าเหล่านี้จะสัมพันธ์กัน แต่ถ้าlibblkidตัดสินใจเป็นอย่างอื่นpartedมีแนวโน้มที่จะไว้วางใจได้และแทนที่ว่าค่าเริ่มต้นของ 1 /sys/block/<disk>/queue/optimal_io_sizeเอ็มไอที่มีค่าที่พบใน (ในเวลาเดียวกัน/sys/block/<disk>/queue/minimum_io_sizeก็น่าจะให้ 4096 B เหมือนกัน)

ในกรณีนั้นการตรวจสอบที่ดีที่สุดแบบแยกส่วนจะไม่ผ่านพร้อมกันกับการตรวจสอบขั้นต่ำสิ่งที่อาจทำให้สับสนเล็กน้อย

โดยที่ในใจ - หากมีข้อสงสัยให้ดูqueue/optimal_io_sizeและqueue/minimum_io_sizeและหากอดีตไม่สามารถหารได้โดยหลังเพียงแค่ละเว้นคำเตือน 'แยกส่วนและตัดสินใจด้วยตัวเองว่าคุณต้องการที่จะไปกับการตรวจสอบที่ดีที่สุดหรือน้อยที่สุด .

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