it-swarm.it

Come copiare il layout delle partizioni di un intero disco usando strumenti standard

Voglio fare un backup dell'intera partizione layout di un disco rigido, comprese le unità logiche, in modo da poter ripristinare quel layout su un altro disco. Io non voglio copiare il contenuto delle partizioni, solo il layout. Per le partizioni primarie ed estese, è facile:

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

Ma quando si tratta del layout delle partizioni logiche, mi chiedo se tra gli strumenti standard esiste un modo simile per salvare il layout? Immagino che il problema principale sia trovare gli offset delle posizioni degli EBR, perché con ciò, dd farà il resto. Tieni presente che devo essere in grado di rimettere tutto su un (possibilmente) disco vuoto e quindi ripristinare lo stesso layout. L'uso di strumenti di partizionamento come fdisk o parted va bene, ma devo essere in grado di automatizzare il loro uso (scripting) e non dovrebbero dipendere da alcun pacchetto relativo a X - solo dalla riga di comando.

Il mio piano di backup lo sta facendo manualmente in un piccolo python usando il modulo struct, ma speravo piuttosto che ci fosse un modo più semplice.

86

È possibile utilizzare sfdisk per questa attività.

Salva:

sfdisk -d /dev/sda > part_table

Ristabilire:

sfdisk /dev/sda < part_table

Per le tabelle delle partizioni GPT, questo richiede sfdisk da util-linux 2.26 o successivo. è stato riscritto da zero sopra libfdisk .

Questo copia gli UUID invariati, piuttosto che generarne di nuovi. Quindi il nuovo disco è un clone dell'originale, non solo un altro disco con lo stesso layout. Nota che Linux /dev/disk/by-uuid/ considera gli UUID del filesystem, non gli UUID nella tabella delle partizioni. sfdisk genererà nuovi UUID se modifichi gli UUID dal dump (per partizione e l'UUID per la stessa tabella delle partizioni vicino all'inizio del file).

92
Petr Uzel

Dipende se il disco di origine utilizza un MBR (aka "dos" o "msdos") o una tabella delle partizioni GPT (aka "GUID").

Dischi superiori a 2 TB non può utilizzare MBR, quindi sono GPT.

Dischi sotto 2 TB può usare entrambi, quindi dovrai prima scoprire di che si tratta.

Supponendo di essere su Linux, utilizzare uno di questi comandi per scoprire quale tabella delle partizioni viene utilizzata dal disco di origine:

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

Dato

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

Per dischi MBR

usa sfdisk come suggerito dalla risposta di Petr Uzel o questa 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

Per i dischi GPT

La risposta corretta è stata data qui e qui da Kris Harper .

È necessario fdisk GPT . Guarda pagina di download o esegui Sudo apt-get install gdisk.

Quindi utilizzare il 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

L'ultimo comando randomizza il GUID sul disco e tutte le partizioni. Questo è necessario solo se i dischi devono essere usati nella stessa macchina, altrimenti non è necessario.

54
mivk

Vecchi ma comunque interessanti pyparted e python-lvm attacchi.

Aggiornamento:

Il precedente è stato pubblicato perché quanto sopra non funziona in molte situazioni moderne per la pagina man sfdisk.

sfdisk non capisce GUID Partition Table (GPT) e non è progettato per partizioni di grandi dimensioni. In casi particolari usa più avanzato GNU parted (8).

Questo comando tuttavia supporta> 2 TB partizioni e LVM.

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

Uscita campione:

BYT;
/dev/sda:12.9GB:scsi:512:512:msdos:VMware Virtual disk;
1:1049kB:12.9GB:12.9GB:::boot, lvm;
5
dhchdhd