1. Pré-requis : présentation de GEOM
GEOM [1] [2] est un framework d’abstraction d’accès à des raw-devices via des classes (CONCAT, ELI, LABEL, MIRROR, NOP, RAID3, SHSEC, STRIPE, VINUM) ; chaque classe représente un typ1. Pré-requis : présentation de GEOM
GEOM [1] [2] est un framework d’abstraction d’accès à des raw-devices via des classes (CONCAT, ELI, LABEL, MIRROR, NOP, RAID3, SHSEC, STRIPE, VINUM) ; chaque classe représente un type d’action sur ces raw-devices. Il est possible de combiner plusieurs classes sur un même device, et ce, dans différents ordres, ce qui éloigne fortement GEOM des autres ” volume managers ” qui ont une typologie beaucoup plus stricte.
Un peu de vocabulaire :
- Une classe implémente un type particulier d’action sur ces raw-devices (disques durs IDE, SATA, SCSI ; clés USB ; fichiers ” filesystem ” montés sur une loopback mdconfig(3)) ;
- Un provider est le device résultant de l’action de GEOM sur ces raw-devices ;
- Un consumer est le device sur lequel s’applique la classe, au départ, le device physique.
Le handbook comporte un chapitre très complet sur GEOM [3] : ” Chapter 18 GEOM : Modular Disk Transformation “.
2. Introduction
Je vais vous conter l’histoire des aventures de Sprouty, l’ami fidèle du GEOM Vert, qui a décidé de ranger son placard à nourriture.
Sprouty est un brin désordonné, il se retrouve assez vite avec des boîtes de maïs doux plein les mains sans en reconnaître les différentes préparations, ni les dates limites de consommation. Heureusement, GEOM Vert va l’aider à s’y retrouver et va même en profiter pour lui montrer des petites astuces.
3. ” GEOM Vert ! GEOM Vert ! Viens voir ! ” (les bienfaits de glabel)
Sprouty est bien embêté, il a plein de boîtes de maïs étalées partout et plus aucune n’a d’étiquette. Il avait bien constitué des petits tas de boîtes selon les dates limites de consommation et les différentes recettes, mais le chat est passé par-là et les boîtes sont toutes mélangées.
Sprouty est allé chercher son scanner à code-barres portable et commence à scanner les étiquettes de code-barres restant sur les boîtes de maïs, mais c’est quelque chose de bien laborieux, car, à chaque passage, il est obligé de regarder ce qu’affiche le /var/log/messages de son scanner à code-barres pour savoir si c’est une boîte de maïs qui est vue en da0 ou en da3, et pouvoir ensuite utiliser le bon ouvre-boîte de la marque mount.
GEOM Vert, passant par-là par hasard, voit son ami complètement noyé sous ses boîtes de maïs en train de perdre beaucoup de temps à trier son garde-manger.
GEOM Vert : ” Sprouty, mais que fais-tu ? “
Sprouty : ” GEOM Vert ! Je suis heureux de te voir ; regarde ce tas de boîtes de maïs, je n’arrive pas à m’y retrouver. “
GEOM Vert : ” Ok, je peux t’aider ? “
GEOM Vert prend alors deux boîtes de maïs identiques, les manipule et les insère dans le scanner de Sprouty :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
% glabel label bsdkey da0 kernel: umass0: <Intelligent Stick Intelligent Stick, class 0/0, rev 1.10/1.00, addr 2> on uhub0 kernel: da0 at umass-sim0 bus 0 target 0 lun 0 kernel: da0: <USB Card IntelligentStick 2.01> Removable Direct Access SCSI-2 device kernel: da0: 1.000MB/s transfers kernel: da0: 255MB (522688 512 byte sectors: 64H 32S/T 255C) kernel: GEOM_LABEL: Label for provider da0a is label/bsdkey. kernel: umass1: <Intelligent Stick Intelligent Stick, class 0/0, rev 1.10/1.00, addr 3> on uhub0 kernel: da1 at umass-sim1 bus 1 target 0 lun 0 kernel: da1: <USB Card Intelligent Stic 2.02> Removable Direct Access SCSI-2 device kernel: da1: 1.000MB/s transfers kernel: da1: 255MB (522688 512 byte sectors: 64H 32S/T 255C) |
GEOM VERT : ” Regarde Sprouty, tu vois la première boîte est vue comme da0 et la seconde comme da1. “
Sprouty lui répond alors : ” Oui j’ai vu, mais cela ne m’aide pas, car si je change l’ordre d’insertion, les daX changent aussi ! “
GEOM Vert fait tranquillement observer à Sprouty la dernière ligne de la première boîte : ” Regarde bien la ligne avec GEOM_LABEL, elle comporte le label bsdkey “.
GEOM Vert retire alors les 2 boîtes de maïs du scanner et les insère dans un ordre différent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
kernel: umass0: <Intelligent Stick Intelligent Stick, class 0/0, rev 1.10/1.00, addr 2> on uhub0 kernel: da0 at umass-sim0 bus 0 target 0 lun 0 kernel: da0: <USB Card Intelligent Stic 2.02> Removable Direct Access SCSI-2 device kernel: da0: 1.000MB/s transfers kernel: da0: 255MB (522688 512 byte sectors: 64H 32S/T 255C) kernel: umass1: <Intelligent Stick Intelligent Stick, class 0/0, rev 1.10/1.00, addr 3> on uhub0 kernel: da1 at umass-sim1 bus 1 target 0 lun 0 kernel: da1: <USB Card IntelligentStick 2.01> Removable Direct Access SCSI-2 device kernel: da1: 1.000MB/s transfers kernel: da1: 255MB (522688 512 byte sectors: 64H 32S/T 255C) kernel: GEOM_LABEL: Label for provider da1a is label/bsdkey. |
Sprouty s’étonne alors : ” Oh ! L’ordre des daX a bien changé, mais on retrouve le GEOM_LABEL sur la bonne boîte ! “
Sprouty (se tournant vers GEOM Vert) : ” GEOM Vert, est-il possible d’utiliser le label bsdkey pour m’y retrouver dans mes boîtes de maïs ? “
GEOM Vert explique à son ami que quel que soit l’ordre d’introduction de la boîte de maïs avec le GEOM_LABEL, la première fois en umass1/da1, la seconde fois en umass0/da0, le label label/bsdkey est reconnu par le scanner à code-barres dans /dev/label/.
GEOM Vert prend alors le scanner portable des mains de Sprouty et commence à taper sur l’interface. ” Regarde, le label se retrouve ici, ce qui te permet d’effectuer toutes les opérations courantes (newfs, fsck, mount) sur la boîte /dev/label/bsdkey sans avoir à te préoccuper du nom réel da0 ou daX“.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
% ls -al /dev/label/ crw-r----- 1 root operator 0, 131 bsdkey % fsck -t ffs /dev/label/bsdkey % mount /dev/label/bsdkey /mnt && mount ** /dev/label/bsdkey ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 4 files, 67 used, 126400 free (24 frags, 15797 blocks, 0.0% fragmentation) /dev/label/bsdkey on /mnt (ufs, local) |
Sprouty reste sans voix face à cette démonstration pourtant simple et un sourire commence à se dessiner lentement sur son visage. ” Tu veux dire que j’ai juste à trouver des noms distincts pour mes boîtes de maïs et je pourrais les utiliser par leur nom indépendamment de l’ordre d’insertion dans mon scanner ? “
” C’est tout à fait ça “, lui répond GEOM Vert, ” de plus, GEOM_LABEL écrivant ses données dans le dernier secteur du consumer, il est tout à fait possible de glabelliser des boîtes qui ne sont pas en UFS (en VFAT, au hasard, comme les Memory Card d’APN par exemple, ou en utilisant les labels ext2/3 des partitions Linux). Le montage GEOM ne se fera alors pas dans l’arborescence /dev/label/, mais dans /dev/msdosfs/ ou /dev/ext2fs/ “.
1 2 3 4 5 |
kernel: da2: <JetFlash TS1GJF150 8.07> Removable Direct Access SCSI-2 device kernel: da2: 40.000MB/s transfers kernel: da2: 976MB (1998848 512 byte sectors: 64H 32S/T 976C) kernel: GEOM_LABEL: Label for provider da2s1 is msdosfs/USBKEY. |
Sprouty, habituellement si volubile, est éberlué et réfléchit intensément à ce que vient de lui montrer son ami GEOM Vert.
4. Les différents modèles de scanner (vnconfig/mdconfig/ggatel)
NOTE
Le traducteur a tenu à laisser dans la langue d’origine les expressions de cette magnifique histoire, toutefois pour la bonne compréhension de ce qui va suivre, le lecteur devra avoir à l’esprit que la boîte de cœurs de palmiers dont il est question est en fait un fichier monté sur une loopback et utilisé comme filesystem.
GEOM Vert profite d’avoir l’attention de Sprouty pour lui faire lire les pages de manuel citées au début et insiste sur quelques points liés aux différentes versions de son scanner à code-barres.
” Avant la version 5.X de ton scanner, tu utilisais vnconfig [4] pour monter des boîtes de cœurs de palmiers. Depuis la version 5.X, tu utilises mdconfig [5] pour le même usage “.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
% dd if=/dev/zero of=disk0.img bs=1m count=512 % ls -alh disk* -rw-r--r-- 1 root wheel 512M disk0.img % mdconfig -a -t vnode -f disk0.img md1 % newfs /dev/md1 /dev/md1: 512.0MB (1048576 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 128.02MB, 8193 blks, 16448 inodes. super-block backups (for fsck -b #) at: 160, 262336, 524512, 786688 % mount /dev/md1 /mnt |
Le fichier disk0.img est devenu une véritable boîte de cœurs de palmiers…
GEOM Vert défait le résultat des commandes qu’il vient d’exécuter sur le scanner de Sprouty et lui explique qu’il va utiliser la commande GEOM ggatel [6] pour le même résultat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
% ggatel create -u 0 disk0.img % ls -al /dev/ggate* crw-r----- 1 root operator 0, 124 /dev/ggate0 % fsck -t ffs /dev/ggate0 ** /dev/ggate0 ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 3 files, 2 used, 253813 free (21 frags, 31724 blocks, 0.0% fragmentation) |
5. Les boîtes de maïs et les boîtes d’asperges
GEOM Vert a envie d’aller plus loin dans la démonstration des possibilités du scanner à code-barres et il crée plusieurs fichiers sur le scanner à code-barres de son ami pour simuler des boîtes d’asperges et de maïs.
Les différentes boîtes d’asperges auront pour petit nom diskX.img avec X allant de 0 à 4 et les boîtes de maïs se prénommeront usbX.img avec X allant de 0 à 2.
1 2 3 4 5 6 7 8 |
-rw-r--r-- 1 root wheel 512M disk0.img -rw-r--r-- 1 root wheel 512M disk1.img -rw-r--r-- 1 root wheel 512M disk2.img -rw-r--r-- 1 root wheel 512M disk3.img -rw-r--r-- 1 root wheel 512M disk4.img -rw-r--r-- 1 root wheel 256M usb0.img -rw-r--r-- 1 root wheel 256M usb1.img -rw-r--r-- 1 root wheel 256M usb2.img |
Les disques et les clés USB seront glabelisées de diskA à diskE et de usbA à usbC ce qui donne le tableau suivant :
GEOM Vert explique que la liste des devices est entre parenthèses, car c’est justement une dépendance dont il veut s’affranchir et qu’il n’utilisera que les devices via leur nom de label. Une fois tous ces fichiers images créés, cela donne ceci :
1 2 3 4 5 6 7 8 9 10 |
% ls -al /dev/label/ crw-r----- 1 root operator 0, 137 diskA crw-r----- 1 root operator 0, 138 diskB crw-r----- 1 root operator 0, 139 diskC crw-r----- 1 root operator 0, 140 diskD crw-r----- 1 root operator 0, 141 diskE crw-r----- 1 root operator 0, 133 usbA crw-r----- 1 root operator 0, 135 usbB crw-r----- 1 root operator 0, 136 usbC |
5.1 Faire des miroirs avec des boîtes de maïs (gmirror)
…ou comment faire du raid1 soft en 2 minutes. GEOM Vert a envie d’épater son ami Sprouty : il l’interpelle et commence à taper une série de commandes sur l’interface du scanner à code-barres.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
% gmirror load % gmirror label -v -b round-robin gm0 /dev/label/diskA Metadata value stored on /dev/label/diskA. Done. % gmirror status Name Status Components mirror/gm0 COMPLETE ggate0 % ls -al /dev/mirror/ crw-r----- 1 root operator 0, 155 gm0 % gmirror insert gm0 /dev/label/diskB % gmirror status gm0 Name Status Components mirror/gm0 DEGRADED ggate0 ggate1 (27%) |
GEOM Vert explique : ” Bien évidemment, pendant ce temps-là, rien ne nous empêche de monter /dev/mirror/gm0 dans un répertoire de travail sur le scanner et d’effectuer des opérations dessus. De la même manière, rien ne nous empêche de créer un nom de label pour ce volume gm0 “.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
% glabel create raid1 /dev/mirror/gm0 % glabel list mirror/gm0 Geom name: mirror/gm0 Providers: 1. Name: label/raid1 Mediasize: 536870400 (512M) Sectorsize: 512 Mode: r0w0e0 secoffset: 0 offset: 0 seclength: 1048575 length: 536870400 index: 0 Consumers: 1. Name: mirror/gm0 Mediasize: 536870400 (512M) Sectorsize: 512 Mode: r0w0e0 |
GEOM Vert informe Sprouty que les labels diskA et diskB auront disparu.
5.2 Faire des miroirs avec des boîtes de maïs à distance (ggated et ggatec)
Non content d’avoir montré à Sprouty comment faire des miroirs avec ses boîtes de maïs, GEOM Vert va maintenant lui montrer comment faire la même chose à distance (à travers le réseau, simulé ici par 127.0.0.1).
Sprouty reste très attentif, même s’il ne comprend pas encore toutes les commandes que tape son ami. Les deux parties du miroir vont être configurées sur des serveurs ” client ” et ” remote “.
Dans un premier temps, GEOM Vert configure le daemon qui va recevoir l’autre moitié du miroir sur le serveur ” remote “.
1 2 3 4 |
% cat /home/exports.file 127.0.0.1/32 RW /home/diskNetwork.img % ggated -a 127.0.0.1 /home/exports.file |
Ensuite, sur le serveur ” client “, on s’attache à la boîte de maïs du serveur ” remote ” :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
% ggatec create -o rw 127.0.0.1 /home/diskNetwork.img ggate0 % ggatel list -v NAME: ggate0 info: 127.0.0.1:3080 /home/diskNetwork.img access: read-write timeout: 0 queue_count: 0 queue_size: 1024 references: 2 mediasize: 536870912 (512M) sectorsize: 512 mode: r0w0e0 |
” Vu du serveur client “, explique GEOM Vert, ” c’est comme si le miroir de boîtes de maïs était parfaitement local. On peut donc associer nos boîtes de maïs en miroir comme tout à l’heure. “
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
% gmirror load % gmirror label -v -b round-robin gm1 /dev/ggate1 Metadata value stored on /dev/ggate1. Done. % gmirror insert gm1 /dev/ggate0 % gmirror status Name Status Components mirror/gm1 DEGRADED ggate1 ggate0 (19%) % gmirror status Name Status Components mirror/gm1 COMPLETE ggate1 ggate0 % newfs /dev/mirror/gm1 /dev/mirror/gm1: 512.0MB (1048572 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 128.00MB, 8192 blks, 16384 inodes. super-block backups (for fsck -b #) at: 160, 262304, 524448, 786592 |
Pour parfaire la démonstration, GEOM Vert place un fichier dans le volume raid1 (gm1), stoppe ce volume, démonte les images disques locale et réseau (disk4.img et 127.0.0.1:3080 /home/diskNetwork.img) et tue le daemon ggated.
Maintenant, GEOM Vert demande à Sprouty d’imaginer que le serveur ” client ” a rencontré un problème (des lapins sont venus manger ses boîtes de maïs). Il va utiliser la copie du serveur ” remote ” remontée dans un volume gmirror dégradé.
Sur le serveur ” remote “, GEOM Vert attache la boîte de maïs qui était celle distante.
1 2 3 |
% ggatel create diskNetwork.img ggate0 |
Il regarde sur quel nom de miroir gmX elle était attachée :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
% gmirror dump ggate0 Metadata on ggate0: magic: GEOM::MIRROR version: 4 name: gm1 mid: 3825435594 did: 1080613717 all: 2 genid: 0 syncid: 1 priority: 0 slice: 4096 balance: round-robin mediasize: 536870400 sectorsize: 512 syncoffset: 0 mflags: NONE dflags: NONE hcprovider: provsize: 536870912 MD5 hash: 8aacc31992e81130db00dbdb410f1bcb |
Et il recrée un miroir partiel, le vérifie et le monte :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
% gmirror insert gm1 ggate0 gmirror: Not all disks connected. % gmirror list Geom name: gm1 State: DEGRADED Components: 2 Balance: round-robin Slice: 4096 Flags: NONE GenID: 0 SyncID: 2 ID: 3825435594 Providers: 1. Name: mirror/gm1 Mediasize: 536870400 (512M) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ggate0 Mediasize: 536870912 (512M) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 2 ID: 1080613717 % fsck -t ffs /dev/mirror/gm1 ** /dev/mirror/gm1 ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 3 files, 2 used, 253844 free 28 frags, 31727 blocks, 0.0% fragmentation) % mount /dev/mirror/gm1 /mnt % ls -al /mnt total 6 drwxr-xr-x 3 root wheel 512 . drwxr-xr-x 20 root wheel 512 .. drwxrwxr-x 2 root operator 512 .snap -rw-r--r-- 1 root wheel 0 gmirror1.txt |
Sprouty est épaté, subjugué par la démonstration de GEOM Vert qui paraît tellement simple lorsqu’elle est orchestrée par ses soins.
6. Protégeons notre miroir de boîtes de maïs
Continuant sur sa lancée, GEOM Vert a envie de montrer à Sprouty comment protéger ses boîtes de maïs des museaux un peu trop curieux. GEOM Vert lui demande alors un mot de passe secret : ” raide one “, lui répond-il.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
% geli init -e aes -l 256 -s 4096 /dev/label/raid1 Enter new passphrase:<raid1> Reenter new passphrase:<raid1> % geli attach /dev/label/raid1 Enter passphrase:<raid1> ls -al /dev/label/ crw-r----- 1 root operator 0, 138 raid1 crw-r----- 1 root operator 0, 158 raid1.eli % newfs /dev/label/raid1.eli /dev/label/raid1.eli: 512.0MB (1048568 sectors) lock size 16384, fragment size 4096 using 4 cylinder groups of 128.00MB, 8192 blks, 8192 inodes. super-block backups (for fsck -b #) at: 160, 262304, 524448, 786592 |
Pour prouver à Sprouty qu’il retrouvera bien ses boîtes de maïs originales dans le container protégé, GEOM Vert crée une étiquette témoin.
1 2 |
mount /dev/label/raid1.eli /mnt touch /mnt/SuperSecretFile |
7. Mettre le tout à la banque (gshsec)
Comme Sprouty ne comprend pas très bien ce que veut lui expliquer GEOM ?Vert, ce dernier va tenter d’utiliser une métaphore issue d’un monde irréel qu’ils ont vu tous les deux lors de la projection d’un film de science-fiction.
” Rappelle-toi ce film : il y avait un coffre à la banque. L’acteur principal et son conseiller avaient chacun une clé les deux, une fois réunies, leur permettaient d’ouvrir le coffre. Sans la clé de son conseiller, il ne pouvait pas avoir accès à son coffre tout seul ; de même, son conseiller ne pouvait avoir accès au contenu du coffre de l’acteur sans sa clé. “
GEOM Vert : ” Dans ce que je veux te montrer, c’est un peu la même chose, nous allons remplacer ces deux clés mécaniques par des ouvre-boîtes qui contiendront chacun une partie d’un fichier servant à accéder à un container encrypté. Je te demande un peu d’attention, car cela n’est pas forcément simple. “
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
% gshsec label -v secret /dev/label/usbA /dev/label/usbB Metadata value stored on /dev/label/usbA. Metadata value stored on /dev/label/usbB. Done. kernel: GEOM_SHSEC: Device secret created (id=1623862870). kernel: GEOM_SHSEC: Disk ggate10 attached to secret. kernel: GEOM_SHSEC: Cannot add disk label/usbA to secret (error=17). kernel: GEOM_SHSEC: Disk ggate11 attached to secret. kernel: GEOM_SHSEC: Device secret activated. kernel: GEOM_SHSEC: Cannot add disk label/usbB to secret (error=17). % ls -al /dev/shsec/ crw-r----- 1 root operator 0, 158 secret |
GEOM Vert explique : “Chaque ouvre-boîte (usbA et usbB) comporte la moitié des informations de la clé accessible via /dev/shsec/secret. Par contre, les précédents labels usbA et usbB auront disparu après l’exécution de cette commande. Seul le label secret subsistera. Celui-ci sera automatiquement monté dès l’insertion des deux clés. Si on retire une des deux clés USB, le device secret est supprimé. “
1 2 3 4 5 |
% ggatel destroy -u 11 kernel: GEOM_SHSEC: Device secret removed. kernel: GEOM_LABEL: Label label/usbB removed. kernel: GEOM_GATE: Device ggate11 destroyed. |
“On réinsère la seconde clé USB (peu importe sous quel device). Le device secret est de nouveau accessible. “
1 2 3 4 |
% ggatel create usb1.img kernel: GEOM_SHSEC: Disk ggate5 attached to secret. kernel: GEOM_SHSEC: Device secret activated. |
GEOM Vert : ” Regarde bien Sprouty. On change l’accès au volume encrypté créé précédemment en passant de l’utilisation d’une passphrase à l’utilisation d’une clé. “
1 2 3 |
% cat /dev/shsec/secret | \ geli setkey -P -K - /dev/label/raid1 |
On vérifie que l’accès avec la clé fonctionne (sans passphrase) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
% geli detach /dev/label/raid1 % cat /dev/shsec/secret | \ geli attach -p -k - /dev/label/raid1 % ls -al /dev/label/ crw-r----- 1 root operator 0, 138 raid1 crw-r----- 1 root operator 0, 135 raid1.eli % fsck -t ffs /dev/label/raid1.eli % mount /dev/label/raid1.eli /mnt ** /dev/label/raid1.eli ** Last Mounted on /mnt ** Phase 1 - Check Blocks and Sizes ** Phase 2 - Check Pathnames ** Phase 3 - Check Connectivity ** Phase 4 - Check Reference Counts ** Phase 5 - Check Cyl groups 3 files, 2 used, 128968 free (12 frags, 32239 blocks, 0.0% fragmentation) % ls -al /mnt/ drwxrwxr-x 2 root operator 512 .snap -rw-r--r-- 1 root wheel 0 SuperSecretFile |
Sprouty vient d’en prendre plein la vue. Il ne s’attendait pas à posséder un scanner à code-barres si puissant.
Il va lui falloir procéder à plusieurs expérimentations avec des boîtes de maïs, des ouvre-boîtes et des boîtes d’asperges pour réellement comprendre ce qu’a fait son ami GEOM Vert sous ses yeux.
GEOM Vert, absorbé par l’écran du scanner avec lequel il s’amuse maintenant depuis plusieurs minutes, continue de taper sur l’interface, et propose à Sprouty de vérifier par lui-même ce qu’il vient de faire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
% gshsec list Geom name: secret State: UP Status: Total=2, Online=2 ID: 1623862870 Providers: 1. Name: shsec/secret Mediasize: 268434944 (256M) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ggate5 Mediasize: 268435456 (256M) Sectorsize: 512 Mode: r0w0e0 Number: 0 2. Name: ggate6 Mediasize: 268435456 (256M) Sectorsize: 512 Mode: r0w0e0 Number: 1 % ggatel list -v NAME: ggate5 info: usb0.img access: read-write timeout: 0 queue_count: 0 queue_size: 1024 references: 2 mediasize: 268435456 (256M) sectorsize: 512 mode: r0w0e0 NAME: ggate6 info: usb1.img access: read-write timeout: 0 queue_count: 0 queue_size: 1024 references: 2 mediasize: 268435456 (256M) sectorsize: 512 mode: r0w0e0 % gmirror list Geom name: gm0 State: COMPLETE Components: 2 Balance: round-robin Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 983470882 Providers: 1. Name: mirror/gm0 Mediasize: 536870400 (512M) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ggate0 Mediasize: 536870912 (512M) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 976669846 2. Name: ggate1 Mediasize: 536870912 (512M) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 3391284983 |
Pour aider Sprouty à assimiler ces dernières manipulations, GEOM Vert lui conseille de lire la page de manuel sur gshsec [7].
8. C’est l’heure de plex-school (gvinum)
Pour sa démonstration finale, GEOM Vert décide de réutiliser les boîtes d’asperges pour démontrer la facilité d’utilisation du jeu plex-school. Ce jeu consiste à disposer plusieurs boîtes de maïs dans une ” grappe ” logique, de capacité plus grande que chaque boîte de maïs, avec une ou plusieurs boîtes de maïs en spare. Si une boîte de maïs vient à être défectueuse, c’est une des boîtes en spare qui prend le relais, assurant la continuité de la grappe logique.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
% for i in 0 1 2 3 4 do ggatel create -u ${i} disk${i}.img done % ggatel list -v | grep -E 'NAME|info' NAME: ggate0 info: disk0.img NAME: ggate1 info: disk1.img NAME: ggate2 info: disk2.img NAME: ggate3 info: disk3.img NAME: ggate4 info: disk4.img % cat gvinum.txt drive vol1_disk1 device /dev/ggate0 drive vol1_disk2 device /dev/ggate1 drive vol1_disk3 device /dev/ggate2 drive vol1_disk4 device /dev/ggate3 drive vol1_disk5 device /dev/ggate4 hotspare volume raid5_vol1 plex org raid5 261k sd drive vol1_disk1 sd drive vol1_disk2 sd drive vol1_disk3 sd drive vol1_disk4 % gvinum create gvinum.txt 5 drives: D hotspare State: up /dev/ggate4 A: 511/511 MB (100%) D vol1_disk4 State: up /dev/ggate3 A: 0/511 MB (0%) D vol1_disk3 State: up /dev/ggate2 A: 0/511 MB (0%) D vol1_disk2 State: up /dev/ggate1 A: 0/511 MB (0%) D vol1_disk1 State: up /dev/ggate0 A: 0/511 MB (0%) 1 volume: V raid5_vol1 State: up Plexes: 1 Size: 1535 MB 1 plex: P raid5_vol1.p0 R5 State: ok Subdisks: 4 Size: 1535 MB 4 subdisks: S raid5_vol1.p0.s3 State: up D: vol1_disk4 Size: 511 MB S raid5_vol1.p0.s2 State: up D: vol1_disk3 Size: 511 MB S raid5_vol1.p0.s1 State: up D: vol1_disk2 Size: 511 MB S raid5_vol1.p0.s0 State: up D: vol1_disk1 Size: 511 MB % ls -l /dev/gvinum/ total 1 dr-xr-xr-x 2 root wheel 512 plex crw-r----- 1 root operator 0, 128 raid5_vol1 dr-xr-xr-x 2 root wheel 512 sd |
GEOM Vert prend le temps d’expliquer à Sprouty que pour l’instant toutes les commandes de vinum n’ont pas encore été implémentées dans gvinum (voir la section BUGS [8]) et qu’il ne serait pas judicieux de l’utiliser pour garder des informations importantes dans ses boîtes de maïs.
9. Il est l’heure de lire le journal (gjournal)
Afin de terminer tranquillement tout ce qu’il a montré à Sprouty, GEOM Vert termine sur une fonctionnalité disponible dans la toute fraîche version 6.2-STABLE de son scanner à code-barres. Il s’agit de la possibilité de tenir un journal des déplacements des boîtes de maïs sur les différentes étagères du garde-manger de Sprouty.
Sprouty demande alors à GEOM Vert s’il ne pourrait pas utiliser ce journal pour remplacer les étiquettes perdues de ses boîtes de maïs. GEOM Vert lui répond : ” Tu te rendras compte quand tu auras pratiqué un peu ton scanner de code-barres que cela ne sert à rien “. Sprouty reste alors des heures à essayer de refaire calmement tout ce que lui a montré GEOM Vert sur son scanner à code-barres dont il ignorait la plupart des possibilités.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
% ggatel create disk3.img ggate0 % gjournal label -f -s 1048576 ggate0 kernel: GEOM_JOURNAL: Journal 952452390: ggate0 contains data. kernel: GEOM_JOURNAL: Journal 952452390: ggate0 contains journal. kernel: GEOM_JOURNAL: Journal ggate0 clean. kernel: GEOM_JOURNAL: BIO_FLUSH not supported by ggate0. % ls -al /dev/ | grep gga crw-r----- 1 root operator 0, 118 ggate0 crw-r----- 1 root operator 0, 119 ggate0.journal % gjournal list Geom name: gjournal 3994593347 ID: 3994593347 Providers: 1. Name: ggate0.journal Mediasize: 535821824 (511M) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: ggate0 Mediasize: 536870912 (512M) Sectorsize: 512 Mode: r1w1e1 Jend: 536870400 Jstart: 535821824 Role: Data,Journal |
GEOM Vert s’éloigne sans bruit. Il a envie de jouer avec d’autres fonctionnalités de son propre scanner à
code-barres.
Conclusion (gconclu)
À travers cette simple ” mise en jambes “, nous avons voulu vous présenter les différentes possibilités de GEOM. Mais il ne s’agit bien que d’une présentation ! Il est possible d’en faire un peu plus et pour aller plus loin avec GEOM en particulier (et avec FreeBSD en général), il existe une quantité d’excellentes documentations : les pages de manuel et le handbook [9].
N’hésitez surtout pas à en user et en abuser !
Références
[1, 2, 4, 5, 6, 7, 8] pages de manuel http://www.freebsd.org/cgi/man.cgi
[3] http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/geom.htm
[9] http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/