Jai une boîte virtuelle fonctionnant avec CentOS.
Jai attaché un nouveau disque virtuel à la VM CentOS existante et je « m jessaye maintenant dinstaller GRUB sur ce disque nouvellement attaché.
Plus tard, jouvrirai une deuxième VM avec un disque dur de démarrage nouvellement préparé avec un système de fichiers racine et un noyau personnalisés.
I ont essayé les étapes suivantes:
- Jai attaché un nouveau disque virtuel à la machine CentOS existante.
- Créé une nouvelle partition avec
fdisk /dev/sdb
. Lors du partitionnement, jai choisi les options partition primaire, partition numéro 1 et autres options par défaut. - Formaté le disque avec
mkfs.ext3 /dev/sdb1
. - Monté le disque sur
/media/new_drive
. - Installation de GRUB
grub-install /dev/sdb1 --root-directory=/media/new_drive/
.
Après cela, la deuxième VM avec le disque dur nouvellement préparé na pas démarré; Jai eu lerreur: could not read from the boot medium
. Il semble que le MBR ne soit pas mis à jour après grub-install
, mais je peux voir GRUB installé sous /boot/grub
sur le nouveau lecteur.
Mais le pire, cest quil a corrompu mon CentOS GRUB existant: La VM CentOS se bloque et affiche un écran noir avec le seul texte étant GRUB
.
Pourquoi grub-install /dev/sdb1
ne modifie-t-il pas le MBR de sdb1? Nest-ce pas la bonne façon dinstaller GRUB sur un nouveau lecteur?
Commentaires
Answer
Je « ne suis pas un expert de grub2 (désolé) mais essayez dajouter --skip-fs-probe
à votre ligne grub-install, jai trouvé que cela empêche la création de /boot/grub/device.map
qui peut provoquer le démarrage à une invite grub. Je pense que sans cela paramètre grub-install, au lieu de faire ce que vous lui dites, pense quil est plus intelligent que vous, et peut faire quelque chose de différent.
Une autre chose est dêtre sûr que vous utilisez le bon grub-install (cest-à-dire pour grub2 et pas pour grub dorigine). Ce nest pas un problème si vous êtes à lintérieur de Centos mais avec SystemRecoveryCD les deux versions sont disponibles et vous devez donc utiliser grub2-install
. Jai appris à la dure …
Et comme @wurtel la souligné (bravo), vous devez spécifier un lecteur et non une partition. Grub2 installe dans le secteur 0 du lecteur de disque entier, et ce « stub » est ce qui sexécute au moment du démarrage, mais il doit savoir où se trouve le disque, il doit installer les fichiers pour la prochaine étape de démarrage – cest ce que le --root-directory
est pour. (Je pense.)
Lire man grub-install
et googler je vois que --root-directory
nest pas vraiment destiné à être utilisé pour grub2 versions 1.99 ++, bien que cela fonctionne selon mon expérience. Vous êtes censé utiliser --boot-directory
et faire référence au répertoire de démarrage réel, donc cela vous donnerait:
grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot
Commentaires
- Ma première tentative sest déroulée sans partitionnement ni formatage
grub-install /dev/sdb
mais cela a donné une erreur. Plus tard, jai essayé avec un disque partitionné et formaté, avec un disque formaté que jutilisais toujours / dev / sdb1, jessaierai avec –skip-fs-probe - @Renjith oh et le répertoire racine devrait faire référence à le point de montage monté lorsque vous exécutez grub-install, vous devez donc monter la partition sur le nouveau lecteur, par exemple à
/mnt/sys2
, puis dans votre ligne grub-install, spécifiez--root-directory=/mnt/sys2
. Cela ‘ est contre-intuitif (comme beaucoup de trucs de grub je pense) mais cest ‘ comment cela fonctionne. - jai quelque peu modifié ma réponse …
- Le grub que jutilise actuellement 0.97, ce qui ‘ t prend en charge –skip-fs-probe . mais sans cela, cela a fonctionné. sdb1 était lerreur.
- ok heureux que vous layez résolu, cest lancien grub pas le plus récent ‘ brillant ‘ grub2. Je nai ‘ pas réalisé que RedHat était si lent à passer à grub2. CentOS 7 utilise grub2 mais CentOS 6 (et versions antérieures) utilise grub.
Réponse
Voici comment jai déplacé une installation Debian constituée dune partition de démarrage /boot
et une partition racine /
sur un nouveau lecteur et lont rendu amorçable à laide de GNU GRUB :
Cloner des partitions
- En utilisant le CD live GParted , créez la partition de démarrage et racine sur le nouveau
- À laide dune console racine dans GParted, montez lancienne partition de démarrage (disons-le
/dev/sda1
) et la nouvelle partition (/dev/sdb1
):mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
- Copiez les données de lancienne partition de démarrage vers la nouvelle:
cp -afv /mnt/oldBoot /mnt/newBoot
. Explication decp -afv
:-
a
signifie » archive » ce qui signifie:- ne pas déréférencer les liens
- copier récursivement (comme
-R
) - conserver tous les attributs (horodatage, propriétaire, autorisation)
-
f
: forcer, si un fichier de destination existant ne peut pas être ouvert, supprimez-le et réessayez -
v
: verbeux, expliquez ce qui est fait
-
- Cela générera une sortie sur votre console vous indiquant quel fichier est actuellement copié et si
cp
progresse - Montez et copiez les fichiers de votre ancienne partition racine vers la nouvelle:
- Par sécurité:
umount /mnt/oldBoot && umount /mnt/newBoot
- Montez lancienne et la nouvelle partition racine (en supposant quelle « s
/dev/sda2
et/dev/sdb2
):mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
- Copiez les données a de lancienne partition racine vers la nouvelle partition racine:
cp -afv /mnt/oldRoot /mnt/newRoot
- Par sécurité:
- Modifiez le table du système de fichiers qui définit quelles partitions sont montées au démarrage (jutiliserai Vim pour cela):
-
vi /etc/fstab
-
Vous remarquerez que vos anciennes partitions sont référencées ici. Utilisez plutôt les UUID des nouvelles partitions
-
Vous pouvez insérer temporairement tous les UUID dans fstab pour faciliter le copier-coller avec
:r !blkid
-
Utilisez les UUID de vos nouvelles partitions pour changer les entrées dans fstab. Ils devraient ressembler à ceci:
`# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2`
- Supprimez la sortie de
blkid
de fstab que vous avez inséré plus tôt avec:r !blkid
- Supprimez la sortie de
-
Installer GRUB
-
Montez les systèmes de fichiers virtuels du live CD GParted:
mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys
-
Créer les utilitaires GRUB du live CD GParted disponibles sur la partition racine:
mount --bind /usr/ /mnt/newRoot/usr
-
Montez la partition de démarrage sur la partition racine depuis GRUB stockera sa configuration dans
/boot
:mount /dev/sdb1 /mnt/newRoot/boot
-
Utilisez
chroot /mnt/newRoot
pour faire de la nouvelle partition racine temporairement la racine du système de fichiers -
Créez un fichier de configuration GRUB à
/boot/grub/grub.cfg
en utilisantupdate-grub2
-
Installez GRUB sur le nouveau lecteur:
grub-install /dev/sdb
. Vous ne devez pas « t spécifier de numéro de partition ici -
Revenir au système de fichiers du live CD GParted:
exit
-
Démonter les partitions:
umount /mnt/newRoot/*
-
Arrêter la machine
-
Si plusieurs lecteurs sont connectés, assurez-vous que le lecteur le plus récent vient en premier dans lordre de démarrage
-
Démarrer la machine
Ces instructions sont inspirées de celles de oaktreepeak.com .
Vous pouvez également donner Clonezilla a essayer datteindre la même chose.
/dev/sdb1
ne lest pas là où le BIOS recherche le MBR, il ‘ se trouve dans/dev/sdb
cest-à-dire le tout premier secteur du disque.grub-install /dev/sdb --root-directory=/media/new_drive/
à la place sdb1