Connaissez-vous Marionnet ?
Non ? Et bien voilà, c’est l’occasion !
Marionnet est un simulateur d’architecture réseau. Il permet aux novices qui aimeraient s’y coller -mais qui n’ont pas les autorisations ou le matériel requis- de se familiariser avec toutes les problématiques que vous, ASR, rencontrez lorsque vous arrivez dans un chaos de réseau à l’ancienne et qu’il faut tout casser pour tout reconstruire. Et intelligemment.
Marionnet met à disposition des objets -switches, routers, hosts, …- que vous pouvez alors organiser et structurer dans l’espace, dont vous pouvez analyser les processes en cours -par exemple sous les hosts- et vérifier que tout fonctionne avant justement de tout casser, de tout remettre, et de s’apercevoir que ça ne fonctionne pas -Diantre !
Marionnet est un projet qui s’inscrit donc plus dans un contexte d’enseignement, et fonctionne grâce au User Mode Linux, fonctionnalité des noyaux récents Linux (oui, le projet tourne sur du Linux, mais continuez à lire, vous serez agréablement surpris). UML permet notamment de lancer un ou plusieurs noyaux Linux comme s’il ne s’agissait que d’applications toutes simples.
Le projet est disponible soit en sources -./configure; make && make install, enfin, vous connaissez la chanson-, soit via un LiveCD, et tout ça, sur le site officiel.
Voilà ! Avec ça, les DSI n’auront plus d’excuse pour vous enlever tout le fun de la conception d’une architecture !
Une grande partie de l’activité d’un Administrateur Système consiste à suivre, à bichonner, à soigner et à updater ses serveurs.
Certains ont choisi de le faire manuellement, comme sur une bonne vieille architecture constituée d’une poignée de serveurs.
Sachez qu’il existe plusieurs moyens de s’en dispenser, pas totalement, mais suffisamment pour pouvoir se dégager du temps libre et donc attaquer des activités à plus forte plus-value et plus intéressantes.
Cfengine est un puissant outil qui permet de s’affranchir des contraintes machinales dues à un parc de serveurs dépassant en nombre notre enjouement à passer tout bien tout comme il faut manuellement et unitairement. Le but du jeu étant de centraliser et d’organiser les traitements selon des classes d’objet.
Cfengine fonctionne en utilisant TCP/IP (port 5308 tcp/udp) et les outils libres, en mode client / serveur, et dont les principaux acteurs sont :
La version 3 est implémentée à l’heure où j’écris ces lignes, c’est donc sur elle que je vais baser mon article.
Mais avant cela, pourquoi dois-je choisir entre les versions ? Et bien parce que la dernière version amène un schisme au niveau du langage utilisé par Cfengine. Malgré tout, la Communauté a fait les choses intelligemment en faisant collaborer les binaires de Cfengine 2 et ceux de Cfengine 3.
On peut donc sans soucis utiliser la version 2 de cfservd avec les versions 3 de cf-agent. C’est ce qu’on appelle être run-time compatible.
Pour analyser la version 3, il est donc nécessaire de détailler un peu le fonctionnement sous la version 2, et c’est ce que nous allons faire.
Tout d’abord, BONNE ANNEE à tous les courageux qui ont réussi à se convaincre de reprendre le boulot sur leur site de travail -car maintenant, avec tous les moyens qu’il existe, il est largement possible de skipper l’implication physique, avec tout ce qu’elle entraîne, tout gardant la charge et la pleine responsabilité de l’infrastructure-.
Donc nous voila de retour sur les filesystems pour continuer -et éventuellement finir, tout dépend de ce qui vous reste en motivation le sujet.
Pour rappeler le contexte, ceci n’est qu’un épluchage de filesystems échantillonnés au hasard des rencontres, le tout rangé comme il faut dans les catégories qui vont bien. Si vous êtes curieux des épisodes précédents mais que le scroll down est trop pénible (je comprends, je comprends), vous pouvez juste placer votre souris sur le lien <- ici et vous laisser transporter dans la première partie de cet article !
Rapidement, nous nous sommes pluché les généralités, l’architecture logique, les classiques et les extensibles / haute disponibilités… Non, je n’ai pas prévu les apéritifs… Mais si vous avez faim, on attaque !
Les réseaux.
A l’heure de la communication et des flux de données, il aurait été inconcevable de ne pas mentionner les systèmes de fichier distants. En effet, il est possible d’exporter un système de fichier et de le rendre accessible par plusieurs machines. L’avantage concerne notamment le fameux « Zero Conf », et donc la possibilité d’être complètement -ou presque- indépendant de la machine que l’on utilise. Cela permet aussi de beaucoup mieux contrôler, sécuriser les accès et les droits sur ce système de fichiers, de centraliser les traitements et d’apporter une certaine robustesse et une certaine portabilité.
Le plus connu est NFS (Network File System). Il existe à l’heure où j’écris ces lignes, 2 versions qui sont exclusives l’une de l’autre, la version 3 et la version 4. La version 4 est celle désormais supportée par défaut.
NFS fonctionne comme un export de répertoire, qui peut être fait de manière lâche ou en contraignant les accès. Les machines autorisées peuvent alors, de manière manuelle ou automatique, monter ces répertoires, en lecture, en écriture et/ou exécution et les utiliser comme s’ils faisaient partie intégrantes de leur filesystem local. Si l’on veut savoir de quoi il en retourne, il suffit alors de lancer un netstat, un rpcinfo -p, un nmap ou un nfsstat sur les machines impliquées.
Globalement, les différences entre NFSv3 et NFSv4 tiennent à une réécriture du code pour optimisation et améliorations. Elles concernent notamment :
NFSv4 est statefull (il gère les états, ce qui n’était pas le cas de NFSv3), utilise la notion de répertoires virtuels, et supporte IPv6 côté client. L’unique port auquel il s’adresse est le 2049:tcp.
Il est bien sûr tout à fait possible de migrer de NFSv3 à NFSv4. Et pour ceux que cela intéresse, un petit lien sur les benchmarks réalisés sur les 2 versions et des infos sur la bête en question !
Effectivement, NFS est bien visible, beaucoup utilisé, mais il existe d’autres filesystems dans cette catégorie, comme SAMBA, qui présente l’avantage d’être accessible nativement par Windows et par Mac OS X. En effet, à l’heure actuelle, aucun support n’a été intégré au nouveau noyau de Mac concernant la prise en charge d’NFSv4. Bien entendu, un courageux développeur a bien tenté de créer un module pour pallier au manque -d’autant plus éprouvant qu’NFSv4 est maintenant devenu standard sous Linux- mais le résultat est aléatoire et peut sans problème et à répétition, faire planter outrageusement Mac OS X. Le module est accessible ici.
Les outils et fichiers importants :
Chers lecteurs, chères lectrices, laissez moi vous souhaiter d’excellentes fêtes de fin d’année !!!
MERRY X*MAS ET A L’ANNEE PROCHAINE POUR DE NOUVELLES MANIP’ !!!
Et croyez-moi, j’ai un bon petit bout de planning bien chargé pour vous et vos serveurs !!!
Bonjour readers et readeuses acharnés.
Aujourd’hui, nous allons parler des différents système de fichiers -Filesystem, pour briller en société- qui font la richesse et la pluridisciplinarité de Linux, et comme il y en a beaucoup et de toutes sortes, nous allons découper ça bien propre en plusieurs parties. Utilisateur Windows, ne t’inquiète pas ! Ton heure viendra, mais pas tout de suite quand même, parce que, même avec Windows 7 (dites Séveuuun), il y a encore un petit bout de chemin à faire.
Avertissement pour les puristes de la technique :
Cette note est tournée grand public et la mise en œuvre des techniques décrites ci-dessous ne sera pas détaillée, même si quelques liens propices vous guideront vers des howtos bien ficelés.
Petites généralités.
Selon notre ami Wikipédia, un système de fichier est un ensemble structuré qui permet d’organiser, de localiser, d’accéder et de maintenir des données. Le tout sur un support persistant, c’est-à-dire qui gardera les informations en l’état à l’extinction de la machine. Le plus communément, c’est donc sur votre (vos ?) disque(s) dur(s) que vous retrouverez vos fichiers.
Afin de pouvoir maintenir toutes ces informations, le système de fichier crée lui-même d’autres informations, relatives, elles, aux fichiers en eux-même. C’est ce que l’on appelle des métadonnées. Sous Linux, ce sont les inodes qui contiennent ces métadonnées. Les inodes sont des structures de données contenant toutes les informations utiles d’un fichier, permissions comprises. Elles sont liées aux fichiers par une autre structure de données, le dentry. Les fichiers, les inodes et les dentries sont contenus dans ce que l’on appelle le superblock, entité qui est chargée de la maintenance et de la gestion de la structure de donnée. Il contient le nom du filesystem (par exemple ext4), sa taille, son état, des métadonnées et une référence aux bloc devices. Le superbloc est la racine du filesystem.
Pour votre curiosité, Windows, lui, stocke directement ces métadonnées dans le fichier lui-même.
De visu, le système de fichier se présente comme une arborescence de répertoires dont la racine est /:
/
/bin /boot /dev /etc /home /lib /lib64 /lost+found /media /mnt /opt /proc /root /sbin /tmp /usr /var
Ce que vous ne voyez pas, mais que vous avez pu rencontrer si vous avez, par curiosité ou par science, partitionné votre disque manuellement, c’est la swap.
La swap est en fait une petite partie du disque réservée à la mémoire. Du fait qu’elle soit située sur le disque, elle est beaucoup plus lente d’accès que la mémoire vive en elle-même, mais elle présente un avantage dans le cas où vous êtes submergé par une occupation excessive de la mémoire vive par un ou plusieurs processus. Dans ce cas, au lieu de vous bloquer définitivement pour cause de pénurie de RAM, on utilise la swap. Une règle de pouce consiste à créer une swap de taille égale à la quantité de RAM présente sur la machine.
Organisation logique.
Mais revenons-en à nos moutons. Vous vous doutez bien qu’avec la quantité et la diversité des médias existants en ce bas-monde, le système de fichier Linux ne peut raisonnablement pas être livré tel quel, figé sur une implémentation pure et dure qui serait relative à un et un seul type de média, ni être décliné pour chacun des médias existant sur cette petite planète. D’une part parce qu’il en existe vraiment beaucoup, et d’autre part parce que cela nécessiterait de faire massivement évoluer le code lors d’une évolution de média. Bref, pas du tout portable, aucune scalabilité, le cauchemar. Il en est tout autrement.
User-Space, Kernel-Space.
En effet, le système de fichier Linux distingue 2 couches abstraites. Pourquoi ? Et bien pour séparer les traitements effectués par le système de fichier des manipulations de device à proprement parler.

Le schéma parle de lui-même. Nous pouvons donc voir que toutes les interactions avec le User-Space (autrement dit, tout ce qui touche à l’environnement utilisateur) passe par l’interface SYSTEM CALL, Kernel-Space qui, elle-même, devra s’adresser à un système de fichier virtuel (VFS) pour que ses traitements soient effectués à proprement dit. VFS abstrait les interfaces qui lui viennent d’un export de l’individual filesystem. Il gère également les informations concernant les filesystems supportés et ceux actuellement montés (oui, promis, j’expliquerais « monter »). Individual Filesystem, à l’origine de l’export des interfaces, fonctionnera très différemment selon le filesystem choisi (ext2, ext3, JFS, …). Des caches sont présents à différent niveau afin d’optimiser le temps de traitement (Inode cache, Directory cache, Buffer cache).
Ok, je sens que je vais un peu loin alors je vais arrêter là. Pour ceux qui en veulent plus, n’hésitez plus, allez farmer un peu sur le Net.
Les types de filesystem.
Les classiques.
Lorsque vous installez votre Linux, sachez que vous avez la possibilité de choisir votre filesystem, et de le partitionner vous-même (c’est-à-dire le scinder en morceau de disque). Par défaut, Linux, dans ses versions récentes, installera votre filesystem sous ext4 -Extended FileSystem- (Ubuntu Karmic Koala, Fedora 12 Constantine, …). Mais comme cela est si bien dit dans les notes d’Ubuntu, cela ne signifie pas que les autres filesystems ne sont plus supportés. Il existe en effet, historiquement, d’autres versions d’ext : ext2, ext3 sont les plus souvent rencontrées (au-delà, votre serveur est vraiment vieux).
Ah. Question au fond. La différence ? Entre ? AAAH !!!
Déjà, entre ext2 et ext3, nous avons principalement une différence au niveau de la journalisation. En effet, ext2 est un des dinosaures de Linux. Il était certes plus intelligent que le FAT de Windows, en ce sens qu’il organisait les fichiers et donc limitait le recours à la fragmentation, mais il restait perfectible. Vous en avez révé ? Ext3 l’a fait ! La journalisation sert essentiellement à maintenir la cohérence des métadonnées, notamment en cas de crash. Cela évite par exemple le gentil fsck de ext2 lorsque le système a subi un arrêt impromptu. Le système relit tranquillement son fichier de log, retrace les dernières transactions non commitées et remet d’aplomb un système sain en 2 temps trois mouvements. Hop, ne soyons pas radin, un peu de doc vous fera du bien !
Ext3 et Ext4, c’est une autre histoire. Ext4 est une évolution puisqu’étant encore attaché à la compatibilité descendante, il reste limité dans ses mouvements. Ext4 oriente la majorité de son travail sur les problèmes de tailles et de fragmentation. Hop, moment opportun pour un petit lien d’info sur Linuxfr.org et sur le Wiki officiel Ext4.
Ext3 et Ext4 sont principalement utilisés, ce sont eux qui supportent votre Linux. Ils peuvent travailler sur disques durs, sur volumes logiques, sur partition raid, toussa toussa, sans broncher (ou si peu).
Les outils et fichier impliqués font partie du noyau Linux depuis belle lurette, ce sont, entre autre :
Les extensibles et les hautes disponibilités.
Lorsque l’on donne, dans son immense bonté, vie à une machine Linux, elle a, comme tout être vivant, un cycle de vie. Parce que oui, dans un contexte généralisé, votre machine aussi a besoin de grandir, en terme de composant, de performances, de service et d’espace.
Il existe plusieurs moyens permettant de construire et d’étendre un système de fichier. Certaines approches nécessitent un travail de réflexion en amont, à savoir si réellement on a besoin de rajouter de l’espace, si ce doit être opérationnel sans avoir à réinstaller, rapidement, de manière modulaire, si il y a une forte contrainte de temps et de disponibilité,… Bref, plus on veut, plus fallait réfléchir avant.
De même, souhaitons-nous recourir à des outils qui ont fait leurs preuves depuis des années, des solutions toutes packagées, principalement hardware, ou bien préférerons-nous les versions plus intelligentes, plus intuitives, plus modulables ? Les alternatives sont nombreuses, et je ne les maîtrise pas toutes.
RAID. Voilà le premier point qu’il vous vient à l’esprit.
Un RAID (Redundant Array of Inexpensive Disks) est une agrégation de device de stockage qui permet d’avoir une tolérance aux éventuels accidents (panne, crash d’un disque dur,…) et qui améliore les performances d’accès aux données. En effet, composé de plusieurs disques, cela lui permet d’une part d’étaler les données sur l’ensemble des disques, mais en plus, et c’est vital, de rajouter des brides d’information concernant ces données tour à tour sur chacun des disques (RAID 5). Ces bribes d’information (bits de parité) sont stockés dans des stripes et servent à contrôler les données ajoutées et, au besoin, de les reconstruire. En conséquence, puisque ces données sont éclatées sur plusieurs disques, les temps d’accès en lecture et en écriture sont grandement améliorés.
Notre ami Wiki est toujours là pour vous.
Construire un RAID -logiciel, j’entends, puisqu’il n’y a jamais assez de moyens pour le tout packagé et qu’on est curieux de savoir ce qu’il y a sous le capot-, et surtout le maintenir, ce n’est pas de tout repos. Dans la meilleure des configurations, il vous faut n fois le même genre de disque dur (capacité, mémoire cache, vitesse, connectique), sinon le bonus de capacité qu’un disque pourrait avoir sur les autres sera jeté aux oubliettes. Il vous faut aussi, de préférence (mais c’est comme dans la vraie vie, tout est une histoire de bon matériel au bon moment) des disques en spare, histoire que vous ne soyez pas en position malheureuse si un autre « incident » survenait. De même, en cas de fail d’une unité du raid, la reconstruction des données peut prendre du temps.
Le RAID est une bonne solution concernant la scalabilité et la haute disponibilité, mais ce n’est pas un système de fichier, c’est une technologie. Vos meilleurs amis seront :
Resté sur votre faim ? Par ici !
Une autre façon de faire serait de passer par LVM (Logical Volume Manager).
La principale différence entre RAID et LVM, c’est que justement LVM n’est pas un RAID. LVM ne travaille pas directement sur les disques, mais sur des entités appelées Logical Volumes, crées, maintenus et gérés par tout un arsenal d’outil rattachés au package lvm2. LVM apporte donc un niveau d’abstraction supplémentaire qui permet à vous, utilisateur et administrateur, de pouvoir redimensionner, créer, supprimer, étendre,… vos partitions sans avoir à vous soucier du hardware en dessous.
Plus en détail, LVM décompose le disque dur en pv, physical volumes, qu’il regroupe au sein d’un vg, Volume Group, et sur lequel il crée un lv, Logical Volume. C’est sur le Logical Volume que le filesystem s’installe, donc « quelque part » sur le Volume Group. Il est vraiment très facile d’étendre et de shrinker (réduire) l’espace disque.
LVM est très stable, éprouvé en production, modulable à souhait, un brin plus souple que le RAID, et plus que propice à la scalabilité mais en revanche, il n’aide pas niveau haute-disponibilité. Il est cependant possible d’utiliser LVM sur un RAID pour ajouter les avantages du RAID -et ses inconvénients par la même occasion- à ceux de LVM.
Les outils qui vous aideront :
Si vous voulez en venir aux mains, faites.
Le dernier point que je souhaiterais voir avec vous au niveau des extensibles et hautement disponibles, se cache sous trois lettres : ZFS.
ZFS, contrairement aux deux autres points, est un filesystem à part entière, il ne s’agit donc pas d’un outil. Zeta Filesystem, de son petit nom, a été développé par Sun. Ce système de fichier présente des caractéristiques très particulières mais n’est pas intégré au noyau Linux pour une raison simple : la licence sous lequel il est distribué (CDDL) est incompatible avec GPL dans sa version 2. Mais là encore, grâce à Ricardo Correia, développeur, nous pouvons utiliser ZFS via fuse (filesystem in userspace), environnement qui met à disposition, comme son nom l’indique, les fonctionnalités des filesystems dans l’espace User.
ZFS constitue un peu le fantasme de tout administrateur système. Il fait en sorte d’être toujours cohérent. Oui. Vous avez bien entendu. Il se corrige tout seul. Cette citation à elle seule, comme ça, sans preuve peut choquer. De même, il fournit une très haute capacité de stockage (nettement plus haute que tous les autres filesystems d’après notre ami Wiki). Voyons comment tout ça fonctionne.
Eh bien ZFS nous rappelle un peu le fonctionnement de LVM. En effet, notre filesystem s’appuie en réalité sur des pools de stockage. Les pools permettent, comme on l’a vu précédemment, d’éviter de se soucier du hardware, partionnement compris. Dans ZFS, ils sont utilisés pour centraliser les IO (entrées-sorties) et comme lien entre les différents périphériques de stockage. Lorsqu’une donnée est destinée à être écrite sur un disque, elle passe par le pool, à ce moment-là, elle est vérifiée à la volée, dupliquée, puis stockée. ZFS dispose donc de tous les éléments nécessaires pour contrôler à n’importe quel moment la cohérence et la véracité des données et va même jusqu’à corriger la donnée corrompue sans que vous ayez à le lui demander.
De la même manière, ZFS s’appuie sur du RAID Z, qui est un peu semblable à notre bon vieux RAID 5, à la différence que les stripes de données ont une largeur variable, de sorte que ZFS limite les pertes d’espace disque à leur origine.
Si vous avez envie d’en savoir plus, jetez un coup d’oeil sur le site officiel, la doc officielle, et l’article d’Unix Garden sur sa mise en place. Sachez aussi que ZFS est présent nativement sous OpenSolaris, version Open Source de Solaris.
Il existe beaucoup d’autres qui mériteraient d’être dans cette catégorie, mais j’arrêterais là. Sachez que je vous encourage à participer si vous estimez qu’il manque vraiment quelque chose.
C’est tout pour la première partie et encore !!! Je suis loin d’être exhaustive, même en me cantonnant à Linux.
Sur ce, potassez bien, farmez, complétez et n’oubliez pas de passer de Bonnes Fêtes -oui, un ASR aussi, ça se repose parfois- !!!
Bienvenue sur ces pages qui constituent une petite parenthèse de sujets informatiques pour ceux qui n'ont pas la science infuse et qui ont, eux-aussi, besoin parfois de reminders. Avec l'avantage de ne pas être constitué d'un tas de post-it !