Pourquoi un BCD Windows 7 cloné contient des données incomplètes (et, par conséquent, empêche le démarrage)?

9

J'ai eu la malchance de devoir cloner un boîtier Windows XP / 7 à double démarrage pour remplacer son disque dur par un plus petit. J'ai eu beaucoup de mal à le faire démarrer et j'aimerais comprendre ce qui se passe et si je pouvais faire mieux.

Contexte: la machine a un disque de 750 Go avec 3 partitions:

  • Windows XP
  • Windows 7
  • Les données

L'installation d'origine a été effectuée de manière à ce qu'il n'y ait pas de partition de récupération Windows 7 distincte. J'espère que ce fait simplifie quelque peu les choses.

Je le remplace par un lecteur 80 Go. Les partitions ont déjà été réduites à partir de Windows 7 afin qu'elles tiennent sur le plus petit disque.

J'ai utilisé GParted(à partir d'un PartedMagicLiveCD Linux) pour copier les partitions. Je marque la partition Windows XP comme partition active (la même que sur le disque d'origine).

Je n'ai pas pu utiliser CloneZillaou faire une copie de disque entière en raison de la transition d'un disque plus grand à un disque plus petit.

Après avoir copié les partitions, j'ai copié manuellement le chargeur de démarrage (en prenant soin de ne pas copier la table des partitions):

$ dd if=/dev/sda of=/dev/sdb bs=446 count=1

J'ai retiré le disque d'origine, mis le nouveau afin qu'il soit physiquement connecté de la même manière que l'original (maître IDE canal 1) et j'ai essayé de démarrer. Cela a présenté avec succès le menu de démarrage mais a échoué lors de la sélection de l'une des options (il y en a deux: un pour XP et un pour Win7).

J'ai fait pas mal de recherches qui m'ont permis de réaliser que les données de configuration de démarrage de Windows 7 ne contenaient pas tout ce qu'elles devraient. J'ai comparé la sortie BCD des disques originaux et nouveaux et j'ai noté que les entrées de périphérique sur ces derniers l'étaient unknown. Je les ai donc modifiés manuellement pour correspondre à l'original - comme ceci:

$ bcdedit /set {ntldr} device partition=C:
$ bcdedit /set {default} device partition=D:
$ bcdedit /set {default} osdevice partition=D:

et redémarré. Cette fois, j'ai pu démarrer XP et Win7. J'ai besoin de faire plus de tests car il semble y avoir d'autres différences entre les deux BCD, mais apporter les modifications ci-dessus a au moins permis le démarrage.

Donc ma question est vraiment de demander pourquoi le BCD sur une partition clonée apparaîtrait différent de l'original, et suffisamment pour empêcher le démarrage?

Et une suite à cela serait de demander si je devrais faire cela d'une autre manière?

étoilé
la source

Réponses:

13

Après avoir cloné des partitions contenant des systèmes d'exploitation Windows, il est nécessaire de corriger les données de configuration de démarrage si les partitions clonées ne sont pas exactement dans la même position sur le disque cloné que sur l'original.

Le mécanisme de démarrage de Windows, depuis Windows Vista, stocke sa configuration en tant que «données de configuration de démarrage» (BCD) et cela fait référence aux partitions, non pas par numéros de partition mais par une signature de disque et un décalage de secteur. La signature de disque est une valeur 32 bits incorporée dans l'enregistrement d'amorçage principal. La copie des 446 premiers octets du secteur 0 copiera la signature du disque.

Si les activités de clonage entraînent des partitions de disque clonées ayant des adresses de secteur de démarrage différentes de celles d'origine (très probablement à moins qu'un clone de disque entier n'ait été utilisé), le clone échouera très probablement jusqu'à ce que ces remèdes soient appliqués.

Fondamentalement, les décalages de secteur doivent être mis à jour et, pour cela, vous devrez utiliser une console de récupération (disponible sur un DVD d'installation de Windows 7). Assurez-vous que seul le lecteur cloné est connecté et démarrez à partir d'un DVD d'installation de Windows 7. Au premier écran, faites des sélections de langue et cliquez sur "Suivant". À l'écran suivant (où "installer maintenant" s'affiche), appuyez sur MAJ + F10 pour obtenir une invite de commande.

Tout d'abord, confirmez les lettres de lecteur en place et les partitions auxquelles elles se rapportent:

diskpart
list volume
exit

De plus, si vous en avez besoin, reconfirmez la partition active:

diskpart
select disk 0
select part 1
detail part
select part 2
detail part
... and so-on
exit

Sur un système BIOS, le BCD est stocké dans un fichier X:\Boot\BCDoù se Xtrouve la lettre de lecteur de la partition active (pour UEFI, il se trouve dans la partition système EFI). Normalement caché, il peut être vu avec

dir /AH X:\Boot

Il peut être sauvegardé comme ceci:

bcdedit /export X:\path\to\bcd\backup

et restauré

bcdedit /import X:\path\to\bcd\backup

Si un disque comporte plusieurs systèmes d'exploitation, il peut y avoir plusieurs BCD. Le BCD actif est celui de \Boot\BCDla partition qui est marqué comme actif - la partition active . Pour lister son contenu (par ordre croissant de verbosité :)

bcdedit
bcdedit /enum
bcdedit /enum ALL
bcdedit /enum ALL /v

Pour corriger le BCD actif, établissez les lettres de lecteur pour les partitions correctes et procédez comme suit:

bcdedit /set {default} osdevice partition=X:
bcdedit /set {default} device partition=X:
bcdedit /set {bootmgr} device partition=X:
bcdedit /set {memdiag} device partition=X:
bcdedit /set {ntldr} device partition=X:

ou, pour réparer un autre BCD (dans "X: \ boot \ bcd" dans ces exemples):

bcdedit /store X:\boot\bcd /set {default} osdevice partition=X:
bcdedit /store X:\boot\bcd /set {default} device partition=X:
bcdedit /store X:\boot\bcd /set {bootmgr} device partition=X:
bcdedit /store X:\boot\bcd /set {memdiag} device partition=X:
bcdedit /store X:\boot\bcd /set {ntldr} device partition=X:

Par exemple, mon système qui a XP et 7 et ils montrent XP comme étant activé C:et 7 étant D:activé et la partition active est C:. alors le BCD actif sera à c:\boot\BCD. Le gestionnaire de démarrage sera trouvé à C:\bootmgret le diagnostic de mémoire sera à C:\boot\memtest.exe, Les commandes requises seraient:

bcdedit /set {ntldr} device partition=C:
bcdedit /set {memdiag} device partition=C:
bcdedit /set {bootmgr} device partition=C:
bcdedit /set {default} device partition=D:
bcdedit /set {default} osdevice partition=D:

Avec ces modifications, le redémarrage de l'ordinateur (en appuyant sur Alt-F4 permettra d'atteindre cet objectif) et la suppression du DVD ont permis au système de démarrer correctement.

Lectures complémentaires:

(un clone de disque entier ne devrait pas subir ces problèmes car la disposition de la partition sur la copie devrait être exactement la même que l'original)

étoilé
la source
Notez que bcdbootfournit un moyen plus facile de recréer une entrée de démarrage, mais je ne suis pas sûr qu'elle conviendrait dans un scénario de double démarrage XP / W7.
Harry Johnston
J'adore votre réponse, mais pourriez-vous s'il vous plaît la nettoyer un peu? Je pense qu'il y a beaucoup d'informations superflues (comme des exemples de commandes, quand vous avez la commande réelle juste après, etc.).
Bigbio2002
Je suis content que vous aimiez l'anser mais je ne pense pas qu'il y ait beaucoup d'informations étrangères là-dedans. J'ai une explication générale plus un exemple réel à la fin qui montre comment déterminer les partitions de chaque entrée à modifier. J'avais besoin de toutes les connaissances ci-dessus pour réparer mon système cloné et, donc, je l'ai présenté comme une réponse complète pour fournir autant d'informations aux autres.
Starfry
8

Selon cette documentation non officielle sur les composants internes de BCD , les partitions du magasin BCD sont réellement identifiées par la signature du disque et le décalage de partition. Vous avez copié la signature du disque (octets MBR 440 à 443), mais vous avez probablement modifié les décalages de partition lorsque vous placez des partitions sur un disque plus petit. BOOTMGR n'est donc plus en mesure de trouver ces partitions.

Sergey Vlasov
la source
C'est intéressant et explique certainement pourquoi cela ne fonctionnerait pas - les décalages de partition seraient très certainement différents. Pourquoi-oh-pourquoi ce n'est pas documenté de manière plus formelle est la supposition de n'importe qui! Existe-t-il un moyen (officiel ou non officiel) accepté de "réparer" cela sur un disque cloné?
Starfry
Je suppose que la manière officielle est de «démarrer à partir d'un disque de réparation système préalablement préparé (ou d'un véritable support d'installation, si vous l'avez et non d'un support de récupération DOEM) et d'exécuter la réparation de démarrage ; en cas d'échec, réinstallez le système d'exploitation ». Je ne sais pas si Startup Repair récupérerait également XP dans votre cas.
Sergey Vlasov
@starfry Il existe de nombreux éditeurs BCD, y compris celui en ligne de commande intégré ( bcdedit). Je préfère Visual BCD Editor moi-même. Si vous pouvez entrer dans un environnement Windows, Visual BCD facilite le paramétrage du périphérique de démarrage. Vous pouvez faire la même chose à partir du DVD de démarrage en ouvrant l'invite de commande (je pense que c'était F11 ou quelque chose) et en l'utilisant bcdedit. Je recommanderais de ne pas réparer le système si vous vous sentez prêt à le réparer manuellement, car j'ai déjà supprimé le système de récupération sur disque.
Bob
Merci sergey et @bob. J'ai accepté cette réponse parce qu'elle m'a conduit à bien comprendre ce qui se passe. J'ai documenté ce que je sais maintenant dans une réponse séparée.
Starfry
excusez mon ignorance, mais si @starfry est un octet pour la copie d'octets sur sda (pas sda1 la partition), mais sda sur le disque entier, alors pourquoi les décalages de partition seraient-ils différents?
barlop