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.
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).
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
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
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.
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;