Bagaimana saya bisa dengan cepat menyalin skema partisi GPT dari satu hard drive ke yang lain?

79

Pada tabel partisi non GPT yang bisa saya lakukan

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

Tetapi sfdisktidak mendukung tabel partisi GPT. Apa yang bisa saya gunakan?

Saya mencari satu atau dua solusi perintah, bukan hanya menggunakan GNU yang dipisah untuk menampilkan ukuran partisi dan kemudian secara manual membuatnya lagi.

Kris Harper
sumber
2
Alat partisi util-linux (termasuk sfdisk) ditulis ulang untuk menyertakan dukungan GPT untuk util-linux 2.26. sfdiskberbeda dari gdiskyang tidak mendukung menempatkan partisi boot kecil sebelum 1MiB, jadi itu tersedak pada konfigurasi saya. (bug sudah dilaporkan di hulu.)
Peter Cordes
Ketika saya mengkloning disk MBR ke disk yang lebih kecil, selain sfdisk -d saya juga mengedit dump dan memodifikasi sektor start / end. Bagaimana saya melakukan ini dengan sgdisk untuk disk GPT? -R klon tanpa file cadangan perantara dan -b membuat cadangan biner, tidak dapat dibaca / diedit manusia seperti halnya sfdisk!
Costin Gușă
perbarui ini: sfdisk sekarang menerima apa pun yang Anda berikan saat digunakan dengan cara ini, termasuk partisi boot kecil mengikuti GPT, berakhir pada 1MB. unix.stackexchange.com/a/12988/79808
Peter Cordes
Bagaimana dengan dd if=/dev/sda of=/dev/sdb?
juniorRubyist

Jawaban:

122

Instal gdisk yang tersedia di repositori Ubuntu Universe.

Kemudian gunakan sgdiskperintah ( halaman manual di sini ) untuk mereplikasi tabel partisi:

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

Perintah pertama menyalin tabel partisi sdXto sdY(hati-hati jangan sampai mencampuradukkannya). Perintah kedua mengacak GUID pada disk dan semua partisi. Ini hanya diperlukan jika disk akan digunakan di mesin yang sama, jika tidak maka tidak perlu.

Kris Harper
sumber
9
Informasi ini emas untuk siapa saja yang ingin mengganti disk RAID-1 yang gagal. Terima kasih!
Christian
@Christian Yep, untuk itulah saya menggunakannya.
Kris Harper
9
Sebelum melakukan perubahan yang merusak, pastikan untuk mengambil cadangan dengan: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXdansgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat
11
Perintah ini berfungsi tetapi harus dicatat bahwa pemesanan drive mundur dalam contoh. Cara yang lebih jelas untuk menulis ini adalahsgdisk /dev/sdX -R /dev/sdY
Geoffrey
2
@ KrisHarper: Memang benar, tetapi karena program menggunakan getopt untuk mengurai argumen baris perintah, pemesanan tidak masalah squat. Halaman manual harus diperbarui.
Geoffrey
28

Saya mencoba dan itu tidak berhasil untuk saya. Solusi yang saya temukan adalah:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb
Serafin Rusu
sumber
Saya menemukan solusi ini lebih baik, karena dapat bekerja dengan non-GPT. Saya juga mengubah perintah terakhir ke: sgdisk -g / dev / sdb
Locke
1
Di atas tidak bekerja, Anda perlu memperhatikan fakta bahwa contohnya sedikit mundur (meskipun benar). sgdisk /dev/sdX -R /dev/sdYlebih jelas.
Geoffrey
5
Cadangan pertama, lalu pulihkan. Saya menemukan ini lebih intuitif dan lebih sedikit kesempatan untuk mencampur drive.
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

dimana A adalah:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1
Petroff
sumber
1
Ini juga mengkloning semua GUID disk dan partisi yang mungkin bukan yang Anda inginkan. Juga, itu tidak menginstal tabel cadangan di akhir disk.
goertzenator
Saya suka cara ini! tetapi lebih suka menulis: sebagai sed '$s/:.*//p;d'gantinya tail -n1 | cut -b1ini akan gagal jika Anda memiliki lebih dari 9 partisi!
F. Hauri
1
@goertzenator Anda benar, untuk ini Anda dapat menjalankan alat biasa parted , melakukan sesuatu (seperti mengatur flag yang belum disetel no), ini akan menulis ulang tabel partisi di kedua ujungnya!
F. Hauri
Anda tidak pernah menggunakan Bbagian atas?
Aaron Franke
B adalah nilai yang digunakan untuk mencari tahu A.
dodexahedron
2

Saya baru saja mencoba replikasi dengan sgdisk dan berfungsi dengan baik - Anda hanya perlu mengikuti aturan sintaks readline:

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

atau

   sgdisk -R/dev/target /dev/source

dan semuanya bekerja.

al3xxx
sumber
3
Inilah tepatnya jawaban saya.
Kris Harper
-1

Jawaban termudah untuk ini adalah:

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

untuk menyalin konfigurasi tabel partisi 'baik' dari A ke drive pengganti B (yang merupakan drive baru).

Tony Doyle
sumber
Anda melewatkan bagian dalam pertanyaan yang menjelaskan mengapa ini bukan pilihan.
DavidW
2
Jawaban Anda tidak bekerja untuk GPT hanya untuk non-GPT
Jan Dev
Pada versi saat sfdiskini ini berfungsi.
Gert van den Berg