7 votes

Mdadm raid 1 grub uniquement sur sda

Je viens de terminer la configuration d'un serveur CentOS 6.3 64 bits avec mdadm, cependant une ampoule s'est allumée et j'ai réalisé que grub ne serait installé que sur le premier lecteur, ce qui est aussi utile qu'un cendrier sur une moto.

J'ai jeté un œil pour confirmer mes soupçons :

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

J'ai donc mis à jour ma table de périphériques comme suit :

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

(Remarque : l'entrée (hd1) a été ajoutée par moi)

ensuite j'ai essayé d'installer grub sur /dev/sdb

Et j'ai obtenu :

grub> root (hd1,0)
root (hd1,0)
 Le type de système de fichiers est ext2fs, type de partition 0x83
grub> setup (hd1)
setup (hd1)
 Vérification de la présence de "/boot/grub/stage1"... non
 Vérification de la présence de "/grub/stage1"... non

Erreur 15t : Fichier non trouvé

J'ai donc fait quelques recherches (malheureusement, Google a juste fait un bon travail en récupérant des centaines d'exemples d'installation de grub qui ne sont pas utiles ici)

Après avoir trouvé quelques indices, j'ai essayé :

# grub-install --recheck /dev/sdb

Analyse des périphériques pour deviner les lecteurs BIOS. Cela peut prendre du temps.
Installation terminée. Aucune erreur signalée.
Voici le contenu de la table des périphériques /boot/grub/device.map.
Vérifiez si c'est correct ou non. Si l'une des lignes est incorrecte,
corrigez-la et relancez le script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

# grub-install /dev/sdb
Installation terminée. Aucune erreur signalée.
Voici le contenu de la table des périphériques /boot/grub/device.map.
Vérifiez si c'est correct ou non. Si l'une des lignes est incorrecte,
corrigez-la et relancez le script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb

Cela suggère un peu que grub est maintenant installé sur /dev/sdb également, cependant si je jette un autre coup d'œil, j'obtiens toujours :

grub> find /grub/stage1
find /grub/stage1
 (hd0,0)

sorties parted pour les 2 lecteurs :

SDA

Table de partitions : gpt

Numéro  Début   Fin     Taille  Système de fichiers  Nom  Drapeaux
 1      17,4ko  500MB   500MB   ext3         1     boot
 2      500MB   81,0Go  80,5Go               2     raid
 3      81,0Go  85,0Go  4000MB               3     raid
 4      85,0Go  3001Go  2916Go               4     raid

SDB

Table de partitions : gpt

Numéro  Début   Fin     Taille  Système de fichiers  Nom  Drapeaux
 1      17,4ko  500MB   500MB   ext3         1
 2      500MB   81,0Go  80,5Go               2     raid
 3      81,0Go  85,0Go  4000MB               3     raid
 4      85,0Go  3001Go  2916Go               4     raid

Et mdadm mdstat :

Personnalités : [raid1]
md1 : actif raid1 sdb3[1] sda3[0]
      3905218 blocs super 1.1 [2/2] [UU]

md2 : actif raid1 sdb4[1] sda4[0]
      2847257598 blocs super 1.1 [2/2] [UU]

md0 : actif raid1 sda2[0] sdb2[1]
      78612189 blocs super 1.1 [2/2] [UU]

Est-ce que quelqu'un peut éclairer la situation, j'ai l'impression d'être à 99% là pour le moment et de manquer quelque chose de bien évident.

Merci.

mise à jour d'édition :

# df -h
Système de fichiers      Taille Utilisé Dispo Uti% Monté sur
/dev/md0               74G   18G   53G  25% /
tmpfs                 580M     0  580M   0% /dev/shm
/dev/sda1             462M   98M  341M  23% /boot
xenstore              580M   64K  580M   1% /var/lib/xenstored

/ est sur md0 qui est composé de sda2 et sdb2 le swap est md1 qui est sda3 et sdb3 md2 est LVM cependant /boot est seulement sur /sda1

Je suppose que c'est le problème, la résolution serait de créer md4 et de le faire contenir sda1 et sdb1

Peut-être que j'ai un peu confondu les choses dans ma tête mais je pensais que grub n'était pas installé sur une partition mais sur les premiers blocs du disque c'est-à-dire sda ou hd0/1

Toute clarification et conseil sont appréciés.

4voto

Ceci devrait être votre problème

root (hd1,0)
 Type de système de fichiers est ext2fs, type de partition 0x83

Suivez les étapes suivantes :

  • Créez les 2 partitions /boot sur /dev/sda1 et /dev/sdb1 - type fd (détection automatique Linux raid) - utilisez votre outil préféré (fdisk, cfdisk, gparted, ...) (fd00 pour GPT)

  • N'oubliez pas d'activer le drapeau d'amorçage sur les deux partitions, sda1 et sdb1 (non pour GPT)

  • Forcer les disques à être un tout nouveau raid :

    mdadm --zero-superblock /dev/sda1 
    mdadm --zero-superblock /dev/sdb1
  • Lors de la création des métadonnées raid qui seront votre partition /boot, utilisez la version 0.9. Linux ne peut pas détecter les versions plus récentes (sans ramdisk).

    mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1 --metadata=0.9
  • Formatez en utilisant ext2 ou ext3

  • Installez votre distribution Linux préférée, SANS formater le /boot

Après le premier démarrage de votre distribution :

  • Corrigez votre /etc/fstab pour pointer /boot vers /dev/md0 (cela ne sera peut-être pas nécessaire)

  • Installez grub sur les 2 disques MBR

    # grub /dev/sda
     grub> root (hd0,0)
     grub> setup (hd0)
     grub> quit
     quit
    
    # grub /dev/sdb
     grub> root (hd1,0)
     grub> setup (hd1)
     grub> quit
     quit
  • Modifiez votre chargeur de démarrage (instructions pour Grub1)

  • Recherchez la ligne "par défaut" et ajoutez l'option "fallback" ci-dessous

    vi /boot/grub/menu.lst
    default 0
    fallback 1
  • Ajoutez une autre entrée à votre chargeur de démarrage (encore une fois, dans mon cas j'ai choisi Grub1 car il est moins compliqué et suffisant pour mes besoins), une pour chacune des partitions d'amorçage différentes qui sont membres du raid :

    title           Debian GNU/Linux, kernel 2.6.32-5-686  (par défaut)
    root            (hd0,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686
    
    title           Debian GNU/Linux, kernel 2.6.32-5-686  (fallback)
    root            (hd1,0)
    kernel          /vmlinuz-2.6.32-5-686 root=/dev/mapper/vg-root ro quiet
    initrd          /initrd.img-2.6.32-5-686 
  • Notez que dans mon cas, j'ai une couche LVM sur mon raid md /.

Fini. Cela devrait être suffisant pour avoir un chargeur de démarrage "redondant".

1voto

honzas Points 551

Que vous souhaitiez mapper ces deux lecteurs sur un autre tableau raid1 vous appartient. C'est un choix légitime car vous pourriez alors installer directement grub sur md4 et éviter la corvée de gérer les deux installations manuellement. Je l'ai fait™.

Dans mon expérience, le fichier de map de périphérique est largement sans pertinence et son comportement (comment grub le lit) est au mieux imprévisible, voire arbitraire.

La commande device de l'invite de commandes grub est beaucoup plus fiable. Vous pouvez lire les informations d'aide à ce sujet, mais la syntaxe de base parle d'elle-même :

grub> device (hd0) /dev/md4

Après cela, /dev/md4 sera mappé en tant que hd0 dans la session grub en cours d'exécution, en ignorant le fichier de map de périphérique. À partir de là, on procéderait normalement avec root (hd0) et setup (hd0,x). La raison d'installer sur une partition est expliquée par Henry S.

Autant que je sache, la seule chose en plus du "code de démarrage" (stage1) qui est écrite dans les premiers 512 octets du lecteur (MBR) est le numéro de la partition où ce stage devrait chercher le menu.

Il est possible de faire des erreurs à ce niveau. On se retrouverait alors avec un invite de commande au lieu d'un menu après le POST, mais grub propose des commandes pour "initialiser" ce menu à partir d'une partition (fichier) différente de celle spécifiée lors de l'installation. Cela fonctionne généralement sans intervention cependant, car le "premier lecteur de démarrage" dans le BIOS sera détecté comme "hd0".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X