web-dev-qa-db-fra.com

Comment copier la disposition de partition d'un disque entier à l'aide d'outils standard

Je souhaite effectuer une sauvegarde de l'ensemble de la partition de la disposition d'un disque dur, y compris les lecteurs logiques, afin de pouvoir restaurer cette disposition sur un autre disque. Je veux pas vouloir copier le contenu des partitions, seulement la mise en page. Pour les partitions principales et étendues, rien de plus simple:

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

Mais en ce qui concerne la disposition des partitions logiques, je me demande s'il existe parmi les outils standard une manière similaire de sauvegarder la disposition? Je suppose que le principal problème est de trouver les décalages vers les emplacements des EBR, car avec cela, dd fera le reste. Gardez à l'esprit que je dois pouvoir tout remettre sur un disque (éventuellement) vierge et ainsi restaurer la même disposition. Utiliser des outils de partitionnement comme fdisk ou parted est très bien, mais je dois être en mesure d'automatiser leur utilisation (script) et ils ne devraient pas dépendre de packages liés à X - ligne de commande uniquement.

Mon plan de sauvegarde le fait manuellement dans un petit script python utilisant le module struct, mais j'espérais plutôt qu'il y avait un moyen plus simple.

86

Vous pouvez utiliser sfdisk pour cette tâche.

Sauver:

sfdisk -d /dev/sda > part_table

Restaurer:

sfdisk /dev/sda < part_table

Pour les tables de partition GPT, cela nécessite sfdisk à partir d'util-linux 2.26 ou version ultérieure. Il a été réécrit à partir de zéro sur libfdisk .

Cela copie les UUID inchangés, plutôt que d'en générer de nouveaux. Le nouveau disque est donc un clone de l'original, pas seulement un autre disque avec la même disposition. Notez que /dev/disk/by-uuid/ examine cependant les UUID du système de fichiers, pas les UUID de la table de partition. sfdisk générera de nouveaux UUID si vous modifiez les UUID du vidage (par partition et l'UUID de la table de partition elle-même vers le début du fichier).

92
Petr Uzel

Cela dépend si votre disque source utilise un MBR (aka "dos" ou "msdos") ou une table de partition GPT (aka "GUID").

Les disques de plus de 2 TB ne peuvent pas utiliser MBR, ils sont donc GPT.

Les disques de moins de 2 TB peut utiliser les deux, vous devrez donc d'abord savoir de quoi il s'agit.

En supposant que vous êtes sous Linux, utilisez l'une de ces commandes pour savoir quelle table de partition votre disque source utilise:

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

Donné

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

Pour les disques MBR

utilisez sfdisk comme le suggère la réponse de Petr Uzel, ou cette 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

Pour les disques GPT

La bonne réponse a été donnée ici et ici par Kris Harper .

Vous avez besoin de GPT fdisk . Regardez la page de téléchargement ou exécutez Sudo apt-get install gdisk.

Utilisez ensuite la commande 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

La dernière commande randomise le GUID sur le disque et toutes les partitions. Cela n'est nécessaire que si les disques doivent être utilisés sur la même machine, sinon c'est inutile.

54
mivk

Liaisons plus anciennes mais toujours intéressantes pyparted et python-lvm .

Mise à jour:

Le précédent a été publié parce que ce qui précède ne fonctionne pas dans de nombreuses situations modernes selon la page de manuel sfdisk.

sfdisk ne comprend pas GUID Table de partition (GPT) et il n'est pas conçu pour les grandes partitions. Dans un cas particulier, utilisez une version plus avancée GNU parted (8).

Cette commande prend cependant en charge> 2 TB partitions et LVM.

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

Exemple de sortie:

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