Je voulais acheter un NAS pour centraliser les sauvegardes des ordinateurs de ma mère...

Comme les ordinateurs à sauvegarder sont des Mac, je me suis d'abord intéressé à TimeCapsule d'Apple. Mais j'ai vite écarté cette solution. La principale raison est le fait qu'il n'y ai pas de RAID 1. Je ne conçois pas une solution de sauvegarde sur disque dur sans RAID miroir ! La seconde raison, c'est le prix : 499€ pour 1To, c'est cher...

Ensuite, j'ai regardé les NAS d'autre marques. Mais je n'ai rien trouvé de très intéressant. Soit c'est abordable et peu performant, soit c'est cher...

J'ai donc décidé de faire un NAS à partir d'un PC.
Les objectifs à atteindre :
  • 1To en RAID 1
  • Prix plancher
  • Faible consommation électrique
  • Peu bruyant

Le matériel :


J'ai acheté pour moins de 300€ :
  • Une carte mère VIA PC 2500E équipé d'un C7 à 1.5GHz
  • 1 Go de RAM
  • 2 disque de 1To SATA
  • 1 clef USB de 8Go (pour l'OS)
J'avais déjà un petit boîtier Micro ATX qui trainait, c'est déjà ça d'économisé.

Pourquoi ces composants : J'ai prix cette carte mère car elle coûte très peu et consomme aussi très peu. J'ai choisi de mettre l'OS sur un clef USB pour pouvoir éteindre les disques lorsqu'il ne servent pas. Cela permet donc de moins les user et d'économiser l'énergie pas la même occasion.

J'ai choisi d'installer un Ubuntu. Je l'ai installé depuis une clef USB (la même que celle que j'ai utilisé pour installer mon Acer Aspire One).

Configuration :

J'ai commencé par installer le serveur ssh, puis les paquets permettant de gérer le RAID et de surveiller le statuts des disques en SMART.
apt-get install vim openssh-server mdadm smartmontools postfix denyhosts
J'ai configuré postfix en smarthost (il fait suivre les mails a mon serveur SMTP). Il va servir à envoyer les mails d'alertes du système.
Denyhosts est un script qui permet de sécuriser le serveur ssh contre les attaques de type brut force (essayer de tous les mots de passe possible de façon automatique) en bloquant l'accès au bout d'un nombre déterminé d'erreur de connexion.
Ensuite, j'ai configuré les alias pour recevoir les mails d'alertes envoyé à root/puyb :
echo "puyb: admin@example.fr" >> /etc/aliases
postalias /etc/aliases
Maintenant, passons à l'étape de la configuration des disques.
Première étape, avec fdisk, j'ai fait une partition sur chaque disque, puis j'ai assemblé, formaté, et monté l'array RAID.
mdadm --create /dev/md0 -l1 -n2 /dev/sda1 /dev/sdb1
mke2fs -j -m0 /dev/md0
echo 50000 > /proc/sys/dev/raid/speed_limit_min 
cat "/dev/md0        /home           ext3    defaults        0       0" >> /etc/fstab
cd /
mv home home.bak
mkdir home
mount -a
cp -rv home.bak/* home/
rm -r /home
watch -n1 /proc/mdstat
Maintenant, il faut attendre que l'array se construise avant d'éteindre la machine... La dernière commande permet de suivre l'avancement... Bien sur, ça n'empêche pas de continuer à configurer la machine, il suffit juste de ne pas l'éteindre...
Pour information, la commande echo 50000 > /proc/sys/dev/raid/speed_limit_min fixe la vitesse de reconstruction à 50Mo par secondes minimum...

Installation de netatalk

Netaltalk permet de faire des partages AFP (pour les backup Time Machine). Malheureusement, la version fournie avec Ubuntu ne supporte pas le SSL. Il faut donc le recompiler avec le support SSL.
apt-get install build-sessentials libslp-dev autotools-dev devscripts cracklib2-dev dpkg-dev libssl-dev
apt-get source netatalk
apt-get build-dep netatalk
cd netatalk-2.0.3
DEB_BUILD_OPTIONS=ssl sudo dpkg-buildpackage -us -uc
debi

Le script de démarrage de Netatalk fournit avec Ubuntu ne fonctionne pas si la carte réseau est configuiré en mode itinérant. Il faut donc lui assigner une adresse IP fixe.

Ensuite, après avoir configuré les partage que je souhaite dans /etc/netatalk/AppleVolumes.default, j'ai configuré avahi pour annoncé les services disponible sur ce NAS. J'ai déjà détaillé la façon de le faire dans ce billet. J'ai configuré le SSH comme dans le billet, mais j'ai aussi ajouté l'AFP.
/etc/avahi/services/afpd.service
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_afpovertcp._tcp</type>
    <port>548</port>
  </service>
</service-group>

A ce niveau, je dispose donc d'un NAS permettant de faire de l'AFP, du SFTP et du SSH... Ça me permet de me connecter depuis Linux et MacOSX... Mais il n'y a pas que ces deux OS... J'ai aussi des copains qui utilise des OS alternatifs comme Windows...J'ai donc installé samba pour faire des partage SMB/CIFS.

apt-get install samba

Pour économiser l'energie, j'ai reglé les disque pour s'éteindre au bout de 5 min.
echo "/dev/sda {
        spindown_time = 60
}
/dev/sdb {
        spindown_time = 60
}
" >> /etc/hdparm.conf

Configuration de Time Machine

Pour faire fonctionner ce NAS avec Time Machine, il faut bidouiller un peu. Et oui, Apple ne vas pas si facilement vous laisser acheter autre chose qu'un disque Time Capsule... Première étape, il faut créer un fichier vide à la racine du partage réservé pour Time Machine :
touch .com.apple.timemachine.supported
Ensuite, il faut, dans un terminal dur le mac, taper la commande suivante, qui va empêcher Time Machine de cacher les disques qui ne sont pas "supportés" :
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
Ensuite, il faut lancer une première sauvegarde. Elle va échouer, mais avant quelle échoue, il faut aller copier le nom du dossier qui est créé dans le partage Time Machine. Il doit avoir un nom qui ressemble à "NomMachine_0123456789ab.sparsebundle"... Il faut recopier ce nom, et créer une image disque (via l'utilitaire de disque) de type SparseBundle, Format HFS+, aucun chiffrement, aucune partition, portant le nom que vous avez copié, et de la taille maximale que vous souhaiter allouer au backup (j'ai mis 900Go). Enregistrer cette image sur le volume TimeMachine (toujours sous le même nom), puis relancer une sauvegarde, elle devrais marcher...

Performances

Consommation :

Avec mon wattmettre, j'ai mesuré environ 60W quand les disques sont allumé et 35W quand ils sont éteint... Ça me semble pas mal vu que d'après ce que j'ai lu, la plupart des NAS consomme environs 30W à 45W...
Je devrais pouvoir encore améliorer la consommation en remplacement l'alimentation bas de gamme actuelle par une alimentation avec un meilleur rendement (une alimentation certifié 80+ devrais faire l'affaire).

Acces disques :

Lecture : 85Mo/s
Écriture : 75Mo/s

Dans tous les cas, c'est bien plus que ce que peu supporté la carte ethernet 100MBps dont est équipé le serveur... De plus, il sera utilisé le plus souvent en Wifi ! Bref, les performances du RAID sont très bonnes...

Bruit

Aie, c'est là que le bas blesse. La carte mère est pourvu d'un petit ventilateur de 4 cm de diamètre qui fait bruit aigue assez désagréable. Je pense qu'a terme, je vais remplacer le radiateur par un grand modèle prévu pour dissiper la chaleur émise par gros processeur. Le tout, sans ventillateur, en utilisant juste le flux d'air du ventilateur de l'alimentation électrique.

Conclusion

Voila comment se faire un NAS haute performance pour un budget faible... Evolutions possibles : D'un point de vue logiciel, vu la puissance disponible, quasiment tout est envisageable, on verra selon les besoins qui se présenteront... Au niveau matériel, la carte mère possède un port PCI express 1X et 2 PCI... Je pourrais donc ajouter une carte réseau gigabit, ou encore un contrôleur SATA et quelques disques suplémentaires si les 1To ne suffisent plus...