Mettre deux disques en miroir logiciel (RAID-1)
Accueil  Procédures et documentations  Mettre deux disques en miroir logiciel (RAID-1)
Dans cette section:
Mise en miroir du disque OS (root)
Deux disques indentiques
La partition vide pour les métadonnées
Création des sous-miroirs
Création des miroirs
Modification des fichiers système
Redémarrage du système
Attacher les sous-miroirs du deuxième disque
Afficher les informations sur les miroirs
Sujets connexes:
Installer MySQL 5.0.19 sous Solaris 10
Mettre deux disques en miroir logiciel (RAID-1)
Installer un serveur web sous Solaris 8
Les incontournables:
Questions et réponses sur OpenBoot
Forum de discussions
Remplacement de la pile du NVRAM
Les machines SPARC (32 bit)
Les machines UltraSPARC (64-bit)
Voici la procédure pour créer un miroir logiciel (RAID level 1) sous Solaris. Cette procédure est valide sous toutes les versions de Solaris utilisant Solstice DiskSuite (pour les versions de Solaris allant de 2.5 à 8 inclusivement - il faut cependant procéder à l'installation séparément du système d'exploitation de Solstice DiskSuite), ou encore avec la solution "LVM" (Logical Volume Manager) qui est incluse de facto dans les versions de Solaris 9 et plus (donc, inclus également sous Solaris 10).  LVM n'est en fait que Solstice DiskSuite, mais inclus dans le système d'exploitation.

Mise en miroir du disque OS (root) haut
 

Pour les besoins de la cause, la procédure suivante vise la mise en miroir du disque OS, ou du "root disk", si vous préférez.  Pour mettre un disque non "root" en miroir avec cette procédure, vous devez procéder de la même manière, excepté pour la partie où il faut exécuter la commande "metaroot" (ce sera mentionné dans la procédure, à l'endroit approprié).

Également, plusieurs personnes nous demandent s'il est possible, avec DiskSuite (ou LVM), de mettre des disques en RAID-5, ou en RAID-0, par exemple.  La réponse est oui.  Cependant, en ce qui concerne le disque OS (root), il n'est pas possible de le faire.  La seule solution possible avec le disque OS, c'est de le mettre en RAID-1, ou si vous préférez, en miroir. 

 
Deux disques indentiques haut
 
Pour arriver à mettre en miroir (RAID-1) deux disques sous Solaris, il vous faut évidemment deux disques identiques.  Faites attention à ceci, c'est très important: même si vos disques sont tous les deux identifiés comme étant, par exemple, des disques de 18 Go., vérifiez attentivement le nombre de cylindres et de blocks de chacun des deux disques, via la commande "format" sous Solaris:
 
 # format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c1t0d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>
          /pci@1f,0/pci@1/scsi@8/sd@0,0
       1. c1t1d0 <SUN18G cyl 7506 alt 2 hd 19 sec 248>
          /pci@1f,0/pci@1/scsi@8/sd@1,0

Specify disk (enter its number): 0
selecting c1t0d0
[disk formatted]

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        repair     - repair a defective sector
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        inquiry    - show vendor, product and revision
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format> ve

Primary label contents:

Volume name = <        >
ascii name  = <SUN18G cyl 7506 alt 2 hd 19 sec 248>
pcyl        = 7508
ncyl        = 7506
acyl        =    2
nhead       =   19
nsect       =  248
Part      Tag  Flag   Cylinders    Size          Blocks
  0       root  wm     0 - 6605   14.84GB  (6606/0/0) 31127472
  1       swap  wu  6606 - 7496    2.00GB  (891/0/0)   4198392
  2     backup  wm     0 - 7505   16.86GB  (7506/0/0) 35368272
  3 unassigned  wm     0           0       (0/0/0)           0
  4 unassigned  wm     0           0       (0/0/0)           0
  5 unassigned  wm     0           0       (0/0/0)           0
  6 unassigned  wm     0           0       (0/0/0)           0
  7 unassigned  wm  7497 - 7505   20.71MB  (9/0/0)       42408
 

Ci-dessus, comme vous pouvez le constater, dans notre système, nous avons vraisemblablement deux disques de 18 Go., qui ont tous deux 7506 cylindres. Nous avons seulement affiché le détail du premier disque, puisque seul le premier disque a été installé initialement avec Solaris 10 (une seule grosse partition "/" (root) a été créée de 14.84 Go., ainsi qu'une partition "swap" de 2 Go.).

Veuillez également noter la présente d'une petite partition, à la toute fin du disque, qui n'a pas de point de montage (ou "mount point"), et qui n'est pas non plus formatée sous UFS (la partition n'a pas de "filesystem" ou de système de fichiers UFS). Cette petite partition de 20.71 Mo. est nécessaire pour l'utilisation de DiskSuite ou LVM. On vous explique un peu plus loin le pourquoi de cette partition. Pour l'instant, gardez en tête que vous devez disposer d'une parition comme celle-ci sur votre disque.

Maintenant, après vous être assuré que vos deux disques sont identiques "physiquement", il faut également vous assurer que les tables de partitionnement (VTOC - ou "Virtual Table Of Content"), soit également identiques sur les deux disques. Pour se faire, vous pouvez procéder de trois manières. La manière "manuelle", la méthode "traditionnelle", ou la méthode "rapide".

La méthode "manuelle"

La méthode manuelle consiste à exécuter la commande "format" et à reproduire, une à une, les partitions que vous voyez sur le premier disque (le disque "0"), sur le deuxième disque (le disque "1"). Cette procédure est lente, et si vous ne faites pas attention, vous pouvez avoir de légères différences dans votre partitionnement, et nous ne vous recommandons donc pas cette méthode.

La méthode "traditionnelle"

La méthode traditionnelle consiste, quant à elle, à afficher la table brut de partitions (VTOC) du premier disque, à l'aide de la commande "prtvtoc", et à réécrire celle-ci sur le deuxième disque, à l'aide de la commande "fmthard":

 
# prtvtoc -h /dev/rdsk/c1t0d0s2 | fmthard -s - /dev/rdsk/c1t1d0s2
 

Cette procédure est généralement celle recommandée par la plupart des gens. Elle peut aussi être réalisée en deux étapes: la commande "prtvtoc" peut ainsi être utilisée pour rediriger le résultat dans un fichier texte, et "fmthard" peut ensuite être utilisée pour appliquer le contenu du fichier texte, la table "VTOC", au deuxième disque.

La méthode "rapide"

En fait, cette méthode n'est pas plus rapide que la méthode traditionnelle, à moins que vous n'utilisiez la méthode traditionnelle en plusieurs étapes. C'est néanmoins la méthode que je préfère personnellement. ;) Dans la géométrie d'un disque, les 16 premiers blocs sont toujours réservé pour contenir les informations de partitionnement, ou la table VTOC (ou autre), ainsi que l'ensemble des données concernant les cylindres, les blocs, etc. Dans un partitionnement standard sous Solaris, c'est généralement visible sous forme de partition "2" (par exemple "c1t0d0s2"): sous la commande "format", c'est identifié comme "backup", et vous ne pouvez pas utiliser cette partition pour y mettre des données.

Donc, ma méthode "rapide" consiste ni plus ni moins à réécrire la table "VTOC" du premier disque, sur le deuxième disque, avec la commande "dd":

 
# dd if=/dev/rdsk/c1t0d0s2 of=/dev/rdsk/c1t1d0s2 count=16
 

Notez que la partiton "2", appelée "backup" sous "format" donne la taille de *tout* le disque en entier...   Ce que nous voulons reproduire, ce ne sont que les 16 premiers blocks du disque (la table "VTOC"), alors c'est pourquoi nous limitons l'écriture de "dd" avec "count=16" (égalment, si vous ne limitez pas avec "count=16", vous trouverez que cette méthode est LOIN d'être rapide!!).

Peu importe la méthode que vous aurez choisi, après cette étape, normalement vous devriez maintenant avoir deux disques physiquement identiques, et pratitionnés de manière identiques également! :) 

 
La partition vide pour les métadonnées haut
 

Comme vous l'avez constaté précédemment, nous avons besoins d'une petite partition vide d'environ 20 Mo. sur chacun des deux disques que nous configurons en miroir.  Cette partition vide ne doit pas avoir de système de fichiers.  Ces partitions sont nécessaires pour l'utilisation de DiskSuite (ou LVM), peu importe ce que vous créerez comme volume logique (un miroir, un RAID-5, un "stripeset" ou un "concatset").

Ces emplacements de 20 Mo. seront utilisés par DiskSuite pour stocker ce qu'on appelle les métadonnées (ou les "metadb").  Il s'agit des informations qu'utilise le système pour "savoir" comment sont organisés les volumes logiques.  Sans ces informations (ou "métadonnées"), le système ne "sait pas" comment sont organisées les donnés: celles-ci sont donc capitales.

DiskSuite, ou LVM, nécessite la présente de 3 copies minimum pour opérer de ces métadonnées.  Il est donc avisé d'en placer au moins 3 copies sur le premier disque, et 3 autres copies sur le deuxième disque.  Cependant, vous devez savoir que, pour opérer proprement, DiskSuite (ou LVM) exige d'avoir accès à 50% + 1 des métadonnées totales du système.  Cette notion est très importante, parce que si vous n'avez que 3 copies sur le premier disque, et 3 autres copies sur le deuxième disque, si vous perdez, par exemple, le deuxième disque, DiskSuite se plaindra qu'il n'a pas le 50% + 1 nécessaire pour opérer.  La façon de contourner ce problème consiste à ajouter d'autres partitions sur d'autres disques dans votre système (exemple, si votre système possède 4 disques, créez 3 copies des métadonnées sur chaque disque, et vous serez ainsi tranquile), ou si vous n'avez que deux disques, en cas de perte de l'un des disques, redémarrez en mode "single user", et détruisez les 3 métadonnées situées sur le disque considéré en problème et redémarrez.  De telle sorte, le système considérera que les seuls 3 métadonnées existantes sont maintenant 100% de votre système.

Pour le moment, cependant, contentons-nous de ne créer que 3 métadonnées par disque, sur nos deux disques système: 

 
# metadb -f -a -c3 c1t0d0s7 c1t1d0s7
 

C'est la commande "metadb" qui nous permet de le faire.  L'option "-f" indique qu'il faut "forcer" la création, puisqu'on désire créer des métadonnées sur le disque présentement monté comme disque système.  L'option "-a" indique qu'on désire "ajouter" des métadonnées, tandis que l'option "-c3" indique qu'on désire 3 copies des métadonnées.  Finalement "c1t0d0s7" et "c1t1d0s7" indique à quel endroit on veut ces 3 copies des métadonnées.

Par la suite, vous pouvez afficher la représentation des métadonnées créées sur votre système, avec la commande "metadb -i" (l'option "-i" n'est pas nécessaire, mais elle vous indique la signification des caractères qui apparaissent dans le résultat de la commande): 

 
# metadb -i
    flags      first blk  block count
 a m  p  luo   16         8192        /dev/dsk/c1t0d0s7
 a    p  luo   8208       8192        /dev/dsk/c1t0d0s7
 a    p  luo   16400      8192        /dev/dsk/c1t0d0s7
 a    p  luo   16         8192        /dev/dsk/c1t1d0s7
 a    p  luo   8208       8192        /dev/dsk/c1t1d0s7
 a    p  luo   16400      8192        /dev/dsk/c1t1d0s7

 r - replica does not have device relocation information
 o - replica active prior to last mddb configuration change
 u - replica is up to date
 l - locator for this replica was read successfully
 c - replica's location was in /etc/lvm/mddb.cf
 p - replica's location was patched in kernel
 m - replica is master, this is replica selected as input
 W - replica has device write errors
 a - replica is active, commits are occurring to this replica
 M - replica had problem with master blocks
 D - replica had problem with data blocks
 F - replica had format problems
 S - replica is too small to hold current data base
 R - replica had device read errors
 
Une fois les métadonnées créées, nous pouvons maintenant procéder à la création des sous-miroirs, et ensuite aux miroirs eux-mêmes!
 
Création des sous-miroirs haut
 

De ce fait, chaque miroir (ou unité logique de type RAID-1) est constitué de deux sous-miroirs.  Solstice DiskSuite (ou LVM) utilise une nomenclature particulière pour identifier les composants logiques de ses volumes de disques: il s'agit du caractère "d", suivi d'un nombre non nul.

Personnellement, j'utilise des chiffres comme "d1" pour identifier le miroir entier, et pour le sous-miroir situé sur le disque 1 de ce miroir, je le nomme "d11", et pour le sous-miroir situé sur le disque 2 de ce miroir, je le nomme "d12".  C'est assez simple, mais on s'y retrouve facilement avec une telle nomenclature.  Évidemment, vous pouvez y aller de la vôtre, mais essayez tout de même de conserver une certaine logique, ou sinon vous vous y perdrez assez facilement...

Ceci dit, pour créer les sous-miroirs, on utilise la commande "metainit".  Voici les commandes pour créer les deux sous-miroirs du premier disque (soit pour "root" et "swap" respectivement): 

 
# metainit -f d11 1 1 c1t0d0s0
d11: Concat/Stripe is setup

# metainit -f d21 1 1 c1t0d0s1
d12: Concat/Stripe is setup
 

Ci-dessus, l'option "-f" est encore utilisée puisque nous créons les sous-miroirs sur le disque actuellement en usage comme disque système.  La commande "metainit", suivie de "-f", est constituée du nom logique du composant (le sous-miroir se nommera "d11", par exemple).  Les deux "1 1" qui suivent signifient seulement que le composant est constitué d'une seule "stripe" individuelle, et que cette "stripe" unique sera également composée d'une seule partition unique (cette option varie si, par exemple, vous voudriez faire une concatenation logique de plusieurs partitions (le premier chiffre sera alors différent de 1), ou alors un "stripeset" composée de plusieurs partitions (le deuxième chiffre sera égal au nombre de partitions dans le "stripeset"...)).

L'étape suivante consiste à créer les sous-miroirs équivalents à ceux du premier disque, mais sur le deuxième disque.  Pour cette fin, nous ne sommes pas obligés d'utiliser l'option "-f", puisque le disque n'est actuellement pas en usage sur le système: 

 
# metainit d12 1 1 c1t1d0s0
d21: Concat/Stripe is setup

# metainit d22 1 1 c1t1d0s1
d22: Concat/Stripe is setup
 
L'étape suivante consiste maintenant à initialiser les miroirs eux-mêmes.
 
Création des miroirs haut
 

L'initialisation des miroirs doit être faite en deux étapes bien distinctes, dont la première consiste à assigner les sous-miroirs du premier disque à ces nouveaux miroirs.  La deuxième étape doit être réalisée suite à un redémarrage du système, et consiste évidemment à attacher les sous-miroirs du deuxième disque aux miroirs initialisés à la première étape.

Pour initialiser les miroirs à partir des premiers sous-miroirs, on le fait également avec la commande "metainit", comme suit: 

 
# metainit d1 -m d11
d1: Mirror is setup

# metainit d2 -m d21
d2: Mirror is setup
 
C'est tout ce que nous devons faire à ce niveau pour le moment.  Il n'est pas recommandé d'ajouter les sous-miroirs du deuxième disque à cette étape, puisque (1) l'ajout des sous-miroirs du deuxième disque aux miroirs ainsi créés initiera le processus de synchronisation des disques, et cette étape peut être passablement longue, selon la taille des sous-miroirs en usage, et (2) vous n'avez pas encore redémarré votre système et, donc complété toutes les configurations requises.
 
Modification des fichiers système haut
 

Maintenant que nous avons mis en "miroir" le disque système, il faut renseigner ce système que nous n'utilisons plus un disque simple pour fonctionner.  Il y a deux modifications à faire pour cela: modifier le fichier "/etc/vfstab" et modifier le fichier "/etc/system".

Pour se faire, la commande "metaroot" renseigne partiellement le fichier "/etc/vfstab", et complètement le fichier "/etc/system" (autrement dit, on n'éditera pas manuellement le fichier "/etc/system").  La commande "metaroot" sert à identifier la partition de démarrage.  Comme la partition "c1t0d0s0" était notre partition de démarrage, et qu'elle a été encapsulée dans le miroir "d1", nous utiliserons donc la commande "metaroot d1" pour instruire le système: 

 
# metaroot d1
 
Si tout s'est bien déroulé (et il n'y a pas de doute que ce soit le cas!), vous devriez voir apparaître ces lignes dans le fichier "/etc/system":
 
* Begin MDD root info (do not edit)
rootdev:/pseudo/md@0:0,1,blk
* End MDD root info (do not edit)
 
et votre fichier "/etc/vfstab" devrait avoir la ligne suivante, au lieu de celle que vous aviez avant concernant la partition "/":
 
/dev/md/dsk/d1  /dev/md/rdsk/d1 /       ufs     1       no      -
 

Notez la modification ci-dessus: au lieu d'avoir "/dev/dsk/c1t0d0s0" comme block device, et "/dev/rdsk/c1t0d0s0" comme raw device, vous avez maintenant respectivement "/dev/md/dsk/d1" et "/dev/md/rdsk/d1".

Comme la partition "swap" a également été encapsulée dans un miroir, vous devez ici modifier manuellement le fichier "/etc/vfstab" pour refléter les nouveaux changements.  Pour se faire, remplacez "/dev/dsk/c1t0d0s1" par "/dev/md/dsk/d2".  Notre fichier complet "/etc/vfstab" devrait maintenant ressembler à ceci (sous Solaris 10, avec seulement 2 partitions):

 
# cat /etc/vfstab
#device         device     mount   FS      fsck    mount   mount
#to mount       to fsck    point   type    pass    at boot options
#
fd              -          /dev/fd fd      -       no      -
/proc           -          /proc   proc    -       no      -
/dev/md/dsk/d2  -          -       swap    -       no      -
/dev/md/dsk/d1  /dev/md/rdsk/d1 /       ufs     1       no      -
/devices        -          /devices        devfs   -       no      -
ctfs            -          /system/contract        ctfs    -       no      -
objfs           -          /system/object  objfs   -       no      -
swap            -          /tmp    tmpfs   -       yes     -
 
Redémarrage du système haut
 
Après avoir modifié les fichiers systèmes correctement, il faut maintenant redémarrer le système.  Cependant, avant de procéder au redémarrage, comme des modifications importantes ont été faites, il est recommandé de mettre à jour les informations au sujet des "locks" sur le systèmes de fichiers: 
 
# lockfs -fa
 
Par la suite, vous pouvez effectuer le redémarrage de votre système:
 
# shutdown -y -g0 -i6
 
et une fois le système redémarré, nous pouvons poursuivre la procédure.
 
Attacher les sous-miroirs du deuxième disque haut
 
Une fois redémarré, si tout s'est bien passé, en faisant la commande "df -h", vous devriez être à même de constater que vous utilisez les nouveaux points de montage, comme suit:
 
# df -h
Filesystem             size   used  avail capacity  Mounted on
/dev/md/dsk/d1          15G   3.7G    11G    26%    /
 
(le résultat a été coupé pour ne montrer que la partition "/"...).  Pour voir les informations concernant la partition "swap", vous pouvez utiliser la commande "swap -l":
 
# swap -l
swapfile             dev  swaplo blocks   free
/dev/md/dsk/d2      85,2      16 4198368 4198368
 

ce qui nous prouve bien que tout s'est très bien déroulé jusqu'à maintenant!

L'étape suivante consiste à attacher les sous-miroirs du deuxième disque aux miroirs "d1" et "d2" déjà existants.  Pour se faire, nous utilisons la commande "metattach" de la manière suivante: 

 
# metattach d1 d12
d1: submirror d12 is attached

# metattach d2 d22
d2: submirror d22 is attached
 
Tout dépendant de ce qui tourne sur votre système, il n'est pas toujours une bonne idée d'attacher les sous-miroirs à tous les miroirs simultanément...   C'est que, aussitôt la commande "metattach" terminée, la synchronisation des sous-miroirs est lancée, et cette étape est très demandante en lecture / écriture, et les performances du système en sont donc diminuées. 
 
Afficher les informations sur les miroirs haut
 
Que ce soit pour suivre la progression de la synchronisation des sous-miroirs entre eux, ou simplement pour avoir un aperçu de l'état de vos volumes de disques, la commande "metastat" est ce qu'il vous faut.  L'exemple suivant nous montre le résultat que donne cette commande, une fois tous les sous-miroirs synchronisés:
 
# metastat
d2: Mirror
    Submirror 0: d21
      State: Okay
    Submirror 1: d22
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 4198392 blocks (2.0 GB)

d21: Submirror of d2
    State: Okay
    Size: 4198392 blocks (2.0 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s1          0     No            Okay   Yes


d22: Submirror of d2
    State: Okay
    Size: 4198392 blocks (2.0 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t1d0s1          0     No            Okay   Yes


d1: Mirror
    Submirror 0: d11
      State: Okay
    Submirror 1: d12
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 31127472 blocks (14 GB)

d11: Submirror of d1
    State: Okay
    Size: 31127472 blocks (14 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t0d0s0          0     No            Okay   Yes


d12: Submirror of d1
    State: Okay
    Size: 31127472 blocks (14 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c1t1d0s0          0     No            Okay   Yes


Device Relocation Information:
Device   Reloc  Device ID
c1t1d0   Yes    id1,sd@SFUJITSU_MAJ3182M_SUN18G_02P43500____
c1t0d0   Yes    id1,sd@SFUJITSU_MAJ3182M_SUN18G_05P35850____
 

Comme vous pouvez le constater ci-dessus, tous les miroirs et sous-miroirs portent la mention "Okay".  Dans le cas où les volumes seraient en synchronisation, la mention "Syncing" serait présente, avec un pourcentage d'avancement.  Et si un problème devait être détecté sur l'un de vos disques, la mention "Need maintenance" aparaîtrait à la place de "Okay".

Vous pouvez également avoir une vue "partielle" de comment vos disques et vos partitons sont utilisées à travers le système, via DiskSuite (ou LVM).  Pour se faire, utilisez la commande "metastat -p": 

 
# metastat -p
d2 -m d21 d22 1
d21 1 1 c1t0d0s1
d22 1 1 c1t1d0s1
d1 -m d11 d12 1
d11 1 1 c1t0d0s0
d12 1 1 c1t1d0s0
 
Sources: Ben Audet et Ecantin .
 
 
Version imprimable
Ce site a été fièrement réalisé sous:
Venez nous voir au forum!

SunQuébec, c'est une plateforme de ressources et d'entraîde francophone. C'est aussi - et surtout - un forum de discussions!! Venez donc vous y inscrire et partager avec nous!
Les conditions actuelles:

Accueil Forum de discussions La plateforme Sun/SPARC Procédures et documentations Les galeries d'images
Copyright © 2011, SunQuebec (www.sunquebec.com), tous droits réservés.
Protégé par les lois du copyright des États-Unis et du Canada et par des traités internationaux.
SunQuebec