Linux+LVM: Une Solution NAS.
Après avoir perdu, une alimentation et un disque dur après un problème électrique, je me suis décidé à mieux penser mon stockage. Jusqu'à maintenant, à part une partition RAID1 pour mes mails et un système de réplication de mes photos sur plusieurs sites, je n'avais rien de réellement bien pensé en local.
Donc, je me suis décidé à mettre en place un solution de stockage un peu plus complexe basé sur un serveur Linux avec LVM et basé sur deux disques durs de 250Go. J'accède à ce stockage via NFS ou Samba (Partage compatible Windows)
Le but : Avoir une solution de stockage réseau fiable pour toutes les données que je ne souhaite ne pas perdre (photos, mails,...). Pour le reste, je me prend pas la tête et je stocke cela à plat sur un seul disque.
Le schéma de ce que j'ai fait est ci-joint.
Point Important : J'ai choisi d'utiliser une solution RAID et LVM Software offert par GNU/Linux pour pouvoir reproduire cette architecture de stockage sur n'importe quel PC, en cas de problème. Je ne veux pas être lié à une solution Hardware Propriétaire, qui en cas de pannes sera difficilement récupérable dans certains cas. Par contre, cela a un impact au niveau des performances.
Pour la fiabilité Hardware, je base ma solution sur du RAID1 sur deux disques (voire peut-être plus, si besoin). Pour cela, j'utilise comme je l'ai déjà dit, sur du RAID logiciel avec le Noyau Linux. Comme cela, j'écarte ainsi tout les cas de pannes de disque dur. J'ai aussi, deux disques durs de marques différentes, pour éviter les problèmes de série.
J'ajoute à cela, une sauvegarde mensuelle vers un autre PC, qui sera peut-être faites en direction d'un second site, dans un avenir proche, pour prendre en compte les désastres sites (Incendie, vol, ...). Pour certains éléments sensibles, comme les photos, la réplication est faites sur 2 sites supplémentaires à l'ajout de nouveaux éléments.
Avec tout cela, j'ai ajouté une couche LVM (Logical Volume Manager), qui permet d'avoir une gestion logique des volumes de stockage. On peut ainsi s'affranchir des limitations physiques d'un disque dur. On agrège un ensemble de disque dur (Volume physique) pour faire un groupe de volume (Volume Group), qui sera découpé en volume Logique. Mon volume physique est en réalité des couples de disques durs en RAID1 (Il y en a qu'un seul couple pour le moment). On peut ainsi agrandir un volume logique comme on le souhaite.
LVM permet aussi de faire des snapshots. Qu'est ce que c'est ? C'est prendre une photo de l'état d'un filesystem à un moment donné. On retrouve ainsi les données dans un état à un moment donné. Je fais ainsi un snapshot tout les jours, toutes les semaines et tous les mois. Je peux ainsi retrouver mes données que j'avais le mois précédent, la semaine dernière et hier. Comme cela, on peut retrouver les fichiers qu'on a effacé par mégarde.
Il faut savoir que les snapshots avec LVM sous linux sont assez lourdes lorsqu'on écrit sur le volume principale. Car, on copie des données aussi au niveau de chaque snapshot, pour éviter d'écraser des données. Donc, quand j'écris une données sur la volume principale, je copie l'ensemble de cette espace sur l'ensemble de mes snapshots. Donc, les performances en écriture sont plus faible. Mais, dans mon cas, je ne vois pratiquement aucun impact au niveau des transferts NFS ou SAMBA. Dans tout les cas, je suis limité par la bande passante de mon réseau 100Mb/s.
Il faut aussi avoir une bonne notion de la volumétrie de son volume principale, car on dimensionne ses snapshots en fonction de cette dernière. Par exemple, j'ai défini la taille de mes snapshots de la manière suivante pour un espace de stockage de 150Go :
- Snapshot journalier : 10Go
- Snapshot hebdomadaire : 20Go
- Snapshot mensuel : 55Go
Donc, il faut pas que je dépasse 10Go d'écriture par jours, 20Go par semaine et 55Go par mois. Sinon, sans quoi, le snapshot se désactive. Si on a vraiment aucune idée de l'espace nécessaire, on peut définir une taille de snapshot équivalent à celui du volume principale, pour éviter ce problème de désactivation de snapshot. Mais, cela reste très couteux en espace.
Mes snapshots sont faits automatiquement, à heure fixe dans la crontab, soit une fois par jours pour les journaliers, 1 fois par semaine pour l'hebdomadaire, ... Les heures ont été choisies lorsqu'il n'y a aucun accès sur le volume principale (entre 5h et 6h du matin). Ces volumes de snapshot sont montés automatiquement à la racine du volume dans un répertoire "~snapshot" sur des points de montage explicite : lastmonth, lastweek et yesterday. Cela permet d'accéder directement au snapshot et ainsi pouvoir faire des sauvegardes et récupérer des fichiers directement.
La solution fonctionne depuis 2 jours, sans aucun problème. Je met quand même une solution de sauvegarde supplémentaire en cas de problème. Mais, je suis très satisfait de cette solution.
Avantage :
- Solution OPEN SOURCE à 100%.
- Non propriétaire, donc, aucun problème d'interropérabilité
- Facilité de mise en place
Inconvenient :
- Performance limité, solution Logiciel
- Snapshot LVM avec un statut expérimental dans le noyau Linux, donc, possible que ce ne soit pas stable ...
- Rapport Espace Utile/Espace utilisé faible, dans le cas d'un nombre faible de disque et d'utilisation du RAID1.
Description de la mise en place :
1ère étape : Mise en place des disques durs
- Installation physique des disques durs.
- définition d'une partition de type "Linux raid autodetect" sur la totalité des deux disques.
2ième étape : Création du RAID
- Installation de l'outil "mdadm"
- taper la commande : "mdadm -C /dev/md0 --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdb1"
- Ecrire la configuration mdadm dans le fichier de configuration /etc/mdadm.conf ( cf URL )
3ième étape : Mise en place de LVM
- Installation des outils LVM2
- Création du Volume Physique : "pvcreate /dev/md0"
- Création du Volume Group : "vgcreate rootvg /dev/md0"
- Création du Volume Logique Principale : "lvcreate -L 150G -n securelv rootvg"
4ième étape : Initialisation du volume logique principale
- Formatage du volume logique au format EXT3 : "mke2fs -j /dev/rootvg/securelv"
- Montage de la partition : "mount /dev/rootvg/securelv /stockage/secure
5ième étape : Création des snapshots LVM
Lorsque vous avez besoin de faire des snapshots soit dans des scripts soit manuellement voici la commande :
- exemple de Création du Snapshot : "lvcreate -L 20G -s -n snap_daily /dev/rootvg/securelv"
- exemple de suppression du Snapshot : "lvremove /dev/rootvg/snap_daily"
- Montage du snapshot : "mount -o ro /dev/rootvg/snap_daily /stockage/secure/~snapshot/yesterday
5ième étape : Superviser les différents éléments
- Voir le statut du raid : "cat /proc/mdstat" ou "mdadm -D /dev/md0"
- Voir les informations sur les Volumes Physiques LVM : "pvdisplay"
- Voir les informations sur les groupes de volume LVM : "vgdisplay"
- Voir les informations sur les Volumes logiques LVM : "lvdisplay"
Bilbiographie :
- Howto LVM en français
- Documentation pour le raid logiciel sous Linux avec mdadm
Donc, je me suis décidé à mettre en place un solution de stockage un peu plus complexe basé sur un serveur Linux avec LVM et basé sur deux disques durs de 250Go. J'accède à ce stockage via NFS ou Samba (Partage compatible Windows)
Le but : Avoir une solution de stockage réseau fiable pour toutes les données que je ne souhaite ne pas perdre (photos, mails,...). Pour le reste, je me prend pas la tête et je stocke cela à plat sur un seul disque.
Point Important : J'ai choisi d'utiliser une solution RAID et LVM Software offert par GNU/Linux pour pouvoir reproduire cette architecture de stockage sur n'importe quel PC, en cas de problème. Je ne veux pas être lié à une solution Hardware Propriétaire, qui en cas de pannes sera difficilement récupérable dans certains cas. Par contre, cela a un impact au niveau des performances.
Pour la fiabilité Hardware, je base ma solution sur du RAID1 sur deux disques (voire peut-être plus, si besoin). Pour cela, j'utilise comme je l'ai déjà dit, sur du RAID logiciel avec le Noyau Linux. Comme cela, j'écarte ainsi tout les cas de pannes de disque dur. J'ai aussi, deux disques durs de marques différentes, pour éviter les problèmes de série.
J'ajoute à cela, une sauvegarde mensuelle vers un autre PC, qui sera peut-être faites en direction d'un second site, dans un avenir proche, pour prendre en compte les désastres sites (Incendie, vol, ...). Pour certains éléments sensibles, comme les photos, la réplication est faites sur 2 sites supplémentaires à l'ajout de nouveaux éléments.
Avec tout cela, j'ai ajouté une couche LVM (Logical Volume Manager), qui permet d'avoir une gestion logique des volumes de stockage. On peut ainsi s'affranchir des limitations physiques d'un disque dur. On agrège un ensemble de disque dur (Volume physique) pour faire un groupe de volume (Volume Group), qui sera découpé en volume Logique. Mon volume physique est en réalité des couples de disques durs en RAID1 (Il y en a qu'un seul couple pour le moment). On peut ainsi agrandir un volume logique comme on le souhaite.
LVM permet aussi de faire des snapshots. Qu'est ce que c'est ? C'est prendre une photo de l'état d'un filesystem à un moment donné. On retrouve ainsi les données dans un état à un moment donné. Je fais ainsi un snapshot tout les jours, toutes les semaines et tous les mois. Je peux ainsi retrouver mes données que j'avais le mois précédent, la semaine dernière et hier. Comme cela, on peut retrouver les fichiers qu'on a effacé par mégarde.
Il faut savoir que les snapshots avec LVM sous linux sont assez lourdes lorsqu'on écrit sur le volume principale. Car, on copie des données aussi au niveau de chaque snapshot, pour éviter d'écraser des données. Donc, quand j'écris une données sur la volume principale, je copie l'ensemble de cette espace sur l'ensemble de mes snapshots. Donc, les performances en écriture sont plus faible. Mais, dans mon cas, je ne vois pratiquement aucun impact au niveau des transferts NFS ou SAMBA. Dans tout les cas, je suis limité par la bande passante de mon réseau 100Mb/s.
Il faut aussi avoir une bonne notion de la volumétrie de son volume principale, car on dimensionne ses snapshots en fonction de cette dernière. Par exemple, j'ai défini la taille de mes snapshots de la manière suivante pour un espace de stockage de 150Go :
- Snapshot journalier : 10Go
- Snapshot hebdomadaire : 20Go
- Snapshot mensuel : 55Go
Donc, il faut pas que je dépasse 10Go d'écriture par jours, 20Go par semaine et 55Go par mois. Sinon, sans quoi, le snapshot se désactive. Si on a vraiment aucune idée de l'espace nécessaire, on peut définir une taille de snapshot équivalent à celui du volume principale, pour éviter ce problème de désactivation de snapshot. Mais, cela reste très couteux en espace.
Mes snapshots sont faits automatiquement, à heure fixe dans la crontab, soit une fois par jours pour les journaliers, 1 fois par semaine pour l'hebdomadaire, ... Les heures ont été choisies lorsqu'il n'y a aucun accès sur le volume principale (entre 5h et 6h du matin). Ces volumes de snapshot sont montés automatiquement à la racine du volume dans un répertoire "~snapshot" sur des points de montage explicite : lastmonth, lastweek et yesterday. Cela permet d'accéder directement au snapshot et ainsi pouvoir faire des sauvegardes et récupérer des fichiers directement.
La solution fonctionne depuis 2 jours, sans aucun problème. Je met quand même une solution de sauvegarde supplémentaire en cas de problème. Mais, je suis très satisfait de cette solution.
Avantage :
- Solution OPEN SOURCE à 100%.
- Non propriétaire, donc, aucun problème d'interropérabilité
- Facilité de mise en place
Inconvenient :
- Performance limité, solution Logiciel
- Snapshot LVM avec un statut expérimental dans le noyau Linux, donc, possible que ce ne soit pas stable ...
- Rapport Espace Utile/Espace utilisé faible, dans le cas d'un nombre faible de disque et d'utilisation du RAID1.
Description de la mise en place :
1ère étape : Mise en place des disques durs
- Installation physique des disques durs.
- définition d'une partition de type "Linux raid autodetect" sur la totalité des deux disques.
2ième étape : Création du RAID
- Installation de l'outil "mdadm"
- taper la commande : "mdadm -C /dev/md0 --level=raid1 --raid-devices=2 /dev/hda1 /dev/hdb1"
- Ecrire la configuration mdadm dans le fichier de configuration /etc/mdadm.conf ( cf URL )
3ième étape : Mise en place de LVM
- Installation des outils LVM2
- Création du Volume Physique : "pvcreate /dev/md0"
- Création du Volume Group : "vgcreate rootvg /dev/md0"
- Création du Volume Logique Principale : "lvcreate -L 150G -n securelv rootvg"
4ième étape : Initialisation du volume logique principale
- Formatage du volume logique au format EXT3 : "mke2fs -j /dev/rootvg/securelv"
- Montage de la partition : "mount /dev/rootvg/securelv /stockage/secure
5ième étape : Création des snapshots LVM
Lorsque vous avez besoin de faire des snapshots soit dans des scripts soit manuellement voici la commande :
- exemple de Création du Snapshot : "lvcreate -L 20G -s -n snap_daily /dev/rootvg/securelv"
- exemple de suppression du Snapshot : "lvremove /dev/rootvg/snap_daily"
- Montage du snapshot : "mount -o ro /dev/rootvg/snap_daily /stockage/secure/~snapshot/yesterday
5ième étape : Superviser les différents éléments
- Voir le statut du raid : "cat /proc/mdstat" ou "mdadm -D /dev/md0"
- Voir les informations sur les Volumes Physiques LVM : "pvdisplay"
- Voir les informations sur les groupes de volume LVM : "vgdisplay"
- Voir les informations sur les Volumes logiques LVM : "lvdisplay"
Bilbiographie :
- Howto LVM en français
- Documentation pour le raid logiciel sous Linux avec mdadm
