Ce post a été largement discuté sur Hacker Nouvelles.
Alex Buznik, nas.net.ua veuillez fournir une traduction russe en deux parties: Partie 1 et Partie 2.
Cet article traite des considérations matérielles, de L’installation de Linux, de la configuration du RAID logiciel, de la robustesse et de la gestion de la corruption des données.,
je gère depuis une décennie un NAS auto-construit à la maison, alors j’ai pensé écrire mon expérience afin que les autres puissent se réjouir de mes nombreux échecs et haleter d’admiration devant mes quelques triomphes.
le NAS est parfait parce qu’il est simple, sûr, modulaire et extensible et il est bon marché parce qu’il est construit de pièces d’occasion, de base.,
le NAS stocke principalement des fichiers (documents et médias) sur un RAID logiciel 6 et les sert sur des partages Windows au réseau local. Je reste à l’écart des solutions NAS propriétaires car une défaillance matérielle rendrait la récupération de données difficile à impossible sans le même remplacement matériel. Chaque pièce de matériel, des disques durs au boîtier et à la carte mère, a été mise hors service pour autre chose au cours de cette décennie, parfois plus d’une fois, de sorte que l’accent mis sur la modularité a payé pour lui-même., Étant donné que l’intégrité et la robustesse des données à long terme sont une préoccupation, le NAS devrait exécuter une sorte de niveau RAID redondant.,
objectifs
objectif | Description | Solution | ||
fonction | le NAS Sert de système de fichiers attaché au réseau pour un usage domestique; le NAS fonctionne quelques heures par jour et est éteint ou en veille la plupart du temps | matériel de base, Logiciel open source, modularité, simplicité | ||
interopérabilité | les plates-formes informatiques couramment utilisées devraient pouvoir accéder aux fichiers sur le NAS. Le matériel de base devrait pouvoir se connecter au NAS., | Samba (aka partages Windows) sur Ubuntu, USB, SATA. Connectez le LAN au routeur Wifi, nommez la résolution et le serveur de temps. Accédez et gérez avec SSH. | ||
Modularité | composants Matériels et logiciels doivent être interchangeables sans la refonte de l’ensemble du système | x86 plate-forme PC, Linux, Docker | ||
Contrôle | je veux contrôler lequel le logiciel est installé sur le NAS et ce qu’il fait | Ubuntu 18.,04 LTS | ||
intégrité des données | les fichiers de taille arbitraire (raisonnable) et de contenu doivent être stockés sur le NAS et ne pas se corroder ou perdre leur intégrité au fil du temps | RAID 6 avec 4 disques durs, ext4fs avec somme de contrôle, nettoyage, RAID assemblé manuellement, RAM ECC. Signer les archives avec par2., | ||
bruit | le bruit doit être faible et tolérable | disques durs en veille, SSD en tant que disque principal du système d’exploitation, écriture-principalement, beaucoup de RAM, refroidissement passif | ||
coût | utiliser du matériel de base et des logiciels libres et open source | matériel de/td> | évitez la maintenance critique | pare-feu UFW acceptant les connexions uniquement à partir du réseau interne, Pas de mises à jour automatiques, logiciel limité, docker, non accessible à partir d’Internet., |
Compact | les dimensions physiques du NAS doivent être petites; pas d’espace gaspillé | 2e main HP proliant microsever gen8 |
non-objectifs
- tâches typiques du serveur multimédia: streaming, encodage, transcodage etc
- bitcoin mining
- torrenting
- tout le reste everything
obtenir le matériel
obtenir le bon matériel est la partie difficile(jeu de mots) car c’est la plate-forme pour la modularité, le prix, la consommation d’énergie, la taille et, Il existe de nombreux serveurs NAS propriétaires bon marché d’occasion, mais je n’aime pas l’idée de systèmes matériels et logiciels fermés. Par exemple, si un contrôleur RAID matériel stocke des données dans un format propriétaire sur les disques durs, j’aurais besoin du même contrôleur de remplacement pour récupérer ces données en cas de défaillance du contrôleur.
L’espace est également un problème, donc le serveur doit être compact tout en permettant D’exécuter Linux dessus; c’est assez difficile à trouver car la plupart des NAS compacts sont des systèmes propriétaires et ne permettent pas d’installer votre propre système d’exploitation., Il y a beaucoup de PC et de serveurs x86 utilisés, mais ils sont pour la plupart trop gros ou n’ont pas assez de baies de disque ou de ports SATA. La connexion de lecteurs via USB n’est pas non plus une option en raison de la faible vitesse, de la consommation d’énergie plus élevée et des besoins en espace. Les deux premières révisions de mon NAS vers 2010 utilisaient un barebone compact et plus tard un mini boîtier de tour autour duquel il y avait 3 ou 4 baies de disque dur, mais je trouve ces formats de boîte plus difficiles à trouver ces jours-ci. Vous avez de la chance si vous en Obtenez un à un prix abordable!
je suis tombé sur un HP proliant microserver gen8 d’occasion et je ne l’ai pas regretté depuis., Le modèle de base est livré avec 2 Go de RAM ECC,un processeur Celeron 2 cœurs et aucun disque dur pour environ 100€. Il y a une excellente critique de ce serveur sur Louwrentius. Le serveur est extrêmement compact (environ 26cm chaque dimension), raisonnablement faible bruit (mais pas silencieux) en veille, dispose d’un processeur refroidi passivement, deux ports ethernet GBit, quatre baies de disque dur 3,5″ et un emplacement de format propriétaire quelque peu caché pour un cinquième disque 2,5″ à profil bas que j’utilise pour un SSD., Les baies de lecteur peuvent recevoir directement des disques SATA tandis que le 5ème emplacement nécessite un adaptateur mâle-SATA FDD 4 broches et un câble SATA pour connecter un SSD 2,5″ à la carte mère. En prime, le serveur dispose ILO qui permet un accès à distance au serveur avec un navigateur web-donc pas besoin d’un clavier ou d’un écran!
j’admets que le serveur n’est pas 100% des pièces de base; par exemple. une défaillance de la carte mère ou du processeur nécessiterait de commander exactement les mêmes pièces de rechange (ce qui sera probablement coûteux) ou de construire un tout nouveau serveur sur une plate-forme différente., Cependant, la RAM, le réseau et le stockage sont assez standard, je lance Ubuntu dessus et les avantages décrits précédemment pèsent suffisamment pour prendre ce risque. Environ 6 ans plus tard, le serveur fonctionne toujours sans aucun problème; sauf biais de survivant, je pense que cette approche a bien fonctionné.
le serveur que j’ai acheté avait un firmware de 2014 et HP a heureusement commencé à publier des mises à jour gratuitement récemment, la dernière de fin 2019 avec laquelle j’ai flashé le microserveur pour une interface utilisateur de gestion HTML5 lisse.,
le serveur a subi diverses mises à niveau au fil des ans; d’un réseau RAID5 de trois disques durs 2 To à la configuration actuelle de 3X6 to + 1X8 to + 1x 512 Mo SSD et une mise à niveau du processeur vers un modèle Xeon et une mise à niveau de la RAM vers 16 Go ECC., Je réutilise presque exclusivement les disques durs USB externes (après ouverture, extraction du disque dur et adieu à la garantie) qui sont moins chers que les disques internes… au début, c’est surprenant compte tenu du matériel supplémentaire (boîtier, adaptateur USB vers SATA, Câbles, alimentation) qu’ils viennent avec; cependant la garantie et les spécifications techniques sont nettement inférieures à celles des disques internes, ce qui explique la différence de prix. Étant donné que le serveur exécute un RAID 6 (dont le but est de survivre aux pannes de disque), je pense que c’est un risque correct à prendre.,
le serveur est connecté via un câble Ethernet au routeur WiFi domestique; les vitesses du réseau sont proches de 100 Mo/s, ce qui est correct, les ports USB3 peuvent faire environ 40 Mo/s.
Installation
ILO facilite la configuration du serveur même sans clavier et écran physiques. J’ai commencé avec Ubuntu server LTS 14.04, passé à 16.04 et je suis actuellement en cours d’exécution 18.04. Les mises à niveau n’ont jamais fonctionné en place, dans chaque cas une nouvelle installation était nécessaire.
je recommande d’installer une machine virtuelle (comme VirtualBox) sur votre poste de travail, en démarrant Ubuntu Server 18.,04 à partir d’une image en direct et l’installation D’Ubuntu sur un disque dur USB. Je n’ai pas pu démarrer le Microserveur Proliant avec UEFI, donc une installation traditionnelle du BIOS grub est requise.
Les quatre disques durs sont partitionnés selon le schéma ci-dessous: une partition de 1 Mo au début pour le chargeur de démarrage GRUB, une partition de 50 Go pour Ubuntu et une partition de 5,5 to pour le RAID.
j’ai utilisé le programme D’installation alternatif Ubuntu Server 18.04 pour configurer les partitions Ubuntu en tant que RAID 1 qui reflète cette partition sur tous les disques durs., Le programme d’installation est capable d’installer Ubuntu dans ce RAID 1 et GRUB est capable de démarrer à partir de celui-ci. En cas de panne du disque dur, il suffit de retirer ce disque dur pour permettre au serveur de redémarrer.
+-------------------+| 1MB bios_grub || |+-------------------+| 50GB Ubuntu ext4 || RAID 1 |+-------------------+| 5.5TB Data || RAID 6 |+-------------------+
pour que le programme d’installation fonctionne, il doit y avoir au moins deux disques dans le RAID. Plusieurs disques peuvent être ajoutés plus tard. Assurez-vous simplement d’installer le chargeur de démarrage GRUB sur tous les disques avec:
grub-install /dev/sdX
Dans mes premières expériences, Ubuntu a pu démarrer correctement, mais n’a pas activé les cartes ethernet. Cela nécessite de jouer avec netplan.
/etc/netplan/01-netcfg.,yaml
network: version: 2 ethernets: eno1: dhcp4: true dhcp6: true optional: true eno2: dhcp4: true dhcp6: true optional: true
considérations RAID de démarrage
comme indiqué dans « installation”, Ubuntu démarre à partir d’un RAID 1. md miroirs changements à toutes les partitions de démarrage, ce qui est génial. Le RAID de démarrage est mappé sous / dev / md0 – Je n’ai pas trouvé de moyen de lui attribuer un nom, mais j’ai trouvé que le nom du périphérique était stable. Malheureusement, Ubuntu accédera constamment au lecteur de démarrage pendant le fonctionnement normal, ce qui signifie Dans mon cas que quatre lecteurs tournent toujours., J’ai essayé diverses choses comme le remappage des répertoires de journaux sur un disque ram et le pré-chargement des fichiers, mais la jungle de scripts qui en résulte est impossible à maintenir. La solution s’est avérée assez simple et élégante, après un hack: j’ai installé un SSD dans la 5ème baie de disque dur et l’ai ajouté au RAID de démarrage 1. Pendant que la mise en miroir fonctionnait, le Bios Proliant (gen8) ne démarrera pas à partir de la 5ème baie s’il trouve des disques durs ailleurs., La solution est un script qui s’exécute après le démarrage et échoue tous les disques durs mécaniques du RAID:
mdadm --manage /dev/md0 --fail /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2
le script est un peu plus complexe que cela car les noms des périphériques ne sont pas stables et diverses conditions d’erreur doivent être prises en compte (par exemple. le RAID ne devrait pas être touché si un disque dur échoue) – mais c’est un sujet pour un poste différent. MD oubliera que les disques ont été marqués comme ayant échoué après un redémarrage, ce qui est une valeur par défaut utile, car il permet au serveur de démarrer à partir de n’importe quel disque dur disponible.,
Important: comme je l’ai écrit plus tôt, je mets très rarement à jour les logiciels sur le serveur, mais les quelques fois qu’une mise à jour est nécessaire, les disques durs manquants doivent être réinsérés dans le RAID afin que les mises à jour soient mises en miroir sur toutes les partitions de démarrage.
data RAID considerations
le deuxième RAID logiciel exécuté sur le serveur est également le plus important: le raid de données., Mes besoins de stockage ont toujours rivalisé avec les progrès de la technologie de stockage, de sorte que le raid de données a subi toutes sortes de transformations à partir d’un RAID double disque 1 à un RAID 3 disques 5 à un RAID 3 disques 1 à un RAID 4 disques 6 où il est actuellement.
RAID 1 est à mon humble avis la meilleure solution si vous pouvez vous le permettre; il est le plus simple à gérer, offre le plus grand niveau de cohérence et de disponibilité des données, les meilleures performances et est, comme un effet secondaire agréable, aussi le plus silencieux à utiliser grâce à écrire principalement mode qui permet de tourner vers le bas, Malheureusement, mes besoins en données dépassent ce que je peux faire avec un RAID 1.
RAID 5 est un bon compromis entre la redondance et l’efficacité du stockage, j’ai donc utilisé le raid de données pendant de nombreuses années dans ce mode. Cependant, la configuration est un peu risquée, comme le démontre une expérience: imaginez un disque dur qui se brise soudainement au milieu de la nuit. Au moment où je remarque l’échec, procurez-vous un remplacement et installez-le au moins 2 jours se sont écoulés, plus 12 heures supplémentaires pour une resync complète., Ainsi, le tableau reste dégradé et non protégé pendant 2,5 jours-toute défaillance supplémentaire dans ce laps de temps détruit irrévocablement toutes les données.
RAID 6 est actuellement le niveau de choix pour mon cas d’utilisation: il offre la moitié de la capacité totale à deux fois la disponibilité, pouvant survivre à une double panne de disque. Le seul inconvénient est que le mode « écriture principalement » de mdadm ne fonctionne pas, donc tout accès au RAID nécessite quatre disques actifs et est assez bruyant.
lors de la création du RAID avec mdadm, je me suis assuré de lui attribuer un nom, alors maintenant il est mappé sous/dev/md / data.,
afin d’augmenter la cohérence des données, le NAS exécute un script qui efface le RAID de données. Il s’agit d’un processus long, intensif et bruyant d’E/S qui maintient les disques occupés et devrait probablement être exécuté lorsque le NAS n’est pas nécessaire; pour un NAS domestique qui est en semaine pendant les heures de bureau. Cron est ton ami.
remarque sur le partitionnement: vous pouvez utiliser des périphériques raw (/dev /sdb,/dev / sdc…) sans aucune partition, mais ce n’est pas recommandé., Avoir des partitions (avec des étiquettes telles que RAID_1) garantit qu’en cas de reconstruction ou d’échange de disque, le lecteur n’est pas accidentellement installé sur un autre ordinateur et que les données ne sont pas écrasées (un lecteur non partitionné semblera toujours ne contenir aucune donnée et donc « sûr” pour le formatage).
cryptage RAID
l’étape suivante consiste à configurer le cryptage pour le RAID de données. J’ai utilisé dmcrypt LUKS pour cela, en stockant la clé sur une clé USB. Assurez-vous de sauvegarder à la fois la clé et L’en-tête LUKS, sinon les données ne seront pas accessibles en cas d’en-tête corrompu., L’avantage du cryptage est que je peux déplacer le serveur sans craindre le vol de données, tant que le RAID crypté et la clé sont transportés sur des routes différentes.,
Le RAID de données chiffrées est un périphérique bloc mappé sur /dev/mapper/data
le système de fichiers
le système de fichiers de choix est ext4 avec quelques réglages:
mkfs.ext4 -O metadata_csum -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/data
ces options permettent la somme de contrôle des métadonnées qui augmente la cohérence des données et désactivent l’initialisation paresseuse; cette dernière est plusieurs jours sinon.
dans l’esprit de la modularisation, le raid de données n’est pas monté dans /etc/fstab, mais plutôt monté avec un script et mdadm pendant le démarrage., Ce script monte également le système de fichiers raid de données avec les options noatime, nodiratime et data=journal, exécute fsck avant de le monter, ajuste le stripe_cache_size et modifie la gestion de l’alimentation.
notez également que pour les grands systèmes de fichiers ext4, le premier accès en écriture peut prendre très longtemps – alors consultez cette solution de contournement.
le processeur Celeron Stock Du Proliant est devenu un goulot d’étranglement avec dmcrypt car il manque de cryptage assisté par matériel, mais une mise à niveau bon marché vers un Xeon E3-1220L pour le même socket a résolu cela tout en réduisant de moitié le TDP à 17 Watt.,
Mise à jour septembre 2020: Je ne me souviens pas si cela a toujours été le cas ou a commencé à se produire après une mise à jour, mais les disques durs RAID de données ne tourneront jamais même s’ils sont inactifs. La raison en est la protection multi mount d’ext4 qui écrit constamment sur le système de fichiers. La protection de montage Multiple peut être modifiée ou désactivée (c’est ce que j’ai fait) avec tune2fs.
Plus de sécurité des données!
en 2020, ext4 et md ne sont malheureusement toujours pas en mesure de contrer efficacement bit rot qui corrompt silencieusement les fichiers., J’entends et lis des témoignages contradictoires sur ZFS qui soi-disant gère mieux la corruption des données et l’essaiera à un moment donné. Pour l’instant, j’utilise md5sum pour créer et vérifier les sommes de contrôle de ma sauvegarde .tar.archives gz et parchive pour créer des fichiers de récupération d’erreur. J’ai déjà écrit sur parchive et je reste à ce jour un fan dévoué.
Automation
j’ai mentionné des « scripts” inquiétants ici et là, mais la Vilaine vérité reste que la configuration actuelle nécessite une quantité considérable de scripts pour fonctionner correctement., Du côté positif, la plupart des opérations quotidiennes sont désormais scriptées et automatisées, ne nécessitent aucune intervention manuelle: les RAIDs s’assemblent seuls, sont tolérants aux pannes et le serveur fonctionne même lorsqu’un ou deux disques durs tombent en panne. Les sauvegardes sont archivées et checksummed automatiquement et une vérification périodique des alertes sur les fichiers corrompus que je puis manuellement (j’aime être impliqué dans ces choses correct) correct. Certains des scripts du serveur sont disponibles sur mon dépôt github, d’autres suivront bientôt.,
Network
le serveur utilise les composants réseau suivants:
- netplan pour gérer les deux cartes ethernet embarquées (voir installation)
- UFW pour bloquer tout le trafic entrant mais SSH, samba et netbios
- netbios pour annoncer le nom du serveur au routeur domestique et aux autres ordinateurs
- samba pour partager des fichiers en mode Lecture seule; quelques répertoires (comme la musique et les films) sont partagés avec guest access, quelques autres répertoires avec des documents personnels sont protégés par mot de passe, mais encore une fois en lecture seule., Toutes les opérations d’écriture dans le système de fichiers de données nécessitent un accès SSH. Comme ext4 n’offre pas d’instantanés, Je m’inquiète toujours de ce « supprimer par erreur” après minuit Après quelques verres; Je n’ai pas encore trouvé de bonne solution pour cela. Parcourir les partages samba dans Ubuntu nautilus peut être lent pour les grands répertoires – si cela devient trop à gérer, envisagez d’utiliser CIFS ou sshfs.,
Video& Graphics
je n’aurais jamais pensé en avoir besoin, mais le jour est finalement venu où j’ai eu besoin de connecter un écran physique et un clavier au gen8 – et je n’ai pas pu faire fonctionner un environnement de bureau. Le gen8 a une carte graphique Matrox g200 pour laquelle Ubuntu a abandonné le support il y a longtemps, mais il existe un moyen d’en extraire des graphiques.
première étape: installer le Support desktop sur l’environnement serveur:
apt install ubuntu-desktop
Après le redémarrage, vous remarquerez un écran de connexion 640×480. Il n’y a pas d’autres modes disponibles dans les paramètres d’affichage., Ce commentaire sur un sujet connexe aidé:
# Install vesa xserver. Was not needed in my case.apt-get install xserver-xorg-video-vesa # Boot into text modeinit 3 # Create new X-server configurationX -configure # Install configuration. The original post says to replace mga with vesa; in my case, vesa was already pre-filled.mv xorg.conf.new /etc/X11/xorg.conf# Boot into graphicsinit 5
avertissement: l’accélération graphique n’est pas disponible et la résolution maximale est de 1280×1024.
fait amusant que j’ai découvert en faisant des recherches: le gen8 a un connecteur DisplayPort non standard à l’avant derrière la porte.