Rencontre avec le GEOM vert
Par Fred le jeudi 1 mai 2008, 19:39 - Développement - Lien permanent
La génèse
Voilà, mon bon vieux Maxtor de 80Go commence à s'essoufler. Quelques passages de test SMART m'ont montré qu'il n'était plus aussi en forme qu'autrefois. Au début, j'ai surtout cru à un problème d'alimentation du PC qui s'écroule mais il a bien fallu se rendre à l'évidence : Quand il a chaud, mon disque a tendance à s'arrêter pendant une petite seconde ce qui fait râler un peu mon FreeBSD 7.0, OS du bien s'il en est.
L'achat
Bon, après mes hésitations habituelles quant à tout achat[1], j'ai fini par acheter un superbe Maxtor (encore !!) de 160Go. J'en viens même à me demander si je vais avoir assez de données à mettre dessus et si vu le prix, je n'aurais pas dû en acheter deux.
Alors maintenant, se pose la question fatidique, comment je m'en sers ?
Le disque meurt, il sera bientôt RAID
Encore un de mes célèbres jeux de mots foireux pour dire que ma première idée était de faire du RAID1 alias mirroring. Pour gérer tout ce qui est RAID, on fait appel normalement à gvinum
gvinum!!!
Il y a quelques années, j'ai utilisé vinum pour faire du mirroring. La syntaxe est complexe et introduire de nouveaux termes comme un plex en plus des partitions et autres slices ne rend pas la tâche réellement aisée. Mais vinum et sa version geomifiée[2] sont d'une souplesse incomparable. On peut tout faire avec ces outils-là et puis surtout, c'est toujours vachement sympa d'utiliser un outil aussi puissant.
gmirror!!!
gmirror est l'outil basé sur GEOM. Le GEOM vert (merci les lutins du GCU pour ce superbe jeu de mots) est en fait une couche d'abstraction permettant d'implémenter tout plein de trucs pour le stockage des données. Cela va des fonctionnalités RAID en passant par le chiffrement des supports jusqu'à l'accès aux périphériques via le réseau.
Après une recherche rapide sur gmirror, une page de Dru Lavigne sur ONLamp ainsi que ce petit tutorial m'ont permis de me rendre compte que gmirror est un outil d'une simplicité déconcertante... Un petit
coruscant# geom disk list Geom name: ad0 Providers: 1. Name: ad0 Mediasize: 81964302336 (76G) Sectorsize: 512 Mode: r8w8e10 fwsectors: 63 fwheads: 16 Geom name: ad1 Providers: 1. Name: ad1 Mediasize: 160041885696 (149G) Sectorsize: 512 Mode: r0w0e0 fwsectors: 63 fwheads: 16
montre bien les providers quand on veut jouer avec les disques directement. Mes disques étant de taille différente, je me dois de trouver une autre classe GEOM pour mes slices[3].
en regardant dans le répertoire /boot/kernel, je trouve les geom_*.ko dont un certain geom_bsd.ko. Allons-y !!!
coruscant# geom bsd list Geom name: ad0s3 mbroffset: 10742215680 rawoffset: 10742215680 labeloffset: 512 Providers: 1. Name: ad0s3a Mediasize: 209715200 (200M) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 0 offset: 0 seclength: 409600 length: 209715200 index: 0 2. Name: ad0s3b Mediasize: 2147483648 (2.0G) Sectorsize: 512 Mode: r1w1e0 type: 1 secoffset: 409600 offset: 209715200 seclength: 4194304 length: 2147483648 index: 1 3. Name: ad0s3c Mediasize: 64420392960 (60G) Sectorsize: 512 Mode: r0w0e0 type: 0 secoffset: 0 offset: 0 seclength: 125821080 length: 64420392960 index: 2 4. Name: ad0s3d Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 4603904 offset: 2357198848 seclength: 20971520 length: 10737418240 index: 3 5. Name: ad0s3e Mediasize: 26843545600 (25G) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 25575424 offset: 13094617088 seclength: 52428800 length: 26843545600 index: 4 6. Name: ad0s3f Mediasize: 3221225472 (3.0G) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 78004224 offset: 39938162688 seclength: 6291456 length: 3221225472 index: 5 7. Name: ad0s3g Mediasize: 21261004800 (20G) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 84295680 offset: 43159388160 seclength: 41525400 length: 21261004800 index: 6 Consumers: 1. Name: ad0s3 Mediasize: 64420392960 (60G) Sectorsize: 512 Mode: r6w6e6 Geom name: ad0s4 mbroffset: 75162608640 rawoffset: 75162608640 labeloffset: 512 Providers: 1. Name: ad0s4c Mediasize: 6794081280 (6.3G) Sectorsize: 512 Mode: r0w0e0 type: 0 secoffset: 0 offset: 0 seclength: 13269690 length: 6794081280 index: 2 2. Name: ad0s4d Mediasize: 2147483648 (2.0G) Sectorsize: 512 Mode: r1w1e1 type: 7 secoffset: 0 offset: 0 seclength: 4194304 length: 2147483648 index: 3 3. Name: ad0s4e Mediasize: 2147483648 (2.0G) Sectorsize: 512 Mode: r0w0e0 type: 7 secoffset: 4194305 offset: 2147484160 seclength: 4194304 length: 2147483648 index: 4 Consumers: 1. Name: ad0s4 Mediasize: 6794081280 (6.3G) Sectorsize: 512 Mode: r1w1e2 Geom name: ad1 mbroffset: 0 rawoffset: 0 labeloffset: 512 Providers: 1. Name: ad1a Mediasize: 209715200 (200M) Sectorsize: 512 Mode: r0w0e0 type: 0 secoffset: 16 offset: 8192 seclength: 409600 length: 209715200 index: 0 2. Name: ad1b Mediasize: 2147483648 (2.0G) Sectorsize: 512 Mode: r0w0e0 type: 1 secoffset: 409616 offset: 209723392 seclength: 4194304 length: 2147483648 index: 1 3. Name: ad1c Mediasize: 160041885696 (149G) Sectorsize: 512 Mode: r0w0e0 type: 0 secoffset: 0 offset: 0 seclength: 312581808 length: 160041885696 index: 2 4. Name: ad1d Mediasize: 5368709120 (5.0G) Sectorsize: 512 Mode: r0w0e0 type: 7 secoffset: 4603920 offset: 2357207040 seclength: 10485760 length: 5368709120 index: 3 5. Name: ad1e Mediasize: 120103714816 (112G) Sectorsize: 512 Mode: r0w0e0 type: 7 secoffset: 15089680 offset: 7725916160 seclength: 234577568 length: 120103714816 index: 4 6. Name: ad1f Mediasize: 5368709120 (5.0G) Sectorsize: 512 Mode: r0w0e0 type: 7 secoffset: 249667248 offset: 127829630976 seclength: 10485760 length: 5368709120 index: 5 7. Name: ad1g Mediasize: 26843545600 (25G) Sectorsize: 512 Mode: r0w0e0 type: 7 secoffset: 260153008 offset: 133198340096 seclength: 52428800 length: 26843545600 index: 6 Consumers: 1. Name: ad1 Mediasize: 160041885696 (149G) Sectorsize: 512 Mode: r0w0e0
Ca sent la bonne piste !! :D