Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 1172

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>Annexe A. - extinction de md0 chez Bohumil Chalupa</TITLE>
</HEAD>
<BODY>
<A NAME="Appendix-A"></A> <H1>7. <A NAME="s7"></A>Annexe A. - extinction de md0 chez Bohumil Chalupa</H1>
<P>
<A HREF="Root-RAID-HOWTO.html#toc7">Contenu de cette section</A></P>

<P>Voici le post de Bohumil Chalupa sur la liste Linux RAID concernant le
contournement du probl&egrave;me de mdstop avec RAID 1 + 5. Sa solution ne
consid&egrave;re pas la possibilit&eacute; d'une corruption du p&eacute;riph&eacute;rique RAID &agrave;
l'extinction. J'ai donc ajout&eacute; une simple comparaison d'&eacute;tat avec un
&eacute;tat de r&eacute;f&eacute;rence correct et connu au d&eacute;marrage. Ceci permet &agrave;
l'administrateur d'intervenir si quelque chose ne va pas bien avec un
disque dans une matrice. La description de ceci est dans le corps
principal de ce document.</P>
<P>(NdT : j'ai traduit le message parce qu'il est long et int&eacute;ressant,
celui en anglais se trouve bien &eacute;videmment dans la version d'origine
de ce HOWTO.)</P>
<P>
<PRE>
&gt; From: Bohumil Chalupa &lt;bochal@apollo.karlov.mff.cuni.cz&gt;
&gt;  
&gt; Je peux maintenant demarrer initrd et utiliser linuxrc pour demarrer
&gt; la matrice RAID 1, puis changer la racine en /dev/md0 avec succes.
&gt; 
&gt; Je ne connais pas, cependant, de maniere d'_arreter_ proprement la
&gt; matrice.
 
Bon. Je dois repondre moi-meme :-)
 
&gt; Date: Mon, 29 Dec 1997 02:21:38 -0600 (CST)
&gt; From: Edward Welbon &lt;welbon@bga.com&gt;
&gt; Subject: Re: dismounting root raid device
&gt; 
&gt; Pour les peripheriques md autres que RAID 0, il y a surement un etat
&gt; a sauvegarder qui n'est connu qu'une fois que toutes les ecritures
&gt; sont terminees. Un tel etat ne peut bien sur etre sauve a la racine
&gt; une fois qu'elle est montee en lecture seule. Dans ce cas, on
&gt; devrait pouvoir monter un systeme de fichiers &quot;X&quot; en ecriture sur la
&gt; racine en lecture seule et pouvoir ecrire sur &quot;X&quot; (je me rappelle
&gt; l'avoir fait pendant des operations de &quot;secours&quot;, mais pas dans une
&gt; procedure automatisee).
&gt; 
&gt; Le systeme de fichiers &quot;X&quot; serait je pense un peripherique de
&gt; demarrage a partir duquel le RAID (pendant l'execution de linuxrc a
&gt; travers initrd) irait prendre son etat initial. Heureusement RAID 0
&gt; ne demande pas d'ecrire un quelconque etat (bien qu'il serait utile
&gt; de pouvoir ecrire les sommes de verification (checksums) dans mdtab
&gt; apres un mdstop). En fin de compte, je bricolerai ceci mais ca ne
&gt; parait pas difficile bien que le &quot;diable&quot; se trouve toujours dans
&gt; les &quot;details&quot;.

Oui, c'est ca.
J'ai deja eu cette idee a l'esprit depuis quelques temps, mais je n'ai
pas eu le temps de l'essayer. Je l'ai fait hier, et ca marche.

Avec mon RAID 1 (miroir), je ne sauvegarde aucune somme de
verification ni donnees de superblock RAID. Je ne sauvegarde une
information que sur la partition de demarrage &quot;reelle&quot;, celle sur
laquelle le volume md racine etait remonte en lecture seule pendant
l'extinction. Alors, pendant le demarrage, le script linuxrc lance
mkraid --only-superblock quand il trouve cette information ; sinon, il
lance ckraid. Ceci veut dire que l'information du superblock RAID
n'est pas mise a jour pendant l'extinction ; elle est mise a jour au
demarrage. Ce n'est pas tres propre, j'en ai peur, :-( mais ca
fonctionne.

J'utilise Slackware et initrd.md d'Edward Welbon pour demarrer le
peripherique RAID a la racine.
Autant que je puisse m'en souvenir, les seuls fichiers modifies sont
mkdisk et linuxrc, et le script d'extinction /etc/rc.d/rc.6. Et
lilo.conf, bien sur.

J'annexe les parties importantes.

Bohumil Chalupa

--------------- mon.linuxrc suit -----------------
#!/bin/sh
# nous avons besoin de /proc
/bin/mount /proc 
# demarrer le peripherique md0. Laisser les scripts /etc/rc.d
s'occuper du reste. Nous devrions en faire le moins possible ici.
# ________________________________________
# test d'extinction du RAID 1 racine et recreation
# /start doit etre cree sur l'image rd dans mon.mkdisk
echo &quot;preparation de md0: montage de /start&quot;
/bin/mount /dev/sda2 /start -t ext2
echo &quot;lecture de l'etat sauvegarde de md0 dans /start&quot;
if [ -f /start/root.raid.ok ]; then
 echo &quot;RAID ok, modification du superblock&quot;
 rm /start/root.raid.ok
 /sbin/mkraid /etc/raid1.conf -f --only-superblock
else
 echo &quot;RAID pas propre, lancement de ckraid --fix&quot;
 /sbin/ckraid --fix /etc/raid1.conf
fi
echo &quot;demontage de /start&quot;
/bin/umount /start
# _________________________________________
#
echo &quot;ajout de md0 pour le systeme de fichiers racine&quot;
/sbin/mdadd /dev/md0 /dev/sda1 /dev/sdb1 
echo &quot;lancement de md0&quot;
/sbin/mdrun -p1 /dev/md0
# dire au noyau que nous voulons passer /dev/md0 comme peripherique
# racine, la valeur 0x900 vient de 256*numero_periph_majeur +
# numero_periph_mineur.
echo &quot;mise en place du vrai-periph-racine (real-root-dev)&quot;
/bin/echo 0x900&gt;/proc/sys/kernel/real-root-dev
# demontage de /proc pour que le disque RAM puisse etre enleve de la
# memoire
echo &quot;unmounting /proc&quot;
/bin/umount /proc
/bin/echo &quot;On peut normalement monter /dev/md0 (majeur 9, mineur 0) a la racine&quot;
exit
--------------- fin de mon.linuxrc ----------------------------------


----------- extrait de /etc/rc.d/rc.6 suit -----------------
  # arreter la swap, puis demonter les systemes de fichiers locaux
  echo &quot;Extinction de la swap.&quot;
  swapoff -a
  echo &quot;Demontage des systemes de fichiers locaux.&quot;
  umount -a -tnonfs
  # Ne pas remonter les volumes UMSDOS racine :
  if [ ! &quot;`mount | head -1 | cut -d ' ' -f 5`&quot; = &quot;umsdos&quot; ]; then
    mount -n -o remount,ro /
  fi

  # Sauvegarder l'etat RAID
  echo &quot;Sauvegarde de l'etat RAID&quot;
  /bin/mount -n /dev/sda2 /start -t ext2
  touch /start/root.raid.ok
  /bin/umount -n /start

-------------- fin de l'extrait de rc.6 ------------------------


------------------ une partie de mon.mkdisk suit ----------------------
#
#  maintenant que le systeme de fichiers est pret a etre rempli, nous
#  devons obtenir quelques repertoires importants. J'ai eu des
#  problemes sans fin jusqu'a ce que je cree un fichier mtab tout
#  neuf. Dans mon cas, il est pratique de recopier /etc/mdtab, de
#  cette maniere je peux activer md avec un simple &quot;/sbin/mdadd -ar&quot;
#  dans linuxrc.
#
cp -a $ROOT/etc $MOUNTPNT 2&gt;cp.stderr 1&gt;cp.stdout
rm -rf $MOUNTPNT/etc/mtab
rm -rf $MOUNTPNT/etc/ppp*
rm -rf $MOUNTPNT/etc/termcap
rm -rf $MOUNTPNT/etc/sendmail*
rm -rf $MOUNTPNT/etc/rc.d
rm -rf $MOUNTPNT/etc/dos* 
cp -a $ROOT/sbin $ROOT/dev $ROOT/lib $ROOT/bin $MOUNTPNT 2&gt;&gt;cp.stderr
1&gt;&gt;cp.stdout
# _____________________________________________________________________
#  RAID: aura besoin de mkraid et ckraid
cp -a $ROOT/usr/sbin/mkraid $ROOT/usr/sbin/ckraid $MOUNTPNT/sbin
2&gt;&gt;cp.stderr 1&gt;&gt;cp.stdout
#
---------------------------------------------------------------------
#  il semble qu'init ne voudra pas jouer sans utmp. on peut probablement
#  reduire ceci de beaucoup. aucune idee de ce que le vrai bug etait 8-).
#
mkdir $MOUNTPNT/var $MOUNTPNT/var/log $MOUNTPNT/var/run $MOUNTPNT/initrd
touch $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
chmod a+r $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab
ln -s /var/run/utmp $MOUNTPNT/var/log/utmp
ln -s /var/log/utmp $MOUNTPNT/etc/utmp
ls -lstrd $MOUNTPNT/etc/utmp $MOUNTPNT/var/log/utmp $MOUNTPNT/var/run/utmp
#
#  puisque je voulais changer le point de montage, j'avais besoin de
#  ceci bien que je suppose que j'aurais pu faire un &quot;mkdir /proc&quot;
#  dans linuxrc.
#
mkdir $MOUNTPNT/proc
chmod 555 $MOUNTPNT/proc
#
#  ------------------------------------------------------
#  nous monterons le vrai peripherique de demarrage sur /start de
#  maniere temporaire pour verifier l'etat du RAID racine sauve au
#  moment de l'extinction
#
mkdir $MOUNTPNT/start
#  -------------------------------------------------------
#
#  besoin de linuxrc (c'est, apres tout, le but de l'exercice).
#
if [ -x ./my.linuxrc ]; then
  cp -a ./my.linuxrc $MOUNTPNT/linuxrc
  chmod 777 $MOUNTPNT/linuxrc
else
   ln -s /bin/sh $MOUNTPNT/linuxrc
fi
#
----------------- fin de la partie de mon.mkdisk -----------------
</PRE>
</P>
<P></P>
<HR>
<P>
Chapitre <A HREF="Root-RAID-HOWTO-8.html">suivant</A>,
Chapitre <A HREF="Root-RAID-HOWTO-6.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="Root-RAID-HOWTO.html#toc7">ce chapitre</A>,
 <A HREF="Root-RAID-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="Root-RAID-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>