Cómo copiar el diseño de partición de un disco completo utilizando herramientas estándar

82

Quiero hacer una copia de seguridad de todo el diseño de la partición de un disco duro, incluidas las unidades lógicas, para poder restaurar ese diseño en otro disco. Yo no quiero copiar el contenido de las particiones, sólo el diseño. Para las particiones primaria y extendida, es fácil:

dd if=/dev/sda of=partitiontable.bin bs=1 skip=446 count=64 # backup
dd if=partitiontable.bin of=/dev/sda bs=1 seek=446 count=64 # restore

Pero cuando se trata del diseño de las particiones lógicas, me pregunto si existe entre las herramientas estándar una forma similar de guardar el diseño. Supongo que el problema principal es encontrar las compensaciones para las ubicaciones de los EBR, porque con eso, ddhará el resto. Tenga en cuenta que necesito poder volver a colocar todo en un (posiblemente) disco en blanco y, por lo tanto, restaurar el mismo diseño. Usar herramientas de particionamiento como fdisko partedestá bien, pero debo ser capaz de automatizar su uso (secuencias de comandos) y no deberían depender de ningún paquete relacionado con X, solo línea de comandos.

Mi plan de respaldo lo está haciendo manualmente en un pequeño script de Python usando el módulo de estructura, pero esperaba que hubiera una manera más fácil.

Lauritz V. Thaulow
fuente

Respuestas:

90

Puede usar sfdisk para esta tarea.

Salvar:

sfdisk -d /dev/sda > part_table

Restaurar:

sfdisk /dev/sda < part_table

Para las tablas de partición GPT, esto requiere sfdiskde util-linux 2.26 o posterior. Fue reescrito desde cero encima de libfdisk .

Esto copia los UUID sin cambios, en lugar de generar nuevos. Entonces, el nuevo disco es un clon del original, no solo otro disco con el mismo diseño. Tenga en cuenta que Linux /dev/disk/by-uuid/mira los UUID del sistema de archivos, sin embargo, no los UUID en la tabla de particiones. sfdiskgenerará nuevos UUID si edita los UUID del volcado (por partición y el UUID para la tabla de particiones en sí cerca del inicio del archivo).

Petr Uzel
fuente
1
No estoy seguro, pero el único límite que se me ocurre es el límite de tamaño de 2 TB para la partición impuesto por el esquema de tabla de partición msdos. Para superar este límite, uno puede usar GPT en su lugar, pero el sfdisk AFAIK no puede funcionar con GPT. No sé si hay algún otro límite ni si sfdisk informará si no puede hacer frente.
Petr Uzel
2
sfdiskno funciona con grandes volúmenes ni admite GPT.
dhchdhd
1
@Barry y cuando dices "grande", ¿te refieres al límite de 2TB del que habla @Petr?
Lauritz V. Thaulow
55
La forma correcta es: sudo parted / dev / sda -lm> sda.parted
dhchdhd
1
A veces es útil, ignorar los problemas de DOS solamente, agregar la opción -L o --linux :sfdisk -L /dev/sda < part_table
Diego
51

Depende de si su disco de origen utiliza una tabla de particiones MBR (también conocido como "dos" o "msdos") o GPT (también conocido como "GUID").

Los discos de más de 2 TB no pueden usar MBR, por lo que son GPT.

Los discos de menos de 2 TB pueden usar ambos, por lo que primero tendrá que averiguar cuál es.

Suponiendo que está en Linux, use cualquiera de estos comandos para averiguar qué tabla de partición usa su disco de origen:

disk=/dev/sda

# Always available, but old versions may not recognize gpt
fdisk -l $disk | grep type

# `apt-get install gdisk` or equivalent on non-Debian systems
gdisk -l $disk | grep -A4 'scan'

# `apt-get install parted`
parted $disk print | grep Table

Dado

source=/dev/sda
dest=/dev/sdb

Para discos MBR

use sfdiskcomo lo sugiere la respuesta de Petr Uzel, o esta variante:

# Save MBR disks
sfdisk -d $source > /partitions-backup-$(basename $source).sfdisk
sfdisk -d $dest   > /partitions-backup-$(basename $dest).sfdisk

# Copy $source layout to $dest
sfdisk -d $source | sfdisk $dest

Para discos GPT

La respuesta correcta fue dada aquí y aquí por Kris Harper .

Necesitas GPT fdisk . Mira la página de descarga o ejecuta sudo apt-get install gdisk.

Luego use el comando sgdisk :

# Save GPT disks
sgdisk --backup=/partitions-backup-$(basename $source).sgdisk $source
sgdisk --backup=/partitions-backup-$(basename $dest).sgdisk $dest

# Copy $source layout to $dest and regenerate GUIDs
sgdisk --replicate=$dest $source
sgdisk -G $dest

El último 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.

mivk
fuente
10
Siempre tengo miedo de mezclar los dos parámetros, por lo que un buen truco es utilizar --backup=Filepara exportar una tabla de partición desde la unidad de origen y --load-backup=Filerestaurar en la unidad de destino.
zidarsk8
¿Existe algún riesgo para los datos existentes en los discos y particiones posteriores cuando mueve la tabla de particiones y luego aleatoriza el GUID de los discos y particiones como se describe anteriormente? ¡Gracias!
EngBIRD
@EngBIRD: siempre y cuando no mezcles $ source y $ dest, no puede haber riesgo para los datos, ya que no hay datos sobre el destino. Solo copia el diseño de la partición y aún necesita formatear y copiar los datos después.
mivk
La razón por la que pregunté es, de hecho, no estoy comenzando desde un disco en blanco, estoy intercambiando dos discos alrededor ...
EngBIRD
5

Enlaces de pyparted y python-lvm más antiguos pero aún interesantes .

Actualizar:

Lo anterior se publicó porque lo anterior no funciona en muchas situaciones modernas según la página de manual de sfdisk.

sfdisk no comprende la tabla de particiones GUID (GPT) y no está diseñada para particiones grandes. En caso particular, use GNU parted más avanzado (8).

Sin embargo, este comando admite particiones> 2 TB y LVM.

# parted -ms /dev/sda print > sda.parted

Salida de muestra:

BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;
dhchdhd
fuente
14
¿Cómo se restaura desde el sda.partedarchivo guardado a un nuevo disco?
Avery Chan
44
Esta respuesta es inútil porque la pregunta era sobre copiar el diseño de la partición a una nueva unidad. La respuesta es solo sobre el dumping. ¿Cómo importar? Por favor mejora.
itsafire
Aparentemente en este momento, no hay una buena respuesta: serverfault.com/questions/709582/…
Oteo