smartos

Ça faisait un petit moment que je pensais acheter un NAS pour centraliser tous mes contenus et faire de la place sur les disques durs. Mais quand même, les premiers prix des appareils avec au moins deux baies disque sont autour de 150€, ça fait cher d’autant plus que les processeurs sont anémiques (en général des Atom ou ARM) et qu’il faut rajouter le prix des disques. L’autre inconvénient important, c’est de reposer sur les choix technologiques du constructeur et sur son bon vouloir pour les mises à jour, notamment de sécurité - même si ce ne sont finalement que des ordinateurs sur lesquels il est théoriquement possible d’installer ce qu’on souhaite.
Un autre critère important pour moi, c’est la sécurité des données, d’où le besoin d’au moins deux baies disques pour pouvoir faire du RAID 1 ou encore mieux 5. Dans ce cas, il faut au moins 3 disques mais on ne “perd” qu’un disque de stockage utile contre la moitié dans le premier cas. Rappelons tout de même qu’il est nécessaire de sauvegarder ses données, qu’elles se trouvent sur un NAS ou ailleurs. Cela dit, l’avenir est apparemment dans les systèmes de fichiers COW comme Btrfs ou ZFS. Le premier est issu de chez Oracle et fonctionne sous Linux, le second de chez Sun (et donc maintenant Oracle) et écrit initialement sous Solaris mais porté depuis sous Linux ou FreeBSD ou encore macOS. Dans les deux cas, ils remplacent également le gestionnaire de volumes et s’occupent donc de l’aspect RAID. Sauf qu’apparemment, les niveaux 5 et 6 sont bugués dans BtrfsEDIT il semble que c’est corrigé EDITEDIT en fait non. Le choix le plus judicieux aujourd’hui semble donc être ZFS.
Si on récapitule, il faut donc un truc pas trop cher avec au moins trois baies et un processeur décent. Un peu de recherche et je tombe sur le HP ProLiant MicroServer Gen8 qu’on peut trouver à un prix bien plus raisonnable que sur le site du constructeur et il semble qu’il est souvent utilisé comme NAS. Le processeur de l’offre d’entrée de gamme n’est certes qu’un celeron mais il dispose tout de même des fonctionnalités de virtualisation, ce qui est un plus non négligeable. La machine supporte également un processeur xeon (E3-1220L) basse consommation mais celui-ci est quasiment introuvable à des prix abordables ; il est cependant possible d’y adjoindre un autre xeon avec une enveloppe thermique plus importante mais sauf à héberger un grand nombre de machines virtuelles, ça semble peu utile et même un peu dangereux. La fiche technique affirme qu’on peut aussi installer un i3-3240 mais le fondeur indique que la mémoire ECC n’est pas supportée, or c’est important avec ZFS. Il semble en plus que la machine offre des performances tout à fait acceptable avec ZFS.
Pour le choix des disques, je me suis basé sur l’expérience de gens qui en utilisent beaucoup et pour qui le fabricant avec le taux de pannes le plus faible est HGST.
Maintenant que le choix de la boite est fait, qu’est-ce qu’on met dessus ? Si on considère que ZFS est “production ready” sous Linux depuis 2 ans, que Ubuntu a fait le choix de l’incorporer dans sa distribution, ZOL semble une plateforme parfaite. D’un autre côté, ça fonctionne aussi sous FreeBSD, sans oublier tous les dérivés de Solaris. Une autre question est de savoir si on veut installer un système d’exploitation généraliste (votre distribution linux préférée - troll inside, freebsd - la version 11 vient de sortirvotre dérivé de OpenSolaris préféré) ou spécialisé (FreeNas - le support de bhyve est prévu pour la version 10, NAS4Free, openmediavault - le support ZFS se fait avec un plugin). Du côté ces derniers, je trouve l’idée de FreeNAS de démarrer sur une clé usb intéressante (il y a un port usb interne et même un lecteur de carte sd interne également) car même s’il y a un cinquième port sata sur la machine, je préfère le conserver disponible (pour du L2ARC par exemple). Justement, il y a un OS qui démarre depuis une clé USB, qui supporte la virtualisation (avec KVM), les conteneurs (dockeravec le principe de zones, hérité de Solaris) et ZFS entre autres choses, c’est smartOS. La société vient qui en est à l’origine (montée par des anciens de Sun après le rachat par Oracle) vient de se faire (elle même) racheter par Samsung. Accessoirement, ils sont aussi à l’origine de Node.js, ce dernier est inclus dans le système et les outils de gestion de machines sont écrits avec. Il y a quelques petits aspects qui peuvent paraître gênants (l’absence de support USB3 par exemple mais ça vient ou l’aspect “transitoire” (traduction litérale de transient) du système d’exploitation qui fait qu’il peut être plus compliqué que sur d’autres de conserver des changements entre deux redémarrages mais c’est finalement assez peu par rapport aux avantages. Dans ces derniers, il faut également noter la possibilité de créer des zones lx avec le support binaire linux, là encore un héritage de Solaris mais remis au goût du jour (en gros c’est un peu le même principe que wine ou linux sous windows, ça traduit les appels systèmes), ce qui permet d’utiliser l’importante logithèque du système au penguin, par exemple le lecteur multimédia plex.
Le MicroServer Gen 8 embarque sur la carte mère un controleur RAID matériel qu’il convient de désactiver puisque comme vu plus haut, ZFS fait office de gestionnaire de volumes et doit donc voir les disques. Il faut en fait indiquer au controleur de se comporter comme un controleur SATA. Une fois cette opération réalisée, il suffit d’insérer une clé usb sur laquelle on aura transféré le contenu de l’image de la dernière version de SmartOS et démarrer dessus. Si le système détecte un zpool nommé zones, il démarre normalement, sinon il propose de l’initialiser avec les disques présents. La configuration élémentaire du système est ensuite sauvée sur un système de fichier /usbkey de ce même zpool. On y trouve par exemple un fichier shadow qui contient les condensats des mots de passe des utilisateurs, notamment celui du super utilisateur. Dans le fichier config de ce fs, on trouve les adresses, masques et routeur par défaut des interfaces regroupées par étiquette pour différencier le réseau interne de l’externe par exemple ; mais aussi les adresses des résolveurs dns ou serveurs de temps. On peut également y référencer des fichiers externes que le système ira chercher dans le répertoire config.inc. Un exemple utile est le fichier authorized_keys qu’on peut référencer avec la variable “root_authorized_keys” et qui permet d’indiquer les clés publiques acceptées pour le super utilisateur. Et voilà, c’est tout, on a une machine sous SmartOS.