Solaris Volume Manager (SVM)

De UnixManiax
Aller à la navigation Aller à la recherche


Présentation

"Solaris Volume Manager" (SVM) est le gestionnaire de volumes natif de Solaris. Avant Solaris 10, il s’appelait "Solstice Disk Suite". Il sait gérer à la fois les niveaux de raid et les volumes disques ; c'est donc l'équivalent sous linux des mdtools et de lvm réunis. Ça permet d'avoir tout dans un seul outil. SVM gère toutes ses fonctionnalités au niveau des slices (partitions) et pas au niveau du disque. Il est capable de faire du stripping (raid 0), du mirroring (raid 1), les deux combinés (0+1 et 1+0), du raid 5, de la concaténation (additionner les disques physiques pour n'en faire qu'un logique), gestion de hotspare, de pools de hotspares, les DiskSet (groupes de disques qu'on pourra débrancher d'un serveur pour les rebrancher sur un autre, en conservant ses caractéristiques). Le raid est également possible sur le disque système. SVM est également capable d'agrandir les volumes à chaud, mais la structure même d'UFS ne permet pas la réduction, même à froid. Le problème est exactement le même avec ZFS.

SVM se comporte comme une surcouche aux systèmes de fichiers UFS. A l'installation de l'OS, on ne peut donc pas mettre en place SVM, mais après on va "encapsuler" les données dans SVM et les gérer avec SVM.

Dans Solaris 9 et 10, SVM (ou Disk Suite) est installé par défaut avec le système. Dans Solaris 8 et précédents, il faut installer les packages SUNWmdr, SUNWmdu et SUNWmdx.


Les Replica Databases

SVM conserve sa structure dans des bases de données, qu'on appelle "Replica Databases". Ces databases font 4Mo chacune et doivent être créées dans un slice dédié sur chaque disque ; on lui attribue traditionnellement le slice 7, qui sera de petite taille (une trentaine de Mo suffit). L'ensemble des disques partagés s'appelle un "diskset". On a un maximum de 50 replica databases par diskset. Le principe est d'avoir un certain nombre de databases réparties sur chaque disque physique. Tant que le système peut accéder à au moins 50% des databases plus une, alors ça fonctionne. Sinon, il part en panic. Pendant le démarrage, les databases corrompues ou perdues peuvent être restaurées.

Attention : les replica databases doivent obligatoirement se trouver sur des disques locaux et surtout pas sur un volume SAN. C'est dû au fait qu'elles sont vues très tôt dans le mécanisme de démarrage.

Il est conseillé d'avoir au minimum 3 databases par disque lorsqu'on a 1 ou 2 disques, 2 databases si on a 3 ou 4 disques, et 1 database par disque pour 5 disques ou plus.

Pour un maximum de sécurité au niveau redondance, il est conseillé d'avoir les databases sur des contrôleurs disques différents.

En pratique :

Nous allons prendre pour exemple trois disques c0t0d0, c1t1d1 et c2t2d2. Les replica databases seront créées sur le slice 7. On suppose également que le système est actuellement installé sur c0t0d0 et qu'un petit slice 7 a été créé pour accueillir les databases.

On va utiliser la commande "prtvtoc" pour récupérer la table des partitions du disque système, et l'appliquer sur les deux autres disques avec "fmthard". Ainsi, on s'assure que les disques sont partitionnés à l'identique.

# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard –s - /dev/rdsk/c1t1d1s2
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard –s - /dev/rdsk/c2t2d2s2

Maintenant on va créer les databases (3 par disque) :

# metadb –f –c 3 –a c0t0d0s7 c1t1d1s7 c2t2d2s7

Les options :

  • -f : pour forcer la création initiale des databases
  • -c 3 : nombe de databases par partition
  • -a : pour ajouter


On peut visualiser les databases créées :

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

 r - la réplique ne contient pas d'informations de transfert de périphérique
 o - réplique active avant la dernière modification de la configuration de la base de données du métapériphérique mddb
 u - la réplique est mise à jour
 l - le localisateur pour cette réplique a été lu avec succès
 c - la réplique se trouvait dans /etc/lvm/mddb.cf
 p - un patch a été appliqué à la réplique dans le noyau
 m - la réplique est maître : elle est sélectionnée comme réplique d'entrée
 W - la réplique contient des erreurs d'écriture de périphérique
 a - la réplique est active, des validations ont lieu dans cette réplique
 M - la réplique a rencontré des problèmes avec les blocs maîtres
 D - la réplique a rencontré des problèmes avec les blocs de données
 F - la réplique a rencontré des problèmes liés au format
 S - la réplique est trop petite pour contenir la base de données actuelle
 R - la réplique contenait des erreurs de lecture de périphérique

La création ou l'ajout de databases va mettre à jour les fichiers de configuration. Ils diffèrent selon les versions de Solaris :

  • Solaris 10 : /kernel/drv/md.conf
  • Solaris 9 : /etc/lvm/mddb.conf
  • Solaris 8 : /etc/system + /etc/lvm/mddb.conf


Pour supprimer une database :

# metadb –d c2t2d2s7


Création d'un volume (ou meta-device)

Sous SVM, les volumes logiques s'appellent également des meta-devices. Ils peuvent être de type RAID 0, RAID 1 ou RAID 5. SVM gère également des Hot Spare Pools et des Soft Partitions. Nous allons voir tout ça en détail.

Syntaxe générale

Pour créer un volume, on utilise la commande metainit suivie de plusieurs paramètres :

# metainit <nom_volume> <nb_bandes> <nb_partition_dans_la_bande> <partition> [<nb_partition_dans_la_bande_suivante> <partition>]

Cette syntaxe n'est pas très parlante, mais va devenir plus clair avec les exemples qui vont suivre. Il faut noter que le nom des volumes n'est pas tout à fait libre : on doit choisir un nom compris entre "d0" et "d8192".


Volume contaténé/strippé (RAID 0)

Volume simple

Exemple :

# metainit d39 1 1 c1t1d1s5

On créé un volume qui s'appelle d39, composé d'une bande (strippe), elle-même composée d'une partition (c1t1d1s5).


Volume concaténé

Exemple :

# metainit d30 2 1 c1t1d1s6 1 c2t2d2s5

On créé un volume qui s'appelle d30, composé de deux bandes (strippes). La première bande est composée d'une partition (c1t1d1s6) et la deuxième d'une partition (c2t2d2s5).


Volume strippé

Exemple :

# metainit d31 1 2 c1t1d1s0 c2t2d2s0 –i 64k

On créé un volume qui s'appelle d31, composé d'une seule bande. Cette bande est composée de deux partitions (c1t1d1s0 et c2t2d2s0).

On ajoute également une nouvelle notion (facultative) via l'option "-i 64k". Cette option sert à préciser qu'on va utiliser un facteur d'entrelacement de 64ko.


Volume contcaténé / strippé

C'est simplement un volume à la fois concaténé et strippé, donc composé de plusieurs bandes, composées chacunes de plusieurs partitions.


Ajout d'un slice à un volume

Attention : on ne pourra pas le retirer, sauf avec perte des données, puisqu'on ne peut pas réduire UFS.

Exemple :

metattach d15 c2d0s5

la partition est donc agrandie de la taille de la nouvelle, mais pas le FileSystem.

Pour agrandir le FS :

growfs [-M /point_de_montage ] /dev/md/rdsk/d15

L'option "-M /point_de_montage" sert uniquement si on agrandit à chaud une partition montée.


Utilisation de /etc/lvm/md.tab

Plutôt que de taper les commandes à la main, on peut également remplir le fichier /etc/lvm/md.tab avec des lignes du type "d15 1 1 c1d0s5" (sans les guillemets), et taper "metainit d15" dans le shell.

Ce fichier ne sert que quand on lance metainit, mais il n'est pas lu au boot (ce sont les databases qui sont lues).

Il est quand même intéressant de le remplir car il peut serveur d'aide mémoire.

L'utilisation de ce fichier n'est pas limitée au raid 0, on peut s'en servir pour tous les niveau de raid.


Création du système de fichier

Jusque là, on a juste créé les volumes logiques, pas les filesystems. Voici comment faire.

Création du filesystem sur le meta-device :

newfs /dev/md/rdsk/d15

Dans /etc/vfstab on mettra :

#device to mount  #device to check  #montage  #FS  #ordre fsck  #mount at boot  #options
/dev/md/dsk/d15   /dev/md/rdsk/d15  /montage  ufs  3            yes             logging


Limitations

ATTENTION : il est interdit d'utiliser les volumes RAID 0 pour tout filesystem utilisé lors d'une installation ou upgrade, c'est-à-dire /, /usr, /var, /opt et les swap.


Volume mirroré (RAID 1)

On créé d'abord les éléments du miroir :

metainit d21 1 1 c3d0s0
metainit d22 1 1 c4d0s0

Puis on créé le miroir, d'abord avec un seul élément, comme ça on va conserver les données de cet élément (les données des éléments suivants seront perdues) :

metainit d20 -m d21

Et enfin on rajoute l'autre patte :

metattach d20 d22

Si on passe par /etc/lvm/md.tab, on met dans le fichier :

d21 1 1 c3d0s0
d22 1 1 c4d0s0
d20 -m d21

On initialise avec :

metainit d21 d22 d20

Puis on attache la deuxième patte pareil :

metattach d20 d22

Quand on va créér le système de fichiers, on le fera sur d20.

On peut également retirer une patte du miroir (par exemple pour faire une sauvegarde sans que les données bougent) :

metadetach d20 d21

Puis on la remet :

metattach d20 d21

Cette méthode a l'inconvénient de resynchroniser tout le disque quand on rattache, ce qui peut être long. Une autre possibilité est de mettre la patte "offline", puis la remettre "online". La synchro est alors optimisée et se fait seulement sur ce qui a bougé.

Mettre la patte "offline" :

metaoffline d20 d21

La remettre "online" :

metaonline d20 d21

Panne dans un miroir : on ne peut le savoir que en consultant /var/adm/messages ou en tapant metastat (ou dans Solaris Management Console).

Il faut alors :

  • remplacer physiquement le disque deffectueux
  • vérifier qu'il est bien vu avec format
  • mettre à jour la référence du disque : "metadevadm -u c3d0"
  • refaire le paritionnement (format ou prtvtoc+fmthard)
  • identifier les databases à remplacer : "metadb -i"
  • les recréer : "metadb -d c3d0s7", puis "metadb -a c3d0s7"
  • si les partitions déffectueuses faisaient parti d'un raid : "metareplace -e d20 c3d0s0"
  • si les partitions étaient dans des Soft Partition, plutôt utiliser : "metarecover c3d0s0 -d -p"


Volume RAID 5

metainit d50 -r c5d0s1 c6d0s1 c7d0s1 -i 128k
newfs /dev/md/rdsk/d50
mount -o logging /dev/md/dsk/d50 /point_de_montage

Dans /etc/vfstab :

/dev/md/dsk/d50    /dev/md/rdsk/d50    /point_de_montage    ufs    3    yes    logging


Création d'un hot spare pool

Un hotspare pool est un groupe de partitions de réserve, au cas ou des partitions utilisées seraient cassées. Le nom qu'on lui donne est obligatoirement de la forme hspxxx, xxx étant des chiffres :

Création :

metainit hsp000 c8d0s0

Association à un meta-device pendant sa création :

metainit d50 -h hsp000 ...

Association après coup :

metaparam -h hsp000 d50

Retirer le hot spare pool :

metaparam -h none d50


Informations sur les meta-devices

metastat [d15]
  • sans options : version longue
  • -c : plus lisible
  • -p : plus compact (format utilisable dans /etc/lvm/md.tab)

Exemple :

# metastat d0
d0: Miroir
 Sous-miroir 0: d10
 Etat : Ok           
 Sous-miroir 1: d20
 Etat : Ok           
 Accès : 1
 Option de lecture : roundrobin (par défaut)
 Option d'écriture : parallel (par défaut)
 Taille : 41950000 blocs (20 GB)

d10: Sous-miroir de d0
 Etat : Ok           
 Taille : 41950000 blocs (20 GB)
 Bande 0 :
 Périphérique     Bloc de débu Base          Etat Redis Tranche dynamique
 c0t0d0s0                0     Non             Ok   Oui 

d20: Sous-miroir de d0
 Etat : Ok           
 Taille : 41950000 blocs (20 GB)
 Bande 0 :
 Périphérique     Bloc de débu Base          Etat Redis Tranche dynamique
c0t1d0s0                0     Non             Ok   Oui 

Device Relocation Information:
Device   Reloc  Device ID
c0t0d0   Oui    id1,sd@n5000c5001d64d883
c0t1d0   Oui    id1,sd@n5000c5001d5f8b8f
#
#
# metastat -c d0
d0               m   20GB d10 d20
 d10          s   20GB c0t0d0s0
 d20          s   20GB c0t1d0s0


Supprimer un meta-device

Pour supprimer un metadevice simple :

metaclear d15

Pour supprimer un metadevice et sa sous-arborescence :

metaclear -r d0

Les soft partitions

Les soft partitions sont des partitions "virtuelles" crées à l'intérieur d'une partition physique ou d'un metadevice. Ça permet d'avoir autant de partitions (et donc de filesystems) qu'on veut à l'interieur d'un seul disque ou d'une seule partition physique.

Une soft partition étant une partition à part entière (même si elle est virtuelle), il faut préciser sa taille à la création. Il faut également préciser la partition sur laquelle on va créer la soft partition, pour cela on utilise l'option –p.


Exemples :

metainit d51 -p d50 1g
metainit d52 –p c1t2d3s4 –b 204800

Dans le premier exemple, on créé une soft partition "d51" à l'intérieur d'un volume d50, d'une taille de 1Go.

Dans le deuxième exemple, on créé une soft partition "d52" à l'intieur de la partition c1t2d3s4 d'une taille de 204800 blocs, soit 100Mo pour une taille de bloc de 512 octets.


Mirrorer le disque système

Cette page décrit la mise en place de l'encapsulation sous SVM du disque système du serveur UIRGS48, et de sa mise en miroir.

Solaris a été installé sur le disque c0t0d0 et le disque qui est destiné à être son miroir est c0t1d0.

Le principe est de :

  • créer un slice pour accueillir les databases de SVM
  • dupliquer la table des partitions sur le disque miroir
  • créer les databases et les metadevices
  • raccorder le premier disque au miroir et modifier les fichiers de conf pour préparer au reboot (/etc/vfstab)
  • rebooter et vérifier que le miroir est actif
  • raccorder le deuxième disque au miroir
  • modifier l'OBP pour pouvoir booter sur n'importe lequel des deux disques
  • tester que le boot fonctionne sur les deux


État avant l'encapsulation

Voici un extrait des infos obtenues avec "format" :

AVAILABLE DISK SELECTIONS:
 0. c0t0d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>
 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/sd@0,0
 1. c0t1d0 <SUN146G cyl 14087 alt 2 hd 24 sec 848>  Solaris
 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/sd@1,0

Disk 0 :

Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
 0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472
 1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896
 2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624
 3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896
 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    wu       0                0         (0/0/0)             0

Disk 1 :

Volume:  Solaris
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
 0       root    wm       0 -    12      129.19MB    (13/0/0)       264576
 1       swap    wu      13 -    25      129.19MB    (13/0/0)       264576
 2     backup    wu       0 - 14086      136.71GB    (14087/0/0) 286698624
 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        usr    wm      26 - 14086      136.46GB    (14061/0/0) 286169472
 7 unassigned    wm       0                0         (0/0/0)             0


Les partitions montées apparaissent encore en tant que "/dev/dsk/c0t0d0s0" :

# df -h|grep -v dg
Filesystem             size   used  avail capacity  Mounted on
/dev/dsk/c0t0d0s0       20G   5.0G    15G    26%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                    46G   1.7M    46G     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab
fd                       0K     0K     0K     0%    /dev/fd
/dev/dsk/c0t0d0s3       32G   7.9G    23G    26%    /var
swap                    46G   213M    46G     1%    /tmp
swap                    46G   248K    46G     1%    /var/run
swap                    46G     0K    46G     0%    /dev/vx/dmp
swap                    46G     0K    46G     0%    /dev/vx/rdmp
/dev/odm                 0K     0K     0K     0%    /dev/odm
/platform/sun4u-us3/lib/libc_psr/libc_psr_hwcap2.so.1    20G   5.0G    15G    26%    /platform/sun4u-us3/lib /libc_psr.so.1
/platform/sun4u-us3/lib/sparcv9/libc_psr/libc_psr_hwcap2.so.1    20G   5.0G    15G    26%    /platform/sun4u-us3/lib/sparcv9 /libc_psr.so.1


Encapsulation du disque système et mise en place du miroir

Il faut créer un slice n°7 de 20 Mo pour accueillir les metadb (4Mo par database, et 3 databases en tout par disque), à l'aide de format. Une fois que c'est fait, voici à quoi ressemble le partitionnement :

Format disk 0 :
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
 0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472
 1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896
 2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624
 3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896
 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    8657 -  8659       29.81MB    (3/0/0)         61056

On copie la table des partitions sur le futur miroir :

# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2

On vérifie avec un format du disk 1 que c'est ok :

Volume:  Solaris
Current partition table (original):
Total disk cylinders available: 14087 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
 0       root    wm       0 -  2060       20.00GB    (2061/0/0)   41945472
 1       swap    wu    2061 -  5358       32.01GB    (3298/0/0)   67120896
 2     backup    wm       0 - 14086      136.71GB    (14087/0/0) 286698624
 3        var    wm    5359 -  8656       32.01GB    (3298/0/0)   67120896
 4 unassigned    wu       0                0         (0/0/0)             0
 5 unassigned    wu       0                0         (0/0/0)             0
 6 unassigned    wu       0                0         (0/0/0)             0
 7 unassigned    wm    8657 -  8659       29.81MB    (3/0/0)         61056

On sauvegarde les fichiers /etc/vfstab et /etc/system, car ils vont être altérés par la suite.

# cp /etc/vfstab /etc/vfstab.20100414
# cp /etc/system /etc/system.20100414

On défini à l'avance la structure du futur miroir en ajoutant les lignes suivantes dans /etc/lvm/md.tab

# Partition /
d10 1 1 c0t0d0s0
d20 1 1 c0t1d0s0
d0 -m d10
# Partition de swap
d11 1 1 c0t0d0s1
d21 1 1 c0t1d0s1
d1 -m d11
# Partition /var
d13 1 1 c0t0d0s3
d23 1 1 c0t1d0s3
d3 -m d13

Les databases ne sont pas encore créés. On le vérifie ainsi :

# metadb -i

metadb: uirgs48: there are no existing databases

Création des databases

# metadb -f -c 3 -a c0t0d0s7 c0t1d0s7

Vérification :

# metadb -i
 flags           first blk       block count
 a        u         16              8192            /dev/dsk/c0t0d0s7
 a        u         8208            8192            /dev/dsk/c0t0d0s7
 a        u         16400           8192            /dev/dsk/c0t0d0s7
 a        u         16              8192            /dev/dsk/c0t1d0s7
 a        u         8208            8192            /dev/dsk/c0t1d0s7
 a        u         16400           8192            /dev/dsk/c0t1d0s7
 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

Création des metadevices

# metainit -a -f
d10: Concat/Stripe is setup
d20: Concat/Stripe is setup
d0: Mirror is setup
d11: Concat/Stripe is setup
d21: Concat/Stripe is setup
d1: Mirror is setup
d13: Concat/Stripe is setup
d23: Concat/Stripe is setup
d3: Mirror is setup

Modifier le vfstab (avec metaroot pour /, et manuellement pour swap et /var):

# metaroot d0

==> modifie /etc/vfstab mais uniquement pour "/".

Pour le reste, il faut éditer manuellement /etc/vfstab pour obtenir le résultat suivant :

# vi /etc/vfstab
[...]
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
/dev/md/dsk/d1  -       -       swap    -       no      -
/dev/md/dsk/d3  /dev/md/rdsk/d3 /var    ufs     1       no      -
[...]

Rebooter en lockant les filesystems :

# lockfs -fa
# init 6

On vérifie qu'on a bien booté sur le raid :

# df -h |grep -v dg
Filesystem             size   used  avail capacity  Mounted on
/dev/md/dsk/d0          20G   5.0G    15G    26%    /
/dev/md/dsk/d3          32G   7.9G    23G    26%    /var
[...]

# swap -l
swapfile             dev  swaplo blocks   free
/dev/md/dsk/d1      85,1      16 67120880 67120880

Modifier le périphérique de dump.

  • avant :
# dumpadm
 Dump content: kernel pages
 Dump device: /dev/dsk/c0t0d0s1 (dedicated)
Savecore directory: /var/crash/uirgs48
Savecore enabled: yes
  • on modifie :
# dumpadm -d swap
 Dump content: kernel pages
 Dump device: /dev/md/dsk/d1 (swap)
Savecore directory: /var/crash/uirgs48
Savecore enabled: yes
  • après :
# dumpadm
 Dump content: kernel pages
 Dump device: /dev/md/dsk/d1 (swap)
Savecore directory: /var/crash/uirgs48
Savecore enabled: yes

On attache les partitions du deuxième disque au mirroirs :

# metattach d0 d20
# metattach d1 d21
# metattach d3 d23

On peut vérifier qu'ils sont bien attachés correctement :

# metastat |grep -i mirror
d3: Mirror
 Submirror 0: d13
 Submirror 1: d23
d13: Submirror of d3
d23: Submirror of d3
d1: Mirror
 Submirror 0: d11
 Submirror 1: d21
d11: Submirror of d1
d21: Submirror of d1
d0: Mirror
 Submirror 0: d10
 Submirror 1: d20
d10: Submirror of d0
d20: Submirror of d0

L'attachement est immediat, mais la copie des fichiers sur le mirroir prend du temps. On peut contrôler ou on en est avec :

# metastat |grep -i sync
 State: Resyncing
 Resync in progress: 2 % done
 State: Resyncing
 State: Resyncing
 Resync in progress: 2 % done
 State: Resyncing
 State: Resyncing
 Resync in progress: 5 % done
 State: Resyncing

Ajouter une ligne dans /etc/system pour pouvoir booter en cas de panne disque :

# echo "set md:mirrored_root_flag=1" >> /etc/system

Configuration de l'OBP pour pouvoir booter sur n'importe lequel des deux disques (nommés "dsk10" pour le disque principal et "mir10" pour le mirroir). On peut le faire depuis Solaris, s'il est démarré, ou depuis l'OBP.

  • depuis Solaris
# eeprom "nvramrc=devalias dsk10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@0,0:a mir10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@1,0:a"
# eeprom boot-device="dsk10 mir10"
# eeprom "use-nvramrc?=true"
  • ou depuis l'OBP
ok> nvalias dsk10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@0,0:a
ok> mir10 /pci@0,600000/pci@0/pci@8/pci@0/scsi@1/disk@1,0:a
ok> setenv boot-device dsk10 mir10

Ensuite il faut vérifier qu'on peut booter avec les deux disques. Rebooter avec "init 0". Se connecter sur la console du domaine. Booter avec "boot mir10", puis recommencer avec "boot dsk10".