ฉันจะคัดลอกชุดรูปแบบพาร์ติชัน GPT อย่างรวดเร็วจากฮาร์ดไดรฟ์หนึ่งไปยังอีกไดรฟ์ได้อย่างไร


79

ในตารางพาร์ติชันที่ไม่ใช่ GPT ฉันสามารถทำได้

sfdisk -d /dev/sda | sfdisk /dev/sdb.

แต่sfdiskไม่สนับสนุนตารางพาร์ติชัน GPT ฉันจะใช้อะไรแทนได้บ้าง

ฉันกำลังมองหาโซลูชันคำสั่งหนึ่งหรือสองไม่ใช่แค่ใช้ GNU ที่แยกส่วนเพื่อเอาท์พุทขนาดพาร์ติชันแล้วสร้างด้วยตนเองอีกครั้ง


2
เครื่องมือแบ่งพาร์ติชัน util-linux (รวมถึงsfdisk) ถูกเขียนใหม่เพื่อรวมการสนับสนุน GPT สำหรับ util-linux 2.26 sfdiskแตกต่างจากgdiskที่ไม่สนับสนุนการใส่พาร์ติชันสำหรับเริ่มระบบขนาดเล็กก่อน 1MiB ดังนั้นจึงสำลักในการกำหนดค่าของฉัน (รายงานข้อผิดพลาดอัปสตรีมแล้ว)
Peter Cordes

เมื่อฉันโคลนดิสก์ MBR ไปยังดิสก์ขนาดเล็กนอกเหนือจาก sfdisk -d ฉันยังแก้ไขการถ่ายโอนข้อมูลและปรับเปลี่ยนภาคเริ่มต้น / สิ้นสุด ฉันจะทำสิ่งนี้กับ sgdisk สำหรับดิสก์ GPT ได้อย่างไร -R โคลนโดยไม่มีไฟล์สำรองของตัวกลางและ -b สร้างการสำรองข้อมูลแบบไบนารีไม่ใช่มนุษย์ที่สามารถอ่าน / แก้ไขได้เหมือน sfdisk!
Costin Gușă

อัปเดตเกี่ยวกับสิ่งนี้: sfdisk ยอมรับสิ่งที่คุณให้เมื่อใช้วิธีนี้รวมถึงพาร์ติชันสำหรับบูตขนาดเล็กที่ตามหลัง GPT ซึ่งสิ้นสุดที่ 1MB unix.stackexchange.com/a/12988/79808
Peter Cordes

แล้วไงdd if=/dev/sda of=/dev/sdbล่ะ
juniorRubyist

คำตอบ:


122

ติดตั้งgdiskที่มีอยู่ในที่เก็บ Ubuntu Universe

จากนั้นใช้sgdiskคำสั่ง ( หน้าคนที่นี่ ) เพื่อทำซ้ำตารางพาร์ติชัน:

sgdisk /dev/sdX -R /dev/sdY 
sgdisk -G /dev/sdY

คำสั่งแรกคัดลอกตารางพาร์ติชันของsdXไปที่sdY(โปรดระวังอย่าผสมกัน) คำสั่งที่สองสุ่ม GUID บนดิสก์และพาร์ติชันทั้งหมด สิ่งนี้จำเป็นเฉพาะถ้าจะใช้ดิสก์ในเครื่องเดียวกันมิฉะนั้นจะไม่จำเป็น


9
ข้อมูลนี้เป็นข้อมูลทองสำหรับผู้ที่ต้องการเปลี่ยนดิสก์ RAID-1 ที่ล้มเหลว ขอบคุณ!
คริสเตียน

@ คริสเตียนใช่นั่นคือสิ่งที่ฉันใช้มัน
Kris Harper

9
ก่อนที่จะทำการเปลี่ยนแปลงใด ๆ ที่เป็นอันตรายต้องแน่ใจว่าได้สำรองข้อมูลด้วย: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXและsgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat

11
คำสั่งนี้ใช้งานได้ แต่ควรสังเกตว่าการเรียงลำดับไดรฟ์นั้นย้อนหลังในตัวอย่าง วิธีที่ชัดเจนกว่านี้ในการเขียนคือsgdisk /dev/sdX -R /dev/sdY
เจฟฟรีย์

2
@KrisHarper: จริง ๆ แล้ว แต่เนื่องจากโปรแกรมใช้ getopt เพื่อแยกอาร์กิวเมนต์บรรทัดคำสั่งการเรียงลำดับไม่สำคัญ ควรมีการอัพเดตหน้า man
Geoffrey

28

ฉันพยายามแล้ว แต่ก็ไม่ได้ผลสำหรับฉัน วิธีแก้ปัญหาที่ฉันพบคือ:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb

ฉันพบว่าวิธีนี้ดีกว่าเพราะสามารถทำงานกับที่ไม่ใช่ GPT ได้ ฉันยังเปลี่ยนคำสั่งสุดท้ายที่: sgdisk -g dev / sdb /
ล็อค

1
ด้านบนใช้งานได้คุณต้องใส่ใจกับความจริงที่ว่าตัวอย่างนั้นล้าหลังไปเล็กน้อย (แม้ว่าจะถูกต้อง) sgdisk /dev/sdX -R /dev/sdYชัดเจนมากขึ้น
เจฟฟรีย์

5
สำรองข้อมูลครั้งแรกจากนั้นเรียกคืน ฉันพบว่าสิ่งนี้มีความเป็นสัญชาตญาณและมีโอกาสน้อยกว่าในการผสมผสานไดรฟ์
Csq

8
dd if=/dev/sda of=GPT_TABLE bs=1 count=A
dd if=GPT_TABLE of=/dev/sdb bs=1 count=A
partprobe /dev/sdb

โดยที่ A คือ:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1

1
นอกจากนี้ยังโคลนดิสก์และพาร์ติชัน GUID ทั้งหมดซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ นอกจากนี้ยังไม่ได้ติดตั้งตารางสำรองที่ท้ายดิสก์
goertzenator

ฉันชอบวิธีนี้! แต่ต้องการเขียน: sed '$s/:.*//p;d'แทนที่จะtail -n1 | cut -b1เป็นเช่นนี้จะล้มเหลวถ้าคุณมีพาร์ติชันมากกว่า 9!
F. Hauri

1
@goertzenator คุณถูกต้องคุณอาจใช้เครื่องมือปกติ partedทำบางสิ่งบางอย่าง (เช่นตั้งค่าสถานะ unset เป็นno) ซึ่งจะเขียนตารางพาร์ติชันใหม่ที่ปลายทั้งสอง!
F. Hauri

คุณไม่เคยใช้Bในส่วนด้านบน?
Aaron Franke

B คือค่าที่ใช้เพื่อหา A.
dodexahedron

2

ฉันเพิ่งลองจำลองแบบด้วย sgdisk และใช้งานได้ดี - คุณเพียงแค่ต้องทำตามกฎไวยากรณ์ของ readline:

   sgdisk --replicate=/dev/target /dev/source

หรือ

   sgdisk -R/dev/target /dev/source

และทุกอย่างทำงานได้


3
นี่คือสิ่งที่คำตอบของฉันบอกว่า
Kris Harper

-1

คำตอบที่ง่ายที่สุดคือ:

sudo sfdisk -d /dev/sda | sudo  sfdisk /dev/sdb --force

เพื่อคัดลอกการตั้งค่าตารางพาร์ติชั่น 'ดี' ของ A ไปยังไดรฟ์ทดแทน B (ซึ่งเป็นไดรฟ์ใหม่)


คุณพลาดส่วนหนึ่งของคำถามที่อธิบายว่าทำไมตัวเลือกนี้จึงไม่ใช่ตัวเลือก
DavidW

2
คำตอบของคุณไม่สามารถใช้กับGPTสำหรับผู้ที่ไม่ใช่
Jan Dev

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