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

Notes

[1] Que celui qui pense que je suis radin le dise dans les commentaires

[2] répondant au doux nom surprenant de gvinum

[3] partitions BSD