¿Cómo puedo copiar rápidamente un esquema de partición GPT de un disco duro a otro?

79

En una tabla de partición no GPT puedo hacer

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

Pero sfdiskno es compatible con las tablas de particiones GPT. ¿Qué puedo usar en su lugar?

Estoy buscando una solución de uno o dos comandos, no solo usando GNU dividido para generar los tamaños de partición y luego haciéndolos manualmente nuevamente.

Kris Harper
fuente
2
Las herramientas de partición util-linux (incluidas sfdisk) se reescribieron para incluir el soporte GPT para util-linux 2.26. sfdiskSin gdiskembargo, difiere de que no admite poner una pequeña partición de arranque antes de 1MiB, por lo que se atragantó con mi configuración. (error reportado ya aguas arriba.)
Peter Cordes
Cuando clono un disco MBR en un disco más pequeño, además de sfdisk -d también edito el volcado y modifico los sectores de inicio / fin. ¿Cómo hago esto con sgdisk para discos GPT? -R clona sin un archivo de respaldo intermedio y -b crea un respaldo binario, no legible / editable por humanos como lo hace sfdisk.
Costin Gușă
actualización sobre esto: sfdisk ahora acepta todo lo que le das cuando se usa de esta manera, incluida una pequeña partición de arranque después de la GPT, que termina en 1 MB. unix.stackexchange.com/a/12988/79808
Peter Cordes
¿Qué tal dd if=/dev/sda of=/dev/sdb?
juniorRubyist

Respuestas:

122

Instale gdisk que está disponible en los repositorios de Ubuntu Universe.

Luego use el sgdiskcomando ( página del manual aquí ) para replicar la tabla de particiones:

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

El primer comando copia la tabla de particiones de sdXto sdY(tenga cuidado de no mezclarlas). El segundo comando aleatoriza el GUID en el disco y todas las particiones. Esto solo es necesario si los discos se van a utilizar en la misma máquina; de lo contrario, no es necesario.

Kris Harper
fuente
99
Esta información es dorada para cualquier persona que quiera reemplazar un disco RAID-1 fallido. ¡Gracias!
Christian
@ Christian Sí, para eso lo usé.
Kris Harper
99
Antes de realizar cambios destructivos, asegúrese de realizar una copia de seguridad con: sgdisk --backup=/some/safe/location/sdX.gpt /dev/sdXysgdisk --backup=/some/safe/location/sdY.gpt /dev/sdY
Michael Kropat el
11
Este comando funciona, pero debe tenerse en cuenta que el orden de las unidades está al revés en el ejemplo. Una forma más obvia de escribir esto essgdisk /dev/sdX -R /dev/sdY
Geoffrey
2
@KrisHarper: De hecho, lo hace, pero dado que el programa usa getopt para analizar los argumentos de la línea de comandos, el orden no importa la posición en cuclillas. La página del manual debe actualizarse.
Geoffrey
28

Lo intenté y no funcionó para mí. La solución que encontré es:

sgdisk --backup=table /dev/sda
sgdisk --load-backup=table /dev/sdb
sgdisk -G /dev/sdb
Serafin Rusu
fuente
Encontré que esta solución es mejor, porque puede funcionar con no GPT. También cambio el último comando a: sgdisk -g / dev / sdb
Locke
1
Lo anterior funciona, debe prestar atención al hecho de que el ejemplo es un poco al revés (aunque correcto). sgdisk /dev/sdX -R /dev/sdYEs más obvio.
Geoffrey
55
Primero copia de seguridad, luego restaurar. Creo que esto es más intuitivo y menos posibilidades de mezclar las unidades.
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

donde A es:

A=(128*B)+1024
B=parted -ms /dev/sda print |tail -1|cut -b1
Petroff
fuente
1
Esto también clona todos los GUID de disco y partición que pueden no ser lo que desea. Además, no instala la tabla de respaldo al final del disco.
Goertzenator
Me gusta de esta manera! pero prefiera escribir: en su sed '$s/:.*//p;d'lugar tail -n1 | cut -b1, ¡esto fallará si tiene más de 9 particiones!
F. Hauri
1
@goertzenator Tienes razón, para esto puedes ejecutar una parted herramienta normal , hacer algo (como establecer cualquier indicador no establecido en no), ¡esto reescribirá la tabla de particiones en ambos extremos!
F. Hauri
¿Nunca usaste Ben la sección superior?
Aaron Franke
B es un valor utilizado para determinar A.
dodexaedro
2

Acabo de intentar la replicación con sgdisk y funciona bien, solo tienes que seguir las reglas de sintaxis de readline:

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

o

   sgdisk -R/dev/target /dev/source

Y todo funciona.

al3xxx
fuente
3
Esto es exactamente lo que dice mi respuesta.
Kris Harper
-1

La respuesta más fácil a esto es:

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

copiar la configuración de la tabla de particiones 'buena' de A a la unidad de reemplazo B (que es la nueva unidad).

Tony Doyle
fuente
Te perdiste la parte de la pregunta que explica por qué esto no es una opción.
DavidW
2
Su respuesta no funciona para GPT solo para no GPT
Jan Dev
En la versión actual de sfdiskesto funciona.
Gert van den Berg