|
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:
|
|
|
|
|
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:
|
|
|
|
|
Par la suite, vous pouvez effectuer le redémarrage de votre système:
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|