|
このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
Nous supposerons que le lecteur est familier avec les divers types d'impl駑entation RAID, leurs avantages et inconv駭ients. Ceci n'est sunsite.unc.edu/mdw/HOWTO/ Disponible en SGML et HTML.
RAID 1 de 6 Go tournant sur un Pentium 166 avec 128 Mo de RAM, il faut au moins une demi-heure pour faire le ckraid :-( apr鑚 chaque red駑arrage.La solution de contournement stocke l'騁at de la matrice au moment de s'assurer de la pr馗ision des informations document馥s ici, l'auteur / 馘iteur / mainteneur ne prend AUCUNE RESPONSABILITノ sur toute erreur ou pour tout dommage, direct ou en d馗oulant, r駸ultant de l'utilisation des informations document馥s ici.
2. Ce dont vous avez besoin AVANT DE COMMENCER
Les paquetages dont vous avez besoin et la documentation qui r駱ond aux questions les plus fr駲uentes sur la mani鑽e d'installer et de linux-2.0.32 de sunsite
J'ai choisi d'inclure dans le noyau tous les morceaux n馗essaires au fonctionnement d鑚 le d駑arrage sans charger aucun module. L'image de http://www.realtime.net/~welbon/initrd.md.tar.gz
Veuillez lire :
/usr/src/linux/Documentation/initrd.txt
ainsi que la documentation et les pages de manuel qui accompagnent l'ensemble raidtools. En particulier, lisez man mdadd ainsi que le document QuickStart.RAID inclus dans le paquetage raidtools.
Cr馥z des points de montage sur lesquels travailler
mkdir mnt
mkdir mnt2
Cr馥z un fichier suffisamment grand pour effectuer l'installation du syst鑪e de fichiers. Il sera beaucoup plus grand que le syst鑪e de x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x [X] aaa_base Basic filesystem, shell, and utils - REQUIRED x x x x [X] bash GNU bash-1.14.7 shell - REQUIRED x x x x [X] devs Device files found in /dev - REQUIRED x x x x [X] etc System config files & utilities - REQUIRED x x x x [X] shadow Shadow password suite - REQUIRED x x x x [ ] ide Linux 2.0.30 no SCSI (YOU NEED 1 KERNEL) x x x x [ ] scsi Linux 2.0.30 with SCSI (YOU NEED 1 KERNEL) x x x x [ ] modules Modular Linux device drivers x x x x [ ] scsimods Loadable SCSI device drivers x x x x [X] hdsetup Slackware setup scripts - REQUIRED x x x x [ ] lilo Boots Linux (not UMSDOS), DOS, OS/2, etc. x x x x [ ] bsdlpr BSD lpr - printer spooling system x x x x [ ] loadlin Boots Linux (UMSDOS too!) from MS-DOS x x x x [ ] pnp Plug'n'Play configuration tool x x x x [ ] umsprogs Utilities needed to use the UMSDOS filesystem x x x x [X] sysvinit System V-like INIT programs - REQUIRED x x x x [X] bin GNU fileutils 3.12, elvis, etc. - REQUIRED x x x x [X] ldso Dynamic linker/loader - REQUIRED x x x x [ ] ibcs2 Runs SCO/SysVr4 binaries x x x x [X] less A text pager utility - REQUIRED x x x x [ ] pcmcia PCMCIA card services support x x x x [ ] getty Getty_ps 2.0.7e - OPTIONAL x x x x [X] gzip The GNU zip compression - REQUIRED x x x x [X] ps Displays process info - REQUIRED x x x x [X] aoutlibs a.out shared libs - RECOMMENDED x x x x [X] elflibs The ELF shared C libraries - REQUIRED x x x x [X] util Util-linux utilities - REQUIRED x x x x [ ] minicom Serial transfer and modem comm package x x x x [ ] cpio The GNU cpio backup/archiving utility x x x x [X] e2fsbn Utilities for the ext2 file system x x x x [X] find GNU findutils 4.1 x x x x [X] grep GNU grep 2.0 x x x x [ ] kbd Change keyboard mappings x x x x [X] gpm Cut and paste text with your mouse x x x x [X] sh_utils GNU sh-utils 1.16 - REQUIRED x x x x [X] sysklogd Logs system and kernel messages x x x x [X] tar GNU tar 1.12 - REQUIRED x x x x [ ] tcsh Extended C shell version 6.07 x x x x [X] txtutils GNU textutils-1.22 - REQUIRED x x x x [ ] zoneinfo Configures your time zone x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x Dans l'ensemble 'AP', je n'utilise que 'JOE' et l'馘iteur que je pr馭鑽e, et 'MC', petit outil utile de gestion de fichiers. Choisissez les outils dont vous aurez besoin sur votre syst鑪e.
lqqqqqqqqq SELECTING PACKAGES FROM SERIES AP (APPLICATIONS) qqqqqqqqqk x x [ ] ispell The International version of ispell x x x x [ ] jove Jonathan's Own Version of Emacs text editor x x x x [ ] manpgs More man pages (online documentation) x x x x [ ] diff GNU diffutils x x x x [ ] sudo Allow special users limited root access x x x x [ ] ghostscr GNU Ghostscript version 3.33 x x x x [ ] gsfonts1 Ghostscript fonts (part one) x x x x [ ] gsfonts2 Ghostscript fonts (part two) x x x x [ ] gsfonts3 Ghostscript fonts (part three) x x x x [ ] jed JED programmer's editor x x x x [X] joe joe text editor, version 2.8 x x x x [ ] jpeg JPEG image compression utilities x x x x [ ] bc GNU bc - arbitrary precision math language x x x x [ ] workbone a text-based audio CD player x x x x [X] mc The Midnight Commander file manager x x x x [ ] mt_st mt ported from BSD - controls tape drive x x x x [ ] groff GNU troff document formatting system x x x x [ ] quota User disk quota utilities x x x x [ ] sc The 'sc' spreadsheet x x x x [ ] texinfo GNU texinfo documentation system x x x x [ ] vim Improved vi clone x x x x [ ] ash A small /bin/sh type shell - 62K x x x x [ ] zsh Zsh - a custom *nix shell x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj xDans l'ensemble 'N' je n'ai pris que TCP/IP. Ceci n'est pas vraiment vous voudrez quand m麥e installer le paquetage biff.
lqqqq SELECTING PACKAGES FROM SERIES N (NETWORK/NEWS/MAIL/UUCP) qqqqqk x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x [ ] apache Apache WWW (HTTP) server x x x x [ ] procmail Mail delivery/filtering utility x x x x [ ] dip Handles SLIP/CSLIP connections x x x x [ ] ppp Point-to-point protocol x x x x [ ] mailx The mailx mailer x x x x [X] tcpip TCP/IP networking programs x x x x [ ] bind Berkeley Internet Name Domain server x x x x [ ] rdist Remote file distribution utility x x x x [ ] lynx Text-based World Wide Web browser x x x x [ ] uucp Taylor UUCP 1.06.1 with HDB && Taylor configs x x x x [ ] elm Menu-driven user mail program x x x x [ ] pine Pine menu-driven mail program x x x x [ ] sendmail The sendmail mail transport agent x x x x [ ] metamail Metamail multimedia mail extensions x x x x [ ] smailcfg Extra configuration files for sendmail x x x x [ ] cnews Spools and transmits Usenet news x x x x [ ] inn InterNetNews news transport system x x x x [ ] tin The 'tin' news reader (local or NNTP) x x x x [ ] trn 'trn' for /var/spool/news x x x x [ ] trn-nntp 'trn' for NNTP (install 1 'trn' maximum) x x x x [ ] nn-spool 'nn' for /var/spool/news x x x x [ ] nn-nntp 'nn' for NNTP (install 1 'nn' maximum) x x3.6 Installation de Linux pthreads
Vous devez maintenant installer la biblioth鑷ue 'linuxthreads-0.71'. J'ai inclus un patch pour le Makefile de -------------------diff Makefile.old Makefile.raid----------------- 2a3,13 > # If you are building "linuxthreads" for installation on a mount > # point which is not the "root" partition, redefine 'BUILDIR' to > # the mount point to use as the "root" directory > # You may wish to do this if you are building an 'initial ram disk' > # such as used with bootable root raid devices. > # REQUIRES ldconfig version 1.9.5 or better > # do ldconfig -v to check > # > BUILDIR=/root/raidboot/mnt > #BUILDIR= > 81,82c92,93 < install pthread.h $(INCLUDEDIR)/pthread.h < install semaphore.h $(INCLUDEDIR)/semaphore.h --- > install pthread.h $(BUILDIR)$(INCLUDEDIR)/pthread.h > install semaphore.h $(BUILDIR)$(INCLUDEDIR)/semaphore.h 84c95 < test -f /usr/include/sched.h || install sched.h $(INCLUDEDIR)/sched.h --- > test -f $(BUILDIR)/usr/include/sched.h || install sched.h $(BUILDIR)$(INCLUDEDIR)/sched.h 86,89c97,103 < install $(LIB) $(LIBDIR)/$(LIB) < install $(SHLIB) $(SHAREDLIBDIR)/$(SHLIB) < rm -f $(LIBDIR)/$(SHLIB0) < ln -s $(SHAREDLIBDIR)/$(SHLIB) $(LIBDIR)/$(SHLIB0) --- > install $(LIB) $(BUILDIR)$(LIBDIR)/$(LIB) > install $(SHLIB) $(BUILDIR)$(SHAREDLIBDIR)/$(SHLIB) > rm -f $(BUILDIR)$(LIBDIR)/$(SHLIB0) > ln -s $(SHAREDLIBDIR)/$(SHLIB) $(BUILDIR)$(LIBDIR)/$(SHLIB0) > ifneq ($(BUILDIR),) > ldconfig -r ${BUILDIR} -n $(SHAREDLIBDIR) > else 91c105,106 < cd man; $(MAKE) MANDIR=$(MANDIR) install --- > endif > cd man; $(MAKE) MANDIR=$(BUILDIR)$(MANDIR) install
L'騁ape suivante est l'installation des outils RAID : raidtools-0.42.
Vous devez lancer le script "configure" pour faire pointer le Makefile vers le r駱ertoire de construction des fichiers ramdisk.
cd /usr/src/raidtools-0.42 configure --sbindir=/root/raidboot/mnt/sbin --prefix=/root/raidboot/mnt/usr make make installrm -r usr/share/locale rm -r usr/X* rm -r var/man rm -r var/log/packages rm -r var/log/setup rm -r var/log/disk_contents
La derni鑽e 騁ape copie simplement les p駻iph駻iques /dev/md* du syst鑪e de fichiers courant sur le syst鑪e de fichiers de secours. Vous pouvez les cr馥r avec mknod.
cp -a /dev/md* /root/raidboot/mnt/dev
Copiez le syst鑪e de fichiers sur un p駻iph駻ique plus petit pour le fichier initrd, 16 Mo devraient 黎re suffisants.
Cr馥z le syst鑪e de fichiers plus petit et montez-le
cd /root/raidboot
dd if=/dev/zero of=bare.fs bs=1024k count=16
cd /root/raidboot
umount mnt
umount mnt2
losetup -d /dev/loop0
losetup -d /dev/loop1
rm build
cp bare.fs rescue
gzip -9 bare.fs
cp -dp /etc/* mnt/etc
cp -dp /etc/rc.d/* mnt/etc/rc.d
mkdir mnt/lib/modules
cp -a /lib/modules/2.x.x mnt/lib/modules <--- votre noyau 2.x.x en cours
ノditez les fichiers suivantes pour les corriger pour votre syst鑪e de secours.
cd mnt
Non reseau
etc/fstab mettez en commentaire le montage des peripheriques root et raid
etc/mdtab devrait fonctionner
Reseau
etc/hosts
etc/resolv.conf
etc/hosts.equiv et fichiers lies
etc/rc.d/rc.inet1 adresses IP, masque, passerelle, etc. correctes
etc/rc.d/rc.S enlevez entierement la section sur l'etat du systeme de fichiers
de :
# Test to see if the root partition isread-only
a, mais n'incluant pas :
# remove /etc/mtab* so that mount will .....
ceci evite l'avertissement ennuyeux que
le disque RAM est monte en lecture/ecriture
etc/rc.d/rc.xxxxx d'autres si necessaire, voir plus bas
root/.rhosts si present
home/xxxx/xxxx d'autres si necessaire
ATTENTION : la procedure ci-dessus deplace vos fichiers de mot de
passe et shadow sur le disque de secours !!!
ATTENTION : vous ne voudrez pas faire ceci pour des raisons de securite
Cr馥z tous les r駱ertoires pour monter /dev/dsk... tels qu'ils peuvent
effacer. Je ne l'ai pas fait car cela compliquerait totalement cette
proc馘ure et la plupart des syst鑪es RAID ont suffisamment de disque
et de m駑oire. Si vous voulez encore diminuer la taille du syst鑪e de
fichiers, allez-y !
---------------------- linuxrc --------------------
#!/bin/sh
# ver 1.07 2-12-98
# monter le systeme de fichiers proc
/bin/mount /proc
# Ceci peut varier pour votre systeme.
# Monter les partitions DOS, essayer les deux
# au cas ou l'un des disques est mort
/bin/mount /dosa
/bin/mount /dosc
# Positionner un drapeau au cas ou le fichier d'etat RAID n'est pas
# trouve puis chercher le fichier d'etat sur les deux disques
RAIDOWN="raidstat.ro not found"
/bin/echo "Reading md0 shutdown status."
if [ -f /dosa/linux/raidstat.ro ]; then
RAIDOWN=`/bin/cat /dosa/linux/raidstat.ro`
RAIDREF=`/bin/cat /dosc/linux/raidgood.ref`
else
if [ -f /dosc/linux/raidstat.ro ]; then
RAIDOWN=`/bin/cat /dosc/linux/raidstat.ro`
RAIDREF=`/bin/cat /dosc/linux/raidgood.ref`
fi
fi
# Tester si l'extinction a ete propre avec des disques en etat de
# marche
if [ "${RAIDOWN} != ${RAIDREF}" ]; then
echo "ERROR ${RAIDOWN}"
# Utilisez les deux lignes suivantes pour SORTIR et laisser le secours
# tourner
/bin/echo 0x100>/proc/sys/kernel/real-root-dev
exit # laissant les fichier d'erreurs dans dosa/linux, etc.
fi
# La matrice RAID est propre, continuer en enlevant
# le fichier d'etat et en ecrivant un superblock propre
/bin/rm /dosa/linux/raidstat.ro
/bin/rm /dosc/linux/raidstat.ro
/sbin/mkraid /etc/raid1.conf -f --only-superblock
/bin/umount /dosa
/bin/umount /dosc
# Monter la matrice RAID
echo "Mounting md0, root filesystem"
/sbin/mdadd -ar
# S'il y a des erreurs, SORTIR et laisser le secours tourner
if [ $? -ne 0 ]; then
echo "RAID device has errors"
# Utilisez les trois lignes suivantes pour SORTIR
/bin/rm /etc/mtab # enlever le mtab mauvais
/bin/echo 0x100>/proc/sys/kernel/real-root-dev
exit
fi
# sinon annoncer au noyau de passer a /dev/md0 comme peripherique
# /root. La valeur 0x900 est le numero de peripherique calcule par :
# 256*numero_periph_majeur + numero_periph_mineur
/bin/echo 0x900>/proc/sys/kernel/real-root-dev
# demonter /proc pour liberer l'espace memoire du peripherique initrd
/bin/umount /proc
/bin/echo "/dev/md0 mounted as root"
exit
#------------------ end linuxrc ----------------------
Ajoutez 'linuxrc' au p駻iph駻ique de d駑arrage initrd.
cd /root/raidboot
chmod 777 linuxrc
cp -p linuxrc mnt
Pour terminer l'installation, modifiez les scripts rc pour sauvegarder
Puisqu'il ne reste plus de partition Linux libre sur le syst鑪e de production except馥 md0, les partitions DOS sont utilis馥s pour stocker l'騁at raidOK en lecture seule. J'ai choisi d'馗rire un fichiers racine ne se d駑ontera pas), ajoutez :
# le peripheriques racine reste monte en lecture seule
# les systemes de fichiers DOS sont en lecture/ecriture
mount -n -o remount,ro /
echo "Writing RAID read-only boot FLAG(s)."
mount -n /dosa
mount -n /dosc
# creer un drapeau RAID monte en lecture seule en double
# contenant l'etat d'extinction de la matrice RAID
echo ${RAIDSTATUS} > /dosa/linux/raidstat.ro
echo ${RAIDSTATUS} > /dosc/linux/raidstat.ro
umount -n /dosa
umount -n /dosc
# stoppe toutes les matrices RAID (sauf la racine)
echo "Stopping raid"
mdstop -a
Ceci arr黎era proprement tous les p駻iph駻iques RAID sauf la
sur la m麥e machine.
Modifiez le etc/fstab de secours si n馗essaire et assurez-vous que le mdtab de secours est correct.
Copiez maintenant la disquette de secours sur votre partition DOS et red駑arrant. Voyez les param鑼res loadlin sur le fichier DOS linux.bat dans ce qui suit.
Les disques que j'ai choisis pour mon syst鑪e sont bien plus grands utilitaires pour que je puisse modifier les param鑼res de d駑arrage de loadlin si n馗essaire, ce qui me permet de red駑arrer le syst鑪e Linux sur mon disque de d駱annage pendant que je fais des tests.
Le syst鑪e DOS contient cette arborescence pour Linux :
c:\linux.bat
c:\linux\loadlin.exe
c:\linux\zimage
c:\linux\rescue.gz
c:\linux\raidgood.ref
c:\linux\raidstat.ro (seulement a l'extinction)
linux.bat contient :
---------------------- linux.bat ---------------------------
rem fichier batch DOS d'exemple pour demarrer Linux
rem Demarrage du processus LOADLIN :
rem c:\linux\loadlin c:\linux\zimage root=/dev/ram0 ro ramdisk_size=16384 initrd=c:\linux\rescue.gz mem=131072k
c:\linux\loadlin c:\linux\zimage root=/dev/md0 ro ramdisk_size=16384 initrd=c:\linux\rescue.gz mem=131072k
rem -- ceci est mon systeme de developpement -- il s'en va plus tard
rem c:\linux\loadlin c:\linux\zimage root=/dev/hda3 ro noinitrd mem=131072k
------------------------------------------------------------
***** >> NOTE !! la seule difference entre forcer le lancement du
systeme de secours et le montage du peripherique RAID est le
parametre de loadlin.
root=/dev/ram0 pour le systeme de secours
root=/dev/md0 pour RAID
Avec root=/dev/ram0 les peripheriques RAID ne seront
pas montes et le systeme de secours tournera sans
conditions
mais ne fonctionne pas avec 'shutdown -r now').
4. Configuration du syst鑪e de production en RAID
4.1 Sp馗ifications du syst鑪e
Carte mere : Iwill P55TU double ide + adaptec scsi
Processeur : Intel P200
/dev/hda1 dos 16meg
* /dev/hda2 extended 126m
/dev/hda3 linux 126m partition racine pendant le developpement
/dev/hda4 linux 6+gig RAID 1
* /dev/hda5 linux 26m RAID 1 de test
* /dev/hda6 linux swap 100m
/dev/hdc1 est simplement une copie exacte de hda1 pour que cette
partition puisse etre activee si hda tombe en panne
* /dev/hdc2 extended 126m
/dev/hdc3 linux 126m /usr/src pendant le developpement
/dev/hdc4 linux 6+gig miroir RAID 1
* /dev/hdc5 linux 26m miroir RAID 1 de test
* /dev/hdc6 linux swap 100m
<bf/SYSTEME DE PRODUCTION/
/dev/hda1 dos 16meg
/dev/hda2 linux swap 126m
/dev/hda3 linux swap 126m
/dev/hda4 linux 6+gig RAID 1
/dev/hdc1 est simplement une copie exacte de hda1
/dev/hdc2 linux swap 126m
/dev/hdc3 linux swap 126m
mdadd -ar
Cr馥z et formatez le p駻iph駻ique RAID.
mkraid /etc/raid1.conf
mdcreate raid1 /dev/md0 /dev/hda4 /dev/hdc4
mdadd -ar
mke2fs /dev/md0
mkdir /md
mount -t ext2 /dev/md0 /md
Cr馥z les fichiers de r馭駻ence que reboot utilisera, ils peuvent 黎re
diff駻ents sur votre syst鑪e.
cat /proc/mdstat | grep md0 > /dosa/linux/raidgood.ref
cat /proc/mdstat | grep md0 > /dosc/linux/raidgood.ref
Utilisez Slackware 3.4 ou une autre distribution pour construire votre
syst鑪e d'exploitation.
setup
Sp馗ifiez 'md' comme cible, et comme source ce que vous utilisez
habituellement. S駘ectionnez et installez les ensembles de disques
int駻essants sauf pour le noyau. Configurez le syst鑪e, mais passez
les sections sur LILO et le d駑arrage du noyau. Sortez de setup.
Installez les 'pthreads'
cd /usr/src/linuxthreads-0.71
ノditez le Makefile et sp馗ifiez
BUILDIR=/md
make
make install
Installez les 'raidtools'
cd /usr/src/raidtools-0.42
configure --sbindir=/md/sbin --prefix=/md/usr
R駱arez l'erreur du make install des raidtools
cd /md/sbin
rm mdrun
rm mdstop
ln -s mdadd mdrun
ln -s mdadd mdstop
Cr馥z /dev/mdx
cp -a /dev/md* /md/dev
Ajoutez la configuration syst鑪e du syst鑪e en cours (ignorez les
erreurs).
cp -dp /etc/* mnt/etc
cp -dp /etc/rc.d/* mnt/etc/rc.d (incluez le nouveau rc.6)
mkdir mnt/lib/modules
cp -a /lib/modules/2.x.x mnt/lib/modules <--- votre 2.x.x en cours
ノditez les fichiers suivants pour les corriger pour votre syst鑪e de
fichiers
cd /md
Non reseau
etc/fstab correct pour les peripheriques racine reelle et RAID
etc/mdtab devrait etre correct
Reseau
etc/hosts
etc/resolv.conf
etc/hosts.equiv et fichiers associes
etc/rc.d/rc.inet1 adresses IP, masque, passerelle, etc. correctes
etc/rc.d/rc.S enlevez la section entiere sur l'etat du systeme de fichiers
a partir de :
# Test to see if the root partition isread-only
jusqu'a mais ne comprenant pas :
# remove /etc/mtab* so that mount will .....
Ceci evite l'avertissement ennuyeux que
le disque RAM est monte en lecture/ecriture
etc/rc.d/rc.xxxxx d'autres si necessaire
root/.rhosts s'il existe
home/xxxx/xxxx d'autres si necessaire
ATTTENTION : La procedure ci-dessus deplace vos fichiers de
mot de passe et shadow sur le nouveau systeme
de fichiers !!!
ATTENTION : Vous n'aurez pas envie de faire ceci pour des
raisons de securite
Cr馥z tous les r駱ertoires pour monter /dev/disk... qui pourraient
黎re n馗essaire compte-tenu de votre syst鑪e. Le mien n馗essite :
cd /md <--- nouvelle racine du systeme de fichiers
fait ceci qu'une fois !
Michael Robinton
Michael@bzs.org
7. Annexe A. - extinction de md0 chez Bohumil Chalupa
(NdT : j'ai traduit le message parce qu'il est long et int駻essant,
celui en anglais se trouve bien 騅idemment dans la version d'origine
de ce HOWTO.)
> From: Bohumil Chalupa <bochal@apollo.karlov.mff.cuni.cz>
>
> Je peux maintenant demarrer initrd et utiliser linuxrc pour demarrer
> la matrice RAID 1, puis changer la racine en /dev/md0 avec succes.
>
> Je ne connais pas, cependant, de mani鑽e d'_arreter_ proprement la
> matrice.
Bon. Je dois repondre moi-meme :-)
> Date: Mon, 29 Dec 1997 02:21:38 -0600 (CST)
> From: Edward Welbon <welbon@bga.com>
> Subject: Re: dismounting root raid device
>
> Pour les peripheriques md autres que RAID 0, il y a surement un etat
> a sauvegarder qui n'est connu qu'une fois que toutes les ecritures
> sont terminees. Un tel etat ne peut bien sur etre sauve a la racine
> une fois qu'elle est montee en lecture seule. Dans ce cas, on
> devrait pouvoir monter un systeme de fichiers "X" en ecriture sur la
> racine en lecture seule et pouvoir ecrire sur "X" (je me rappelle
> travers initrd) irait prendre son etat initial. Heureusement RAID 0
> ne demande pas d'ecrire un quelconque etat (bien qu'il serait utile
> de pouvoir ecrire les sommes de v駻ification (checksums) dans mdtab
> apres un mdstop). En fin de compte, je bricolerai ceci mais ca ne
> parait pas difficile bien que le "diable" se trouve toujours dans
> les "details".
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 "reelle", 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 p駻iph駻ique 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 "preparation de md0: montage de /start"
/bin/mount /dev/sda2 /start -t ext2
echo "lecture de l'etat sauvegarde de md0 dans /start"
if [ -f /start/root.raid.ok ]; then
echo "RAID ok, modification du superblock"
rm /start/root.raid.ok
/sbin/mkraid /etc/raid1.conf -f --only-superblock
else
echo "RAID pas propre, lancement de ckraid --fix"
/sbin/ckraid --fix /etc/raid1.conf
fi
echo "demontage de /start"
/bin/umount /start
# _________________________________________
#
echo "ajout de md0 pour le systeme de fichiers racine"
/sbin/mdadd /dev/md0 /dev/sda1 /dev/sdb1
echo "lancement de md0"
/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 "mise en place du vrai-periph-racine (real-root-dev)"
/bin/echo 0x900>/proc/sys/kernel/real-root-dev
# demontage de /proc pour que le disque RAM puisse etre enleve de la
# memoire
echo "unmounting /proc"
/bin/umount /proc
/bin/echo "On peut normalement monter /dev/md0 (majeur 9, mineur 0) a la racine"
exit
--------------- fin de mon.linuxrc ----------------------------------
----------- extrait de /etc/rc.d/rc.6 suit -----------------
# arreter la swap, puis demonter les systemes de fichiers locaux
echo "Extinction de la swap."
swapoff -a
echo "Demontage des systemes de fichiers locaux."
umount -a -tnonfs
# Ne pas remonter les volumes UMSDOS racine :
if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
mount -n -o remount,ro /
fi
# Sauvegarder l'etat RAID
echo "Sauvegarde de l'etat RAID"
/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 "/sbin/mdadd -ar"
# dans linuxrc.
#
cp -a $ROOT/etc $MOUNTPNT 2>cp.stderr 1>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>>cp.stderr
1>>cp.stdout
# _____________________________________________________________________
# RAID: aura besoin de mkraid et ckraid
cp -a $ROOT/usr/sbin/mkraid $ROOT/usr/sbin/ckraid $MOUNTPNT/sbin
2>>cp.stderr 1>>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 騁ait 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 "mkdir /proc"
# 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 -----------------
8. Annexe B. - fichier rc.0 - rc.6 complet
#! /bin/sh
#
# rc.6 Ce fichier est execute par init quand il passe au
# runlevel (niveau d'execution) 0 (halt) ou runlevel 6
# (redemarrage). Il tue tous les processus, demonte les
# systemes de fichiers et soit stoppe soit redemarre.
#
# Version: @(#)/etc/rc.d/rc.6 1.50 1994-01-15
#
# Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org>
# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
# Modified by: Michael A. Robinton, <michael@bzs.org> for RAID shutdown
# Positionner le chemin.
PATH=/sbin:/etc:/bin:/usr/bin
# Mettre en mode saut de ligne pour eviter l'effet d'escalier.
stty onlcr
echo "Lancement du script d'extinction $0:"
# Trouver comment nous sommes appeles.
case "$0" in
*0)
message="Le systeme est stoppe."
command="halt"
;;
*6)
message="Redemarrage."
command=reboot
;;
*)
echo "$0: veuillez m'appeler en tant que \"rc.0\" or \"rc.6\" !"
exit 1
;;
esac
# Tuer tous les processus.
if [ "$1" != "fast" ]; then # shutdown n'a pas encore tue tous les processus
killall5 -15
killall5 -9
fi
# Essayer d'arreter les quotas et la comptabilite.
if [ -x /usr/sbin/quotaoff ]
then
echo "Arret des quotas."
/usr/sbin/quotaoff -a
fi
if [ -x /sbin/accton ]
then
echo "Arret de la comptabilite."
/sbin/accton
fi
# Avant de demonter les systemes de fichiers ecrire un
# enregistrement reboot ou halt dans wtmp.
$command -w
# Sauvegarde de l'heure locale
[ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc
# Demontage asynchrone de tout systeme de fichiers distant
echo "Demontage des systemes de fichiers distants."
umount -a -tnfs &
# vous devez avoir lance
# 'cat /proc/mdstat | grep md0 > {your boot vol}/linux/raidgood.ref'
# avant que linuxrc s'execute proprement avec cette information
RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0 # capture raid status`
# Arret de la swap, puis demontage des systemes de fichiers locaux.
# effacement de mdtab par la meme occasion
echo "Arret de la swap."
swapoff -a
echo "Demontage des systemes de fichiers locaux."
umount -a -tnonfs
# Ne pas remonter les volumes UMSDOS racine :
if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then
mount -n -o remount,ro /
fi
# le peripherique racine reste monte
# monter les systemes de fichiers DOS en lecture/ecriture
echo "Ecriture des drapeaux RAID de demarrage en lecture seule."
mount -n /dosa
mount -n /dosc
# creation du drapeau RAID monte en lecture seule en double
# contenant l'etat a l'extinction de la matrice RAID
echo ${RAIDSTATUS} > /dosa/linux/raidstat.ro
echo ${RAIDSTATUS} > /dosc/linux/raidstat.ro
umount -n /dosa
umount -n /dosc
# Arreter toutes les matrices RAID (sauf la racine)
echo "Arret du RAID"
mdstop -a
# Voir si c'est une situation de coupure de courant.
if [ -f /etc/power_is_failing ]; then
echo "Extinction de l'UPS, a+."
/sbin/powerd -q
exit 1
fi
# Maintenant arret ou redemarrage.
echo "$message"
[ ! -f /etc/fastboot ] && echo "Au prochain demarrage fsck sera FORCE."
$command -f