Stockage

De Justine's wiki
Aller à la navigation Aller à la recherche

Stockage local

Matériel

Au fil du temps, plusieurs types de matériels se sont développés dans le but de stocker des données.

Les bandes magnétiques

Une des plus anciennes méthodes de stockage "amovible", nous sommes successivement passés de bandes magnétiques simples, au cassettes type "cassette audio", jusqu'au LTO 3/4 (Linear Tape-Open : une technique de stockage sur bande magnétique, au format ouvert développé par HP, IBM et Seagate à la fin des années 90). Leur temps d'accès étant supérieur à 1 seconde, elles servent de nos jours à des sauvegardes, par accès séquentiels.

Médias magnétique rotatifs

Cela inclut les disquettes (aujourd'hui bien dépassées : bien qu'ayant un temps d'accès court, le débit est limité et la fiabilité douteuse) et les disques durs à plateaux, dont les temps d'accès est supếrieur à 20 ms. Le débit étant important, ils servent en général de stockage principal.

Médias optiques

Cela inclut les CD-Rom (en lecture seule), et les CD-R, RW, DVD-R/R+/RAM, disque opto-magnétiques... Ces derniers ne pouvant rivaliser avec les disques durs pour ce qui est du débit et du temps d'accès, ils servent en général à l'archivage.

Médias électroniques

Cela inclut la RAM, très rapide mais volatile, et la mémoire flash, plus lente mais non volatile. Le SSD, un assemblage de mémoires flash, constitue un véritable disque dur. Celui-ci inclue :

  • Un processeur SOC,
  • Une interface de DD standard,
  • De la RAM pour la mémoire cache
  • Des modules de mémoire flash

Il a de nombreux avantages : pas de pièces mobiles, consomme et chauffe peu, est assez fiable et performant, et est un matériel standard. En revanche, il coûte cher !

Bus et Interfaces

Ils servent à assurer la connexion entre la carte mère et le périphérique. Dans la catégorie "Desktop", les moins chers, qui mettent l'intelligence sur le poste et favorisent les connexions internes, on a:

  • IDE, le plus vieux
  • ATA (Parrallèle), ou PATA
  • ATA (Série), ou SATA
    • Moins coûteux, ils montent à 7200 RPM, et en général dans les 2 To. Les vitesses sont de 1.5 (Sata 1), 3 Gbps (Sata 2), et 6 GBps (Sata 3), et ils fonctionnent en half-duplex ! On ne peut en brancher qu'un seul par interface.

Les interfaces serveur sont plus chères, mais elles mettent l'intelligence dans le périphérique, et peuvent proposer des connexions internes ou externes. On utilise en général :

  • Le SCSI (Parrallèle)
  • Le SAS (série), qui se rapporte au SATA
    • On peut en brancher jusqu'à 128 par interface, ils montent à 15000 RPM, et font en général dans les 450 Go. Ils coûtent cher, mais fonctionnent en full-duplex et vont de 3Gbps (SAS) à 6 Gbps (SAS 2.0).
  • Le Fibre Channel en série.

Différence série / parallèle

RTENOTITLERTENOTITLE

La transmission en série (norme RS-232) se fait de façon asynchrone (sans signal d'horloge), le périphérique devant être capable de distinguer les différents cractères de 8 bits (on utilise pour cela des bits start et stop, qui utilisent 20% de la bande passante). La transmission en parallèle consiste à envoyer simultanément des données sur plusieurs canaux. Différents types de ports parallèles permettent différents débits (EPP permet 8 à 16 Mbps, et ECP y ajoute du plug-and-play). Les connecteurs DB25 permettent de connecter un élements extérieur à l'ordinateur en parallèle.

Universal Serial Bus

L'USB (Port Série Universel, qu'on peut aussi appliquer au FireWire) est universel, aussi on peut y brancher n'importe quoi (y compris du stockage). Dans le raccordement, le protocole USB Mass Storage est utilisé. Peut s'appliquer au disques SATA.

Si les disques/clefs USB sont plug and play, ils sont aussi unplug and pray : des données non contrôlées et non sécurisées sont en danger. Il faut mettre en place une politique de stockage pour limiter la prolifération des données !

Politique de stockage

Chaque disque dur est découpé en partitions, chacune de ces partitions utilisant un FS (File Système), soit une façon d'organiser les fichiers sur le disque. Certains sont Multi-système. On compte différents FS :

  • ext4
  • swapFS
  • XFS
  • btrfs
  • NTFS
  • etc...

Une politique de stockage a pour but de ne pas laisser les données éparpillées, mais de les sécuriser (en les mutualisant, et en effectuant des contrôles et des sauvegardes). Le support de cette politique est le réseau de stockage.

Sécuriser

Une baie de stockage est un périphérique intelligent, qui contient un CPU, de la mémoire cache, des contrôleurs... La sécurité se fait de plusieurs façons :

  • En sécurisant l'environnement de la salle machines
  • En ayant des élements redondants et échangeables à chaud, sans perte de données ni arrêts
  • En utilisant le RAID
  • Les accès possibles (généralement indépendants des disques internes utilisés) sont:
    • e-SATA
    • SAS
    • Fibre Channel
    • Ethernet

 

Le RAID

Le RAID (Redundant Array of Independent Disks), permet de dupliquer automatiquement les données sur plusieurs disques, pour que celles-ci restent accessibles en cas de panne d'un disque. Le RAID agit au niveau bloc, et il n'as donc rien à faire du FS en place, à moins de travailler sur du RAID logiciel à l'ancienne.Les recopies de données peuvent être faites de 2 façons :

  • Raid Software : effectué par l'OS ou par un pilote spécifique
  • Raid Hardware : effectué par un contrôleur spécifique.

Il existe plusieurs niveaux de RAID :

Niveau de RAID Description Nombre min. de disques Capacité utile (Nbre de disques) Particularités
0 Striping/Concaténation 2 N Zéro RAID : pas de duplication !
1 Miroir 2 N/2 Chaque donnée est dupliquée sur un autre disque.
1+0 Miroir puis striping 4 N/2  
5 Stripes avec parité distribuée et E/S aléatoires 3 N-1 Chaque disque fait la parité d'un/plusieurs autres : la reconstruction est longue et stressante
6 Stripes avec deux calculs de parité différents distribués
et E/S aléatoires
4 N-2 La double parité rend le processus plus complexe.

 

Augmenter l'espace de stockage

On peut étendre via des JBOD, on a alors pas d'intelligence intégrée. On augmente la capacité de stockage mais pas la puissance de traitement. On peut aussi ajouter des baies, pour augmenter la puissance de traitement; certains constructeurs permettent d'augmentation de la puissance de traitement en ajoutant des contrôleurs. Les fonctions dépendent de l'intelligence de la baie : il faut faire le rapport prix/fonctions.

Partitionnement d'une baie

Sur une baie de 24 To, on peut partitionner comme suit :

  • Un volume utile de 12 TO en RAID6, de 8*2To (prendre en compte les disques de parité !)
  • Un volume de 12To en RAID5, de 7*2 To (toujours avec les disques de parité), en gardant un emplacement "Hot spare".

Performance des baies

Pour choisir le constructeur, le mieux est de tester en conditions réelles. Le choix SAS/SATA peut se faire comme suit :

  • SAS : BDD, E/S aléatoires
  • SATA : Le Reste
  • SAS SSD : Est-ce raisonnable?

Le cache est important : la baie embarque beaucoup de cache, les différences sont lissées mais elles existent. SATA suffit dans beaucoup de cas.

Mise en place d'un serveur de sauvegardes

<pdf>Fichier:Stockagetp1.pdf</pdf>

Le but du TP est, à partir d'une VM sous Debian dotée de trois disques additionnels d'un 1 Go chacun, de mettre en place du RAID1. On utilise pour cela mdadm : il s'agira de faire du RAID logiciel. Mdadm est l'utilitaire standard sous Linux pour gérer ce genre de RAIDs, qui permet non seulement de monter des grappes RAID mais également de les monitorer.

Machine de départ

Je part d'une Debian 9, dotée de 2 Gbo de RAM et de 2 processeurs (on peut certainement être moins généreux, mais j'ai les ressources disponibles alors je préfère gagner un peu de temps les allouant). Elle est contrôlée par SSH.

Installation des outils

Je commence par une installation de sudo et vim (par habitude), avant de mettre à jour les paquets.

su
apt update && apt install sudo vim
visudo #Je rajoute mon utilisateur
exit
sudo apt full-upgrade
sudo apt install mdadm

Mise en place du RAID à proprement parler

Nous avons bel et bien nos trois disques (au total) : un disque système, et trois qui serviront dans le cadre du RAID. On peut les voir ainsi que leur nom à l'aide d'un fdisk -l:

justine@serveurlvmraid:~$ sudo fdisk -l
Disque /dev/sdd : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sdc : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sdb : 1 GiB, 1073741824 octets, 2097152 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Disque /dev/sda : 8 GiB, 8589934592 octets, 16777216 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x468ddc7c

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1    *            2048 12582911 12580864     6G 83 Linux
/dev/sda2             12584958 16775167  4190210     2G  5 Étendue
/dev/sda5             12584960 16775167  4190208     2G 82 partition d'échange Linux / Solaris

Mon disque système est sda, mes disques additionnels sont sdb, sdc et sdd.

On choisit de faire un RAID 1 (miroir - cf le tableau un peu plus haut):

justine@serveurlvmraid:~$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Le détail de la commande :

  • --level=1 correspond à du RAID1
  • --raid-devices sert à choisir les disques à mettre en RAID
  • --create /dev/md0 sert à préciser le disque dur virtuel qui sera constitué de nos deux disques.

On vérifie que cela s'est bien passé :

justine@serveurlvmraid:~$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Jan  8 22:42:29 2019
     Raid Level : raid1
     Array Size : 1047552 (1023.00 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Jan  8 22:42:36 2019
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : serveurlvmraid:0  (local to host serveurlvmraid)
           UUID : a0045f45:6ad1c193:fe374a5b:fb7a654b
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

Notre création s'est bien passée, un fdisk -l nous informe même de la création de /dev/md0, reconnu comme étant un disque d'1 Go :

Disque /dev/md0 : 1023 MiB, 1072693248 octets, 2095104 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

Ajout d'un disque en spare

Notre troisième disque sera ajouté en spare au RAID, c'est-à-dire qu'il servira de disque de remplacement en cas de problème:

justine@serveurlvmraid:~$ sudo mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd

On peut vérifier comme tout à l'heure:

justine@serveurlvmraid:~$ sudo mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Jan  8 22:42:29 2019
     Raid Level : raid1
     Array Size : 1047552 (1023.00 MiB 1072.69 MB)
  Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
   Raid Devices : 2
  Total Devices : 3
    Persistence : Superblock is persistent

    Update Time : Tue Jan  8 22:48:50 2019
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 1

           Name : serveurlvmraid:0  (local to host serveurlvmraid)
           UUID : a0045f45:6ad1c193:fe374a5b:fb7a654b
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

       2       8       48        -      spare   /dev/sdd

On voit que le disque en spare a été ajouté.

Que faire avec un système qui ne boote plus et deux disques en RAID?

La procédure donnée dans le TP est la suivante :

  • Booter sur un liveCD (genre systemrescuecd)
  • mdadm --examine -scan >> /etc/mdadm/mdadm.conf #Donne entre autre l'UUID du RAID
  • service mdadm-raid restart
  • mount /dev/mdX /mnt/raidX

Remplacement d'un disque dur à chaud

Mise en panne (simulée) d'un disque

Pour tester l'efficacité de notre RAID, on va simuler la panne d'un disque physique, afin de montrer l'utilité du RAID :

justine@serveurlvmraid:~$ sudo mdadm --fail /dev/md0 /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0

On suit ensuite les différentes étapes de reconstruction :

watch -n 1 'cat /proc/mdstat'
#Ou, plus clair :
watch -n 1 'sudo mdadm --detail /dev/md0'

Sur nos disques vides, c'est très rapide, mais on voit bien que sdd a pris le relais :

Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd

       1       8       32        -      faulty   /dev/sdc

Remplacement (simulé) d'un disque

Il suffit d'enlever le disque et de le remettre, comme on le ferait dans une baie :

justine@serveurlvmraid:~$ sudo mdadm --manage --remove /dev/md0 /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
justine@serveurlvmraid:~$ sudo mdadm --manage --add /dev/md0 /dev/sdc
mdadm: added /dev/sdc

Une dernière vérification avec mdadm -D /dev/md0 nous donne :

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       2       8       48        1      active sync   /dev/sdd

       3       8       32        -      spare   /dev/sdc

sdc est bel et bien de retour, cette fois-ci en tant que spare.

Rendre la config définitive

C'est simple :

root@serveurlvmraid:/etc/mdadm# mdadm --detail -scan >> /etc/mdadm/mdadm.conf

(Pour une raison étrange, cela ne fonctionne pas avec sudo, il faut se logger en tant que root).