Comment les md
appareils sont-ils assemblés au démarrage dans Ubuntu? Est-ce /etc/mdadm/mdadm.conf
vraiment le facteur pertinent ici?
Mon mdadm.conf
est sain et je l'ai vérifié pendant que j'étais dans l'environnement du CD de secours. Lors de l'exécution, mdadm -A --scan
il trouve et attribue les noms de périphérique comme vous le souhaitez. Le mdadm.conf
contient AUTO -all
pour supprimer tout automatisme de l'assemblage des tableaux.
Ce que je dois faire est de pouvoir assembler automatiquement les md
périphériques comme indiqué mdadm.conf
au moment du démarrage ou que lors de l'assemblage, il honore la super-minor
valeur du tableau 0.9 et name
(apparemment <hostname>:<super-minor>
) pour les tableaux 1.2 et fait la bonne chose sans mdadm.conf
. Quelle pièce de puzzle me manque?
J'ai le problème suivant. Il y a deux md
périphériques avec RAID1 ( md0
et md1
) et un avec RAID6 ( md2
). Je me réfère à eux par les noms d'appareils désirés . md0
a la version 0.9 des métadonnées, les deux autres ont la version 1.2. md0
les cartes vers /
et les deux autres ne sont pas pertinentes pour le démarrage .
Le lecteur de démarrage est partitionné GPT. Il y a une colle "BIOS Boot Partition" ( sda1
) dessus. grub-install --no-floppy /dev/sda
signale le succès.
md0 == sda3 + sdb3
md1 == sda2 + sdb2
md2 == sdc + sdd + sde + sdf + sdg + sdh
sda1
etsdb1
sont "BIOS Boot Partition" chacun
GRUB2 est heureux avec le /boot/grub/devicemap
je lui ai donné et j'ajouté part_gpt
, raid
, mdraid09
et ext2
aux modules de pré - charge dans GRUB2.
Étant donné que j'avais toujours mon volume racine dans l'environnement de sauvetage, j'ai simplement tout monté, puis je l'ai chroot
édité:
mkdir /target
mount /dev/md0 /target
mount -o bind /dev /target/dev
mount -o bind /dev/pts /target/dev/pts
mount -o bind /sys /target/sys
mount -o bind /proc /target/proc
chroot /target /bin/bash
De là, j'ai réinitialisé le super-minor
on md0
(avec les métadonnées 0.9) et le name
on md1
et md2
. J'ai également vérifié que cela fonctionnait en utilisant mdadm --detail ...
. A part ça, j'ai ajusté /etc/default/grub
, couru update-grub
et aussi grub-install --no-floppy /dev/sda
et grub-install --no-floppy /dev/sdb
.
Après cela, au démarrage, je suis toujours tombé dans le initramfs
shell de sauvetage, car le système de fichiers racine n'a pas pu être monté. La raison, après vérification /proc/mdstat
semble être que l' md
appareil respectif n'est même pas assemblé et exécuté. Sans oublier que les deux autres disques (méta-données version 1.2) reçoivent un numéro de périphérique quelque part dans la plage 125..127.
Remarque: GRUB2 provient du disque de démarrage. Donc, au moins, il a été correctement intégré. Le problème est la transition du rootfs
système de fichiers racine initial vers le système racine approprié.
/dev/mdX
exactement pour cette raison. Utilisez/dev/md/NAME
plutôt. Cela ne changera jamais./etc/fstab
. La configuration ne repose pas sur les noms, je voudrais toujours qu'ils soient comme ça;)Not to mention that the other two (meta-data version 1.2) drives receive a device number somewhere in the 125..127 range
. Je ne sais pas assez comment ubuntu assemble les volumes de raid pour répondre au plus gros problème.Réponses:
Processus de démarrage de base
Ver
Il existe un mode de repli, lorsque Grub ne peut pas réellement lire le système de fichiers, soit parce qu'il n'y avait pas assez d'espace pour incorporer tout ce code dans l'enregistrement de démarrage, soit parce qu'il ne connaît pas le système de fichiers ou les couches sous-jacentes. Dans ce cas, GRUB incorpore une liste de secteurs et leur lit le code. C'est beaucoup moins robuste et mieux vaut éviter. Il peut même être capable de faire du noyau et des initramfs comme ça (pas sûr).
Noyau
Le noyau prend alors le contrôle et fait beaucoup d'init de matériel de base. Cette étape est assez rapide. Ensuite, le noyau décompresse les initramfs dans un tmpfs et recherche un
/init
sur ce tmpfs. Il s'exécute ensuite (dans le sens normal du terme, le noyau est en cours d'exécution)/init
. Il s'agit, en passant, d'un vieux script shell simple.Initramfs
Vous pouvez extraire les initramfs à la main en faisant quelque chose comme
mkdir /tmp/foo; cd /tmp/foo; zcat /boot/initrd.img-3.8-trunk-amd64 | cpio -idmv
.L'initramfs est responsable du chargement de tous les pilotes, du démarrage d'udev et de la recherche du système de fichiers racine. C'est l'étape qui échoue pour vous - il ne peut pas trouver le système de fichiers racine, donc il se libère.
Une fois initramfs terminé, le système de fichiers racine est monté et passe le contrôle à / sbin / init.
Démarrage du système
À ce stade, votre init prend le relais - je pense qu'Ubuntu utilise actuellement upstart.
Qu'est-ce qui est cassé
Je ne suis pas tout à fait sûr de ce qui est cassé (en partie, je l'avoue, car je suis beaucoup plus familier avec son fonctionnement sur Debian qu'Ubuntu, bien que son similaire), mais j'ai quelques suggestions:
mdadm.conf
. Vous devrez peut-être simplement exécuterupdate-initramfs -u
pour le réparer.la source
D'accord, j'ai découvert qu'il me manquait simplement une pièce. Les
initrd
images n'avaient pas été mises à jour après avoir bricolémdadm.conf
.Alors qu'est-ce que j'ai fait?
J'ai démarré dans le système de secours du CD d'installation d'Ubuntu Server. Choisissez d'exécuter un shell à partir de l'environnement d'installation et de ne pas utiliser de système de fichiers racine. Ensuite (commentaires précédés de
#
):Cela semble compliqué, mais peut aussi être fait avec une
bash
doublure (quoique longue):Cela utilise les noms actuels des
md
périphériques et leurs UUID et crée undevicemap
pour la lecture de GRUB2. Donc, en supposant que ce qui précède a été fait correctement, vous devriez déjà avoir les noms de périphérique corrects.Plus loin:
Assurez-vous qu'il contient:
si vous avez configuré votre partition
/
ou/boot
pour qu'elle soit la version 1.2 des métadonnées, utilisezmdraid1x
plutôt quemdraid09
.Plus loin:
Cette étape ci-dessus était le lien manquant . Cela garantit apparemment que le
mdadm.conf
prend effet au démarrage.Après cela, quittez le
chroot
et redémarrez.la source