สร้างพาร์ติชันที่จัดตำแหน่งโดยใช้การแยกส่วน


67

ฉันกำลังแบ่งพาร์ติชันฮาร์ดดิสก์ที่ไม่ใช่ SSD ด้วยการแยกส่วนเนื่องจากฉันต้องการตารางพาร์ติชัน GPT

parted /dev/sda mklabel gpt

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

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

เราจะเห็นว่ามันเริ่มต้นในเซกเตอร์ 34 (นั่นเป็นค่าเริ่มต้นเมื่อใช้พาร์ติชั่นตารางนี้)

ดังนั้นเพื่อสร้างพาร์ติชันแรกที่ฉันพยายาม:

parted /dev/sda mkpart primary 63s 127s

ในการจัดแนวบนเซกเตอร์ 64 เนื่องจากมันเป็นผลคูณของ 8 แต่มันแสดง:

คำเตือน: พาร์ติชันที่ได้นั้นไม่ได้รับการจัดตำแหน่งอย่างเหมาะสมเพื่อประสิทธิภาพที่ดีที่สุด

ขนาดเซกเตอร์ตรรกะและฟิสิคัลในฮาร์ดดิสก์ของฉันมีทั้ง 512 ไบต์:

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

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

ฉันจะสร้างพาร์ทิชันที่จัดแนวอย่างถูกต้องได้อย่างไร ผมทำอะไรผิดหรือเปล่า?


คุณแน่ใจหรือว่าตัวเลขภาคเริ่มต้นที่ศูนย์
Burton Samograd

1
ฉันพยายามด้วยparted /dev/sda mkpart primary 64s 128s(ในกรณีที่มันเริ่มใน 1) แต่มันกลับคำเตือนเดียวกัน
Marc

ดูเหมือนว่ามีคำสั่งให้ตรวจสอบว่ามีการจัดเรียงค่า: gnu.org/software/parted/manual/html_node/align_002dcheck.htmlหรือไม่ อาจลองด้วยค่าต่าง ๆ ที่ใช้สำหรับลูปและคายค่าที่ใช้ได้หรือไม่
Burton Samograd

เบอร์ตันฉันไม่รู้เกี่ยวกับคำสั่งนั้น แต่มันไม่สามารถใช้งานได้จนกว่าจะมีพาร์ติชัน
Marc

ขออภัยเกี่ยวกับเรื่องนั้นฉันไม่ได้อ่านคำอธิบายอย่างละเอียดพอ
Burton Samograd

คำตอบ:


68

เพื่อจัดแนวพาร์ติชันกับpartedคุณสามารถใช้--alignตัวเลือก ประเภทการจัดตำแหน่งที่ถูกต้องคือ:

  • none - ใช้การจัดตำแหน่งขั้นต่ำที่อนุญาตโดยประเภทดิสก์
  • cylinder - จัดพาร์ติชั่นให้กับกระบอกสูบ
  • น้อยที่สุด - ใช้การจัดตำแหน่งขั้นต่ำตามที่กำหนดโดยข้อมูลทอพอโลยีดิสก์ สิ่งนี้และค่า opt จะใช้ข้อมูลโครงร่างที่จัดเตรียมโดยดิสก์เพื่อจัดตำแหน่งที่อยู่ตารางของโลจิคัลพาร์ติชันให้ตรงกับฟิสิคัลบล็อกจริงบนดิสก์ ค่า min คือการจัดตำแหน่งขั้นต่ำที่จำเป็นในการจัดแนวพาร์ติชันให้เหมาะสมกับบล็อกแบบฟิสิคัลซึ่งจะช่วยลดประสิทธิภาพในการทำงาน
  • ที่ดีที่สุดใช้การจัดตำแหน่งที่เหมาะสมตามที่กำหนดโดยข้อมูลทอพอโลยีดิสก์ สิ่งนี้จัดแนวกับขนาดบล็อกฟิสิคัลหลายขนาดในลักษณะที่รับประกันประสิทธิภาพที่ดีที่สุด

เคล็ดลับที่มีประโยชน์อื่น ๆ คือคุณสามารถกำหนดขนาดด้วยเปอร์เซ็นต์เพื่อให้ได้แนว เริ่มต้นที่ 0% และสิ้นสุดที่ 100% ตัวอย่างเช่น:

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


5
คำสั่งควรไม่จบ0% 100%? ในกรณีที่ไม่4096MBมาจากไหน?
njahnke

4
ค่า 4096MB ใช้ที่นี่เป็นเพียงตัวอย่างเพื่อแสดงความสามารถในการผสม% และตัวเลขขนาดเฉพาะ
lik

3
แค่ทราบว่าฉันต้องใส่'0%'เครื่องหมายอัญประกาศเพื่อให้เชลล์ดำเนินการคำสั่งอย่างถูกต้อง
อดัม Eberlin

@lik คุณมีข้อเสนอแนะสำหรับโพสต์นี้unix.stackexchange.com/questions/248939/ หรือไม่
AnkurTank

1
ไม่เป็นไรข้างต้นผมเพิ่งสังเกตเห็นแยกprintใช้ kB 1000 ไบต์ ...
jiggunjer

9

วิธีแก้ไขปัญหาของฉันคือการใช้gdiskซึ่งสามารถทำการจัดแนวพาร์ติชันโดยอัตโนมัติใน 2048 ส่วน (1024KiB) โดยค่าเริ่มต้นแม้ว่าจะสามารถเปลี่ยนแปลงได้ในเมนูผู้เชี่ยวชาญ


7

จากArch Wiki :

เมื่อสร้างพาร์ติชันบางส่วนอาจเตือนเกี่ยวกับการจัดแนวพาร์ติชันที่ไม่เหมาะสม แต่ไม่ได้บอกใบ้ถึงการจัดตำแหน่งที่เหมาะสม ตัวอย่างเช่น:

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

คำเตือนหมายถึงพาร์ติชั่นstartไม่ได้อยู่ในแนวเดียวกัน

ป้อนIgnoreเพื่อไปข้างหน้าต่อไปพิมพ์ตารางพาร์ติชันในส่วนต่างๆเพื่อดูว่าจะเริ่มต้นที่ใดและลบ / สร้างพาร์ติชันขึ้นใหม่โดยที่ภาคเริ่มต้นถูกปัดเศษขึ้นเพื่อเพิ่มพลังเป็น 2 จนกว่าคำเตือนจะหยุด ดังตัวอย่างหนึ่งบนแฟลชไดรฟ์ที่มีเซกเตอร์ 512B Parted ต้องการให้พาร์ติชันเริ่มต้นบนเซกเตอร์ที่มีหลาย ๆ ค่าในปี 2048 ซึ่งเป็นการจัดเรียง 1MB

นอกจากนี้เหนือส่วนนี้พวกเขาระบุว่าหน่วยไบนารี IEC ที่แม่นยำยิ่งขึ้นของ KiB, MiB, GiB ฯลฯ เป็นที่ยอมรับสำหรับหน่วยรวมทั้ง KB, MB, GB ที่แม่นยำน้อยกว่า

โดยส่วนตัวแล้วคำสั่งที่แน่นอนของฉันที่แก้ไขปัญหานี้คือ:

mkpart hd ext4 1024KiB 8470MB

ไม่ได้บ่นเลยฉันคิดว่ามันต้องการการจัดแนว 1MB


ไม่ฉันลอง 1048576KiB ไม่มีลูกเต๋า
Behrooz

5

การแก้ไขเล็กน้อย ตามที่ฉันเข้าใจแล้วดิสก์ GPT ไม่มีประเภทพาร์ติชั่นอีกต่อไปมันเป็น "หลัก" ทั้งหมด คำสั่ง 'mkpart primary' ไม่ได้สร้างพาร์ติชั่นหลักเหมือนกับที่ทำบนดิสก์ msdos มันเพิ่งสร้างพาร์ติชั่นที่เรียกว่า primary คุณสามารถใช้คำสั่งได้เช่นกัน

(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!

นี่อาจทำให้เกิดความสับสนหากคุณลองสร้างโลจิคัลพาร์ติชันฉันรู้ว่ามันทำให้ฉัน

(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

คุณไม่สามารถสร้างพาร์ทิชันที่เรียกว่า "ลอจิคัล" ภายในพาร์ติชันที่เรียกว่า "ขยาย"


ขอบคุณฉันเพิ่งเสียเวลาสักหน่อยขอบคุณเครื่องมือนี้ cli ที่ไม่ดีและคุณทำให้ฉันเข้าใจว่าเกิดอะไรขึ้น
Florian Heigl

5

คำตอบที่ได้รับการยอมรับโดย @likแสดงให้เห็นว่าคุณสามารถระบุการจัดตำแหน่งที่ต้องการ อย่างไรก็ตามพาร์ติชันจะใช้การจัดตำแหน่งนั้นเสมอเพื่อตรวจสอบพาร์ติชันที่ได้ แต่จะไม่สร้างพาร์ติชันที่มีการจัดตำแหน่งนั้นเสมอ

TL; DR: เมื่อ 1MiB เป็นการจัดตำแหน่งที่เหมาะสมการระบุ 0% จะใช้งานได้กับดิสก์ 200MiB และใหญ่กว่า สำหรับดิสก์ขนาดเล็กหรือการจัดแนวที่ใหญ่กว่าการระบุ 0G สามารถทำงานได้โดยที่ 0% ไม่ทำงาน ดูด้านล่างเกี่ยวกับสาเหตุ

บางส่วนพยายามตอบสนองข้อ จำกัด การจัดตำแหน่งเมื่อสร้างพาร์ติชัน แต่จะไม่เบี่ยงเบนจากค่าที่คุณร้องขอมากเกินไป สิ่งที่นับว่า "มากเกินไป" ขึ้นอยู่กับวิธีที่คุณระบุการโพสต์

เมื่อคุณระบุตำแหน่งเริ่มต้น (หรือสิ้นสุด) ให้กับคำสั่ง mkpart คำสั่งนั้นจะสร้างช่วงของค่าที่ยอมรับได้ภายใน ช่วงนี้เป็นศูนย์กลางในค่าที่คุณระบุและขยายอย่างเท่าเทียมกันทั้งสองด้านโดยครึ่งหนึ่งของขนาดหน่วยที่คุณใช้ (นั่นคือสิ่งที่ผมอ่านจากรหัสที่แสดงความคิดเห็นพูดขนาดเต็มทั้งสองด้าน)

ตัวอย่างเช่นเมื่อคุณระบุ "10M" มันจะพยายามใช้ตำแหน่งใด ๆ ระหว่าง 9.5M ถึง 10.5M ค่าเปอร์เซ็นต์จะเหมือนกันดังนั้นหากคุณระบุ 0% มันจะใช้ค่าใด ๆ ระหว่าง 0% ถึง 0.5% (ซึ่งไม่ได้เป็นค่าลบอย่างชัดเจน)

ข้อยกเว้นประการหนึ่งคือเมื่อใช้ power-of-two-units (เช่น KiB สำหรับ 1024, ตรงข้ามกับ K สำหรับ 1,000) ถือว่าคุณกำลังพยายามระบุตำแหน่งที่แน่นอนและพิจารณาเฉพาะค่าที่คุณระบุเท่านั้น

เนื่องจากโดยทั่วไปการจัดตำแหน่งที่ดีที่สุดดูเหมือนว่าจะจัดแนว 1MiB หน่วย K และ M มักจะไม่มีที่ว่างเพียงพอในการเข้าถึงการจัดตำแหน่งที่เหมาะสม การระบุตำแหน่งใน G ควรมีพื้นที่เหลือเฟือ แต่โดยปกติแล้ว% ก็ดีเช่นกัน

ดังนั้นนี่คือเหตุผลที่ 0% ใช้งานได้แม้ว่าจะมีข้อ จำกัด ก็ตาม


คุณสามารถสรุป TLDR ที่ใช้ได้จริงของคำตอบของคุณ: สิ่งที่ควรทำในลักษณะที่แตกต่างเมื่อเปรียบเทียบกับคำตอบที่ยอมรับได้ดีขึ้น
yurkennis

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