Copier disque entier avec dd sur disque capacité inférieure

Aucuns problèmes, j’ai tout mon temps.
Dans la soirée, je ne suis de retour qu’à partir de 23:30.
Merci de ton aide mais ne te prends pas la tête pour ça car je ne manque pas de disques fonctionnels sur deux machines, plus portable, tablette et téléphone en cas d’urgence.

C’est bon, j’ai fini mes essais.
Pour tester, plutôt que de transférer le contenu d’un disque vers un disque plus petit, j’ai utilisé la fonction HPA (Host Protected Area) du disque avec hdparm pour réduire la taille visible du disque.

Malgré ce que fdisk affirme, “w” pour écrire la table de partition ne corrige pas le problème.

parted n’arrive même pas à lire la table de partition.

Comme je le pensais, c’est encore gdisk qui s’en sort le mieux. Un simple “w” a corrigé tous les problèmes, sans besoin d’utiliser les commandes de réparation/expert. En tout cas c’est ce qui s’est passé chez moi.

gdisk /dev/sdb ... w

Pour que je le fasse, ça nécessite de démarrer sur l’original avec les deux disques présent.
Puis de passer les deux commandes que tu indiques :
gdisk /dev/sdb
w
ensuite, j’éteins la machine, je déconnecte le disque original et je démarre sur le clone.
Est-ce bien ce que je dois faire ?

Précision : “w” est une commande à taper dans gdisk, et pas la commande w du shell.
Avant d’éteindre, vérifie que la table de partition est correcte. En supposant que le disque de 500 Go est toujours sdb, tu peux utiliser

dmesg | grep sdb # vérifie que le noyau l'a bien lue
fdisk -l /dev/sdb
parted /dev/sdb print
gdisk -l /dev/sdb

Il semble que c’est bon.
Je mets toutes les commandes en vrac comme elles ont été passées

GPT fdisk (gdisk) version 0.8.10

Warning! Disk size is smaller than the main header indicates! Loading
secondary header from the last sector of the disk! You should use ‘v’ to
verify disk integrity, and perhaps options on the experts’ menu to repair
the disk.
Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.

Warning! One or more CRCs don’t match. You should repair the disk!

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: damaged


Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.


Command (? for help): w
Caution! Secondary header was placed beyond the disk’s limits! Moving the
header, but other problems may occur!

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$ dmesg | grep sdb
[ 1.610990] sd 4:0:0:0: [sdb] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[ 1.610993] sd 4:0:0:0: [sdb] 4096-byte physical blocks
[ 1.611070] sd 4:0:0:0: [sdb] Write Protect is off
[ 1.611074] sd 4:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[ 1.611106] sd 4:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn’t support DPO or FUA
[ 1.616286] sdb: unknown partition table
[ 1.616501] sd 4:0:0:0: [sdb] Attached SCSI disk
[ 247.933083] sdb: sdb1 sdb2 sdb3 sdb4
[ 281.381989] EXT4-fs (sdb3): mounted filesystem with ordered data mode. Opts: (null)
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$ sudo fdisk -l /dev/sdb

Disque /dev/sdb : 465,8 GiB, 500107862016 octets, 976773168 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d’E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d’étiquette de disque : gpt
Identifiant de disque : 9BA0D261-DA04-4274-8135-D5D2D09D2045

Device Start End Sectors Size Type
/dev/sdb1 2048 48828415 48826368 23,3G Microsoft basic data
/dev/sdb2 48828416 64452607 15624192 7,5G Linux swap
/dev/sdb3 68360192 224610303 156250112 74,5G Microsoft basic data
/dev/sdb4 64452608 64454655 2048 1M BIOS boot

Les entrées de la table de partitions ne sont pas dans l’ordre du disque.
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$ parted /dev/sdb print
bash: parted : commande introuvable
ricardo@dd3-5:~$ sudo parted /dev/sdb print
Model: ATA ST500DM002-1BD14 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 25,0GB 25,0GB ext4 R3-5 msftdata
2 25,0GB 33,0GB 8000MB linux-swap(v1) swap3-5
4 33,0GB 33,0GB 1049kB bios_boot_3-5 bios_grub
3 35,0GB 115GB 80,0GB ext4 H3-5 msftdata

ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$
ricardo@dd3-5:~$ sudo gdisk -l /dev/sdb
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 9BA0D261-DA04-4274-8135-D5D2D09D2045
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 756070381 sectors (360.5 GiB)

Number Start (sector) End (sector) Size Code Name
1 2048 48828415 23.3 GiB 0700 R3-5
2 48828416 64452607 7.5 GiB 8200 swap3-5
3 68360192 224610303 74.5 GiB 0700 H3-5
4 64452608 64454655 1024.0 KiB EF02 bios_boot_3-5
ricardo@dd3-5:~$

===============

J’attends ta réponse avant de déconnecter et de tester avec le seul clone

Oui c’est bon. Le noyau et les trois programmes lisent la table de partition.

Par contre quelque chose en a profité pour monter la partition sdb3 :

1 J'aime

Oui, vers la fin, une fenêtre me demandant le pass root pour effectuer qq chose.
J’ai pensé que ça faisait partie de l’ensemble du processus et j’ai tapé.
J’espère ne pas avoir fait de toile.
Je teste.

Bingo ! :smiley:

Je crois que maintenant, je peux placer en résolu.
je pense que ce fil peut servir à d’autres utilisateurs.
J’ai fait en sorte, comme à mon habitude, d’écrire un titre explicite, pour d’éventuelles recherches.

Il me reste à modifier les nom de Partlabel et le nom de machine sur ce disque, pour ne pas me tromper par la suite.

Il me faudra ptet faire un update-grub ensuite mais j’attendrai ton avis.

Merci, tu peux aller te coucher serein.

Quand tu travailles en ligne de commande et qu’un machin graphique te demande ton mot de passe root tu trouves ça normal et tu t’exécutes ?
Grmbl…

Je sais que ce n’est pas prudent.
Mais c’est fréquent d’avoir cette demande quand on tape ‘gparted’, par exemple.
En principe, je ne réponds pas et je modifie ma commande avec sudo devant.
comme là, parted avait été utilisé, j’ai pensé pouvoir faire.
Pas prudent le Ricardo.

Merci pour ce fil que j’ai suivi attentivement ayant été concerné il y a peu.
Il va certainement aidé beaucoup de monde car lorsqu’on remplace un vieux mécanique par un ssd on prend souvent une taille inférieure (question de prix ??).

@toto69
Content que ça puisse servir à d’autres.

@PascalHambourg :
Je me retrouve donc avec deux disques : ‘original’ et ‘clone’, qui ont la même UUID.
Est-ce qu’il n’y a pas risque de conflit, le jour où, pour une raison X, j’aurai besoin de les monter en même temps ?
Aujourd’hui, je ne le ferais pas car c’est encore dans ma mémoire fraiche, mais va savoir si dans qq mois je m’en souviendrai.

Est-il possible, et souhaitable, de modifier l’UUID du clone ?

EDIT :
À noter que les Partlabels ont été modifiés sur le clone.

Comment sais-tu qu’ils ont le même UUID? Normalement ce n’est pas possible (enfin à moins que j’ai loupé quelque chose…), l’UUID est attribué lors de la création des partitions or “dd” ne remplit pas cette fonction, donc il n’a pas pu te cloner l’UUID de ta partition source si c’est à ça que tu penses…

EDIT : au passage j’oubliais…, normalement les UUID sont différents, ce qui implique que si un jour tu souhaites démarrer ton PC avec le disque clone, il te faudra au préalable mettre à jour ton initramfs justement à cause des UUID en l’occurence, mettre à jour GRUB seulement ne suffit pas.

Donc dans le cas présent, tu peux faire un chroot sur ton disque clone, récupérer avec la commande

# blkid

l’UUID de la partition clone, changer celui-ci dans le fichier

/etc/fstab

de la partition clone sur laquelle tu as chroot-é, et enfin excuter

# update-initramfs -u (ajouter "-k all" si éventuellement tu as plusieurs kernels installés...)

C’est bien à ça que je pense et je suis sûr de ce que j’avance.
Vérifié avec blkid
dd fait une copie parfaite, y-compris de l’UUID.

Ok, mea culpa tu as fait un “dd” sur les disques… :wink:

Tes disques sont partitionnés en MBR ou GPT?

Oui, il s’agissait d’un dd /dev/sda vers /dev/sdb
Mes disques sont tous en GPT

Alors tu peux utiliser gdisk pour modifier le GUID du disque clone et de ses partitions. Tu branches ton disque clone sur ton PC, tu repères à quel périphérique /dev/sdX il a été associé et tu lances :

# gdisk /dev sdX

Tu verras ensuite en-bas du retour commande une ligne qui t’indique d’appuyer sur “?” pour afficher les options. Une fois les options affichées, tu verras que pour afficher les options avancées il faut appuyer sur “x”, puis sur “?” pour afficher une nouvelle fois l’aide du menu avancé…
Tu affiches les options avancées, et la tu verras dans la liste que tu as une option pour changer le GUID du disque (lettre “g” ) et une option pour changer le GUID des partitions (lettre “c”).

Il te suffit de faire ensuite les manipulations un par un, en commençant peut-être par le disque éventuellement…

Une fois les manips faites, tu appuieras sur la lettre “w” et valideras pour que les changements soient validés et enregistrés, ce qui en même temps fera quitter l’utilitaire gdisk et te rendra la main dans le terminal.

Oui. “Conflit” ne signifie pas que les deux disques vont se battre entre eux mais que quand on désigne un périphérique par son UUID, on ne sait pas sur lequel des deux on va tomber. Ainsi après un démarrage, chaque partition montée par l’UUID peut provenir de l’un ou de l’autre disque.

Pour rappel :

  • une table de partition GPT a un UUID (pas utilisé à ma connaissance)
  • chaque partition GPT a un UUID de partition (PARTUUID) et une étiquette de partition (PARTLABEL) enregistés dans la table de partition GPT
  • chaque système de fichiers courant, swap… a un UUID (UUID) et une étiquette (LABEL)

gdisk a une fonction “f” dans le menu expert (x) qui permet de changer l’UUID de la table de partition et les PARTUUID de toutes les partitions d’un disque avec des valeurs aléatoires, spécialement prévue dans le cas d’un clonage.

Pour changer les UUID et les LABEL de systèmes de fichiers et autre swap,on peut utiliser les outils spécifiques au type de système de fichiers ou de swap : tune2fs pour ext2/3/4, swaplabel pour le swap. Bien sûr il faut ensuite mettre à jour les UUID et LABEL dans les fichiers qui les référencent comme /etc/fstab, /boot/grub/grub.cfg, /etc/initramfs-tools/conf/resume…
Il peut être utile aussi de réinstaller GRUB au cas où il enregistrerait la partition contenant /boot par son UUID.

Curieux, je n’ai pas cette option.

Expert command (? for help): ?
a	set attributes
c	change partition GUID
d	display the sector alignment value
e	relocate backup data structures to the end of the disk
g	change disk GUID
h	recompute CHS values in protective/hybrid MBR
i	show detailed information on a partition
l	set the sector alignment value
m	return to main menu
n	create a new protective MBR
o	print protective MBR data
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	resize partition table
t	transpose two partition table entries
u	replicate partition table on new device
v	verify disk
w	write table to disk and exit
z	zap (destroy) GPT data structures and exit
?	print this menu

Pourtant elle figure dans la page de manuel.

f Randomize the disk’s GUID and all partitions’ unique GUIDs
(but not their partition type code GUIDs). This function may be used after
cloning a disk with another utility in order to render all GUIDs once
again unique.