Brevet FR3016454A1 — publié le 20150717

Procédé et dispositif de stockage de données, procédé et dispositif de décodage de données stockées, et programme d'ordinateur correspondants. 1. Domaine de l'invention Le domaine de l'invention est celui du stockage de données et de la récupération ultérieure de ces données. Plus précisément, l'invention concerne une technique de stockage de données reposant sur l'utilisation d'un code correcteur d'erreurs, et plus spécifiquement sur l'utilisation d'un code en graphe, pour répartir astucieusement les données sur différents supports de stockage et optimiser ainsi le décodage associé. En particulier, l'invention repose sur l'utilisation de codes en graphe creux, dit codes en graphe « sparse ». L'invention trouve notamment des applications pour le stockage et la récupération de données personnelles, de données au sein d'une entreprise, etc. 2. Art antérieur On s'attache ci-après à décrire une problématique existante dans le domaine des réseaux de stockage distribués centralisés (RSDC). L'invention ne se limite bien sûr pas à ce domaine particulier d'applications, mais présente un intérêt pour toute technique de stockage devant faire face à une problématique proche ou similaire. Un réseau RSDC est classiquement constitué d'un serveur maître, d'un ou plusieurs ensembles de disques durs qui ont chacun un serveur esclave, et de clients. Le serveur maître est chargé de réceptionner les fichiers auprès des clients, de les répartir et de les transmettre aux serveurs esclaves. Un serveur esclave est chargé d'encoder les fichiers et de répartir les octets générés sur les disques durs à sa disposition. En cas de défaillance d'un disque dur, le serveur esclave qui lui est associé est chargé de retrouver les données effacées à partir des parités précédemment calculées. Lors de la lecture des données stockées par un client, le serveur maître transmet aux serveurs esclaves concernés la demande, collecte les données et les transmet au client. La figure 1 illustre un exemple de réseau RSDC comprenant quatre clients 11 à 14, un ensemble de cinq disques durs D1 à D5, et un unique serveur 15 chargé des tâches maître et esclave. Pour protéger les données stockées de la défaillance ou de la perte d'un disque dur notamment, il est nécessaire d'utiliser la réplication (copies multiples de fichiers sur différents disques durs) ou de mettre en oeuvre un codage des données au moyen d'un code correcteur d'erreurs. Un code correcteur d'erreurs est un code permettant à un décodeur de détecter ou de corriger des altérations à la suite de la transmission ou du stockage. Un tel code correcteur d'erreurs introduit de la redondance, permettant de reconstruire des données effacées en cas de défaillance d'un disque dur. En reprenant l'exemple illustré en figure 1, on stocke par exemple un premier ensemble de données source (D1A) d'un premier mot de code sur le disque D1, un deuxième ensemble de données source (D2A) du premier mot de code sur le disque D2, un troisième ensemble de données source (D3A) du premier mot de code sur le disque D3, un quatrième ensemble de données source (D4A) du premier mot de code sur le disque D4, et un ensemble de données de redondance (PA) du premier mot de code sur le disque D5. De la même façon, on stocke par exemple un premier ensemble de données source (D1B) d'un deuxième mot de code sur le disque D1, un deuxième ensemble de données source (D2B) du deuxième mot de code sur le disque D2, un troisième ensemble de données source (D2C) du deuxième mot de code sur le disque D3, un ensemble de données de redondance (PB) du deuxième mot de code sur le disque D5, et un quatrième ensemble de données source (D2D) du deuxième mot de code sur le disque D4, etc. Selon un autre exemple, si l'on considère un réseau comprenant N disques durs, tel que N-M disques durs stockent des données source (encore appelées données utilisateurs) et M disques durs stockent des données de redondance (encore appelé données de parité), et si le code correcteur d'erreurs est un code MDS, le système pourra supporter M défaillances simultanées sans subir de perte de données. Les principaux algorithmes utilisés aujourd'hui pour le stockage de données sur les réseaux RSDC, qui regroupent les protocoles d'allocation des données sur le réseau de stockage ainsi que les calculs d'éventuelles redondances (codage), sont définis sous le terme RAID (en anglais « Redundant Array of Independent Disks », en français « regroupement redondant de disques indépendants »). En informatique, le mot RAID désigne les techniques permettant de répartir des données sur plusieurs disques durs afin d'améliorer soit la tolérance aux pannes, soit la sécurité, soit les performances de l'ensemble, ou une répartition de tout cela. A l'origine, le protocole RAID a été proposé pour composer un disque dur de grande capacité, donc onéreux, à partir de plus petits disques durs peu onéreux, mais moins fiables. Les disques durs connectés en réseau peuvent utiliser différents algorithmes RAID, nommés Niveaux RAID. Chacun de ces niveaux constitue un mode d'utilisation du réseau de disques durs, en fonction : des performances : mesure des temps de reconstruction et du nombre de défaillances simultanées supportées, du coût de stockage : rapport entre le nombre d'octets disponible pour le stockage et le nombre d'octet total dans le réseau, des accès aux disques durs : mesure des temps d'écriture et de lecture en l'absence de défaillances sur le réseau. La constitution des différents réseaux RAID résulte donc d'un compromis entre les différents paramètres que sont la protection devant les défaillances de disques durs, la vitesse de lecture, d'écriture et de reconstruction des données sur le réseau et enfin le coût de stockage. La principale limite de cette technologie est qu'il n'existe pas de niveau RAID permettant la gestion de plusieurs défaillances de disques durs simultanées, avec un coût de stockage faible et peu complexe. Le principal frein technologique vient du code correcteur d'erreurs qui permet de protéger les données stockées. En effet, pour les réseaux de stockage de données, on utilise classiquement un code de type MDS pour « maximum distance séparable » (ou des combinaisons de codes MDS), qui est déterministe. Ainsi, pour chacun des niveaux RAID, le code utilisé est un code MDS. Cependant, un tel code correcteur d'erreurs de type MDS est complexe et difficilement utilisable pour pallier plus de deux défaillances, car il devient relativement lent par rapport aux solutions sans code correcteur d'erreurs. De plus, l'utilisation d'un tel code correcteur d'erreurs de type MDS engendre un coût bien plus élevé en raison du matériel plus performant nécessaire à la réalisation des calculs. En particulier, l'utilisation d'un tel code correcteur d'erreurs de type MDS nécessite la mise en oeuvre d'un algorithme de décodage complexe. 3. Exposé de l'invention L'invention propose une solution nouvelle qui ne présente pas l'ensemble de ces inconvénients de l'art antérieur, sous la forme d'un procédé de stockage de données sur une pluralité de supports de stockage, mettant en oeuvre un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées. Selon l'invention, le procédé de stockage met en oeuvre des étapes de : détermination d'un schéma d'allocation des variables sur les supports de stockage, stockage d'au moins deux vecteurs de données codées, obtenus en appliquant le code à au moins deux vecteurs de données source, stockant, pour chacun des vecteurs de données codées, les données codées associées aux variables selon le schéma d'allocation. L'invention propose ainsi une solution nouvelle pour le stockage de données, reposant sur l'idée d'appliquer le même schéma d'allocation « vecteur de données codées par vecteur de données codées », i.e. « bande par bande », dans un procédé de stockage de données mettant en oeuvre un code correcteur d'erreurs de type code en graphe, défini par un ensemble de variables liées par des contraintes. On rappelle qu'une bande, en anglais « stripe », correspond à un groupe de données stockées sur différents supports de stockage, qui sont codées/décodées ensemble. Cette répétition du même schéma d'allocation bande par bande, dans un procédé de stockage de données mettant en oeuvre un code correcteur d'erreurs de type code en graphe, permet la mise en oeuvre d'un décodeur itératif pour retrouver les données source. On diminue ainsi la complexité du décodage. En particulier, chaque support de stockage étant organisé en au moins deux secteurs, l'étape de stockage met en oeuvre le stockage d'un premier vecteur de données codées, stockant les données codées associées aux variables dans un premier secteur de chaque support de stockage selon le schéma d'allocation, et le stockage d'au moins un deuxième vecteur de données codées stockant les données codées associées aux variables dans au moins un deuxième secteur de chaque support de stockage selon le schéma d'allocation. Ainsi, une première bande comprend les données codées du premier vecteur de données codées, une deuxième bande comprend les données codées du deuxième vecteur de données codées, etc. Au sein d'un support de stockage, les données codées du premier vecteur de données codées sont stockées dans un secteur. L'ensemble des secteurs associés au premier vecteur de données codées forme donc la première bande. En particulier, les étapes de stockage d'un premier vecteur de données codées et de stockage d'au moins un deuxième vecteur de données codées peuvent être mises en oeuvre simultanément, une fois que le schéma d'allocation est déterminé, ou bien successivement. On note également qu'un code correcteur d'erreurs selon l'invention est conçu pour corriger les erreurs de type effacement (au sein) d'un support de stockage. On rappelle par ailleurs qu'il est connu de l'Homme du Métier de représenter un code correcteur d'erreurs sous la forme d'un graphe de Tanner, sous la forme d'un système d'équations de parité, ou sous la forme d'une équation matricielle avec matrice génératrice ou matrice de contrôle de parité, de façon équivalente. En particulier, les représentations sous forme d'un graphe de Tanner ou d'un système d'équations de parité sont génériques, puisqu'elles proposent un ensemble de combinaisons que les variables (données source et/ou données de redondance) doivent respecter. Les représentations sous forme d'une équation matricielle avec matrice génératrice permettent de déterminer des données de redondance à partir de données source choisies parmi les variables. En particulier, on note que les données source ou de redondance peuvent être des bits ou des symboles, et correspondent à des valeurs portées par les variables. On emploie donc indifféremment les termes données codées, données source et/ou de redondance, symboles, bits, valeurs, pour désigner les éléments des vecteurs de données codées. Selon une caractéristique particulière de l'invention, le code correcteur d'erreurs est de type code en graphe creux, dit code en graphe « sparse », dont la matrice génératrice ou la matrice de contrôle de parité est une matrice creuse. En d'autres termes, un tel code peut être représenté par une matrice génératrice ou une matrice de contrôle de parité comprenant principalement des éléments nuls. Il s'agit par exemple d'un code de type LDPC ou dérivé d'un code LDPC (en anglais « Low Density Parity Check »). De tels codes en graphe sont peu complexes, et permettent donc de diminuer la complexité de codage et de décodage des données par rapport aux techniques de codage MDS classiquement utilisées dans le domaine du stockage de données. On peut également noter qu'il n'est pas évident d'utiliser les codes en graphe pour le stockage de données, car ces codes ont classiquement un caractère probabiliste et sont donc plutôt utilisés quand une retransmission des données est possible. C'est pourquoi l'art antérieur relatif au stockage de données s'intéresse principalement aux codes MDS. Selon une autre caractéristique particulière de l'invention, le code correcteur d'erreurs est systématique. De ce fait, le vecteur de données codées à stocker, obtenu à l'issu du codage, porte à la fois les données source et des données de redondance. Il est ainsi possible de lire une partie des données codées (la partie correspondant aux données source) sans réaliser d'opérations mathématiques. Selon une première variante de l'invention, l'ensemble de variables comprenant des variables de données source, associées aux données source, et des variables de parité, associées aux données de redondance, l'étape de détermination d'un schéma d'allocation alloue des supports de stockage distincts aux variables de données source et aux variables de parité. Il est ainsi possible de disposer de supports de stockage réservés pour le stockage des données source (données utilisateur), et des supports de stockage réservés pour le stockage des données de redondance (données de parité). Selon une deuxième variante de l'invention, l'étape de détermination d'un schéma d'allocation alloue au moins un même support de stockage à au moins une des variables de données source et au moins une des variables de parité. Il est ainsi possible de disposer de supports de stockage mixtes, stockant à la fois des données de redondance (données de parité) et des données source (données utilisateur). En particulier, les supports de stockage appartiennent au groupe comprenant : - des disques durs, - des bandes magnétiques, - des mémoires flash, - etc. Notamment, de tels supports de stockage peuvent être connectés en réseau. Un tel réseau peut notamment être dynamique et flexible. En cas de modification du réseau, le schéma d'allocation peut être mis à jour. Selon une caractéristique particulière, tous les supports de stockage ont la même taille. Dans un autre mode de réalisation, l'invention concerne un dispositif de stockage de données sur une pluralité de supports de stockage, utilisant un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes, chaque variable étant associée à des données source et/ou des données de redondance. Selon l'invention, le dispositif de stockage comprend : un module de détermination d'un schéma d'allocation des variables sur les supports de stockage, un module de stockage d'au moins deux vecteurs de données codées, obtenus en appliquant le code à au moins deux vecteurs de données source, stockant, pour chacun des vecteurs de données codées, les données codées associées aux variables selon ledit schéma d'allocation. Un tel dispositif de stockage de données est notamment adapté à mettre en oeuvre le procédé de stockage de données décrit précédemment. Il est par exemple intégré dans un serveur (esclave ou maître-esclave) d'un réseau RSDC, chargé de coder les données utilisateurs et de répartir les données codées générées sur les supports de stockage à sa disposition. Un tel dispositif de stockage de données pourra bien sûr comporter les différentes caractéristiques relatives au procédé de stockage de données selon l'invention, qui peuvent être combinées ou prises isolément. Ainsi, les caractéristiques et avantages de ce dispositif de stockage de données sont les mêmes que ceux du procédé de stockage de données. Par conséquent, ils ne sont pas détaillés plus amplement. En particulier, un même module de stockage peut réaliser les opérations de stockage d'un premier vecteur de données codées et de stockage d'au moins un deuxième vecteur de données codées. L'invention concerne par ailleurs un procédé de décodage de données stockées sur une pluralité de supports de stockage, les données ayant été préalablement stockées sous la forme d'au moins deux vecteurs de données codées, obtenus en appliquant un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes à au moins deux vecteurs de données source, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, et les données codées associées aux variables de chacun des vecteurs de données codées ayant été stockées sur la pluralité de supports de stockage selon un même schéma d'allocation. Selon l'invention, le procédé de décodage met en oeuvre : - une première étape de décodage d'un des vecteurs de données codées, dit premier vecteur de données codées, déterminant un ordre de résolution des équations d'un système d'équations représentatif du code et mettant en oeuvre une résolution desdites équations , et - au moins une deuxième étape de décodage d'un autre des vecteurs de données codées, dit deuxième vecteur de données codées, distincte de la première étape de décodage, tenant compte dudit ordre de résolution des équations mis en oeuvre lors de la première étape de décodage. L'invention permet ainsi la mise en oeuvre d'un décodage de type itératif, pour une application dans le domaine du stockage de données. Un tel décodage offre une complexité réduite par rapport aux techniques de décodage classiquement utilisées dans ce domaine. De plus, du fait de l'utilisation du même schéma d'allocation bande par bande, le procédé de décodage selon l'invention permet de n'effectuer qu'une seule fois la phase de recherche des équations à une inconnue. En effet, comme on stocke les données associées aux mêmes variables du code sur les mêmes disques, on aura toujours à résoudre les équations du système d'équations dans le même ordre. Il est donc possible de mémoriser cet ordre pour le décodage d'un premier vecteur de données codées, puis d'appliquer ce même ordre de résolution des équations pour le décodage des autres vecteurs de données codées. On obtient ainsi un gain de temps remarquable sur le décodage des données. En particulier, un tel procédé de décodage est adapté à décoder des données stockées selon le procédé de stockage décrit ci-dessus. Ainsi, les caractéristiques et avantages de ce procédé de décodage de données stockées sont les mêmes que ceux du procédé de stockage de données. Selon un aspect particulier de l'invention, lorsqu'au moins un des supports de stockage est défaillant, la première étape de décodage met en oeuvre au moins une itération des étapes suivantes : o recherche, dans un système d'équations représentatif du code, d'au moins une équation présentant une seule variable associée à une donnée codée du premier vecteur de données codées préalablement stockée sur le ou les supports de stockage défaillants, dite variable effacée, o reconstruction de la ou des données codées du premier vecteur de données codées associées à la ou aux variables effacées, par résolution de la ou des équations, délivrant au moins une donnée reconstruite, o mise à jour du système d'équations tenant compte de la ou des données reconstruites, et La ou les deuxième(s) étape(s) de décodage met(tent) en oeuvre une reconstruction d'au moins une donnée codée du deuxième vecteur de données codées associées à la ou aux variables effacées, par résolution du système d'équations représentatif du code selon l'ordre de résolution. L'ordre de résolution des équations peut notamment être stocké dans une mémoire au cours d'une étape de mémorisation. Dans un autre mode de réalisation, l'invention concerne un dispositif de décodage de données stockées sur une pluralité de supports de stockage, les données ayant été préalablement stockées sous la forme d'au moins deux vecteurs de données codées, obtenus en appliquant un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes à au moins deux vecteurs de données source, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, et les données codées associées aux variables de chacun des vecteurs de données codées ayant été stockées sur la pluralité de supports de stockage selon un même schéma d'allocation. Selon l'invention, un tel dispositif de décodage comprend : un premier module de décodage d'un desdits vecteurs de données codées, dit premier vecteur de données codées, déterminant un ordre de résolution des équations d'un système d'équations représentatif du code et mettant en oeuvre une résolution desdites équations, et au moins une deuxième module de décodage d'un autre desdits vecteurs de données codées, dit deuxième vecteur de données codées, distinct dudit premier module de décodage, tenant compte de l'ordre de résolution des équations mis en oeuvre par le premier module de décodage. Un tel dispositif de décodage de données stockées est notamment adapté à mettre en oeuvre le procédé de décodage de données stockées décrit précédemment. Il est par exemple intégré dans un serveur (esclave ou maître-esclave) d'un réseau RSDC, chargé de lire les données stockées et de reconstruire les données effacées. Un tel dispositif de décodage de données stockées pourra bien sûr comporter les différentes caractéristiques relatives au procédé de décodage de données stockées selon l'invention, qui peuvent être combinées ou prises isolément. Ainsi, les caractéristiques et avantages de ce dispositif de décodage de données stockées sont les mêmes que ceux du procédé de décodage de données stockées. Par conséquent, ils ne sont pas détaillés plus amplement. L'invention concerne par ailleurs un ou plusieurs programmes d'ordinateur, comportant des instructions pour l'exécution des étapes du procédé de stockage de données tel que décrit précédemment, et/ou du procédé de décodage de données stockées tel que décrit précédemment, lorsque le ou les programmes sont exécutés par un ordinateur. Les procédés selon l'invention peuvent donc être mis en oeuvre de diverses manières, notamment sous forme câblée ou sous forme logicielle. 4. Liste des figures D'autres caractéristiques et avantages de l'invention apparaîtront plus clairement à la lecture de la description suivante d'un mode de réalisation particulier, donné à titre de simple exemple illustratif et non limitatif, et des dessins annexés, parmi lesquels : la figure 1 illustre un exemple de réseau RSDC ; la figure 2 rappelle la notion de graphe de Tanner ; - la figure 3 présente les principales étapes mises en oeuvre par un procédé de stockage de données selon au moins un mode de réalisation de l'invention ; la figure 4 illustre la structure d'un ensemble de disques durs selon un exemple de mise en oeuvre de l'invention ; la figure 5 présente les répartitions des données de trois vecteurs de données codées sur quinze disques durs obtenues à l'issue des étapes de stockage ; la figure 6 présente les principales étapes mises en oeuvre par un procédé de décodage de données stockées selon au moins un mode de réalisation de l'invention ; les figures 7 et 8 illustrent respectivement la structure simplifiée d'un dispositif de stockage mettant en oeuvre une technique de stockage de données et la structure simplifiée d'un dispositif de décodage de données stockées selon un mode de réalisation particulier de l'invention. 5. Description d'un mode de réalisation de l'invention 5.1 Principe général Le principe général de l'invention repose sur l'utilisation d'un type particulier de codes correcteurs d'erreurs, les codes en graphe, en particulier de type « sparse », pour les applications de stockage de données. La solution proposée repose sur l'utilisation d'un même schéma d'allocation « bande par bande », permettant de stocker des données différentes associées aux mêmes variables sur les mêmes supports de stockage. Cette répétition du schéma d'allocation bande par bande, dans un procédé de stockage de données mettant en oeuvre un code correcteur d'erreurs de type code en graphe, qui présente une faible complexité d'encodage et de décodage, permet la mise en oeuvre d'un décodeur itératif opérant avec un temps de décodage inférieur aux décodeurs classiquement utilisés. On note que cette approche n'est pas évidente pour l'Homme du Métier, pour lequel les codes en graphe peuvent être utilisés pour une application dans laquelle une retransmission des données est possible, du fait du caractère probabiliste de ces codes, et non pour une application de stockage des données. 5.2 Rappels sur les codes en graphe Les codes en graphe « sparse » regroupent différentes familles de codes correcteurs d'erreurs. La première famille de ces codes, notée LDPC, a été introduite par Robert Gallager. Le nom de ces codes vient du fait que, contrairement aux codes MDS par exemple, la matrice génératrice utilisée (ou la matrice de contrôle de parité) comprend beaucoup d'éléments nuls, ce qui signifie que le calcul des bits de parité devient moins complexe car il nécessite moins d'opérations. Le terme « code en graphe » vient de la représentation en graphe, généralement bipartite, que Tanner a proposé pour ces codes. Cette représentation s'est généralisée pour les familles dérivées des codes LDPC, et le terme code en graphe regroupe aujourd'hui ces nombreux codes aux complexités d'encodage et/ou de décodage faibles. A titre d'exemple, la figure 2 illustre un code correcteur d'erreurs sous sa représentation sous forme de graphe, où les ronds à gauche du graphe correspondent aux variables v/ à v5 (qui peuvent être de type données source et/ou données de redondance), et les carrés à droite correspondent aux contraintes cl à c3. Comme déjà indiqué, un tel code peut, de façon équivalente, être représenté par un système d'équations ou par une matrice génératrice ou une matrice de contrôle de parité. Ainsi, le code représenté en figure 2 peut également s'exprimer sous la forme du système d'équations suivant : v1 + v2 + v3 + v4 = 0 vl + v3 + v5 = 0 v2 + v4 + v5 =0 ou de la matrice de contrôle de parité suivante : 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 où les colonnes de la matrice de contrôle de parité représentent les différentes variables v/ à v5 et les lignes de la matrice de contrôle de parité les différentes contraintes cl à c3 que doivent respecter les variables v/ à v5. Les codes LDPC, et leurs familles dérivées, peuvent atteindre ou se rapprocher de la borne de Shannon, tout en gardant une complexité d'encodage et de décodage faible grâce à l'utilisation d'un décodeur itératif, par exemple de type « Belief Propagation » (décodeur de propagation de croyances). H= Cette diminution de la complexité a un principal inconvénient : les codes en graphe ne sont pas MDS avec un décodeur itératif. Ceci signifie, dans le cas du stockage de données, qu'il est nécessaire d'avoir Y disques de redondance pour supporter X disques durs défaillants dans le réseau, avec Y>X. 5.3 Stockage de données On présente ci-après, en relation avec la figure 3, les principales étapes mises en oeuvre par un procédé de stockage de données sur une pluralité de supports de stockage selon l'invention, chaque support de stockage étant organisé en au moins deux secteurs. Un tel procédé met en oeuvre un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes et pouvant donc être représenté par un graphe. En particulier, un tel un code en graphe est de type sparse. Un tel procédé peut éventuellement mettre en oeuvre une étape préalable de construction 30 du code, par exemple à l'initialisation de l'algorithme de stockage. Au cours d'une première étape 31, on détermine un schéma d'allocation des variables sur les supports de stockage. Par exemple, on définit que les données associées à une variable v0 seront toutes stockées sur un disque D1, dans différents secteurs de D1, que les données associées à une variable v1 seront toutes stockées sur le disque D1, dans différents secteurs de D1, que les données associées à une variable v2 seront toutes stockées sur un disque D2, dans différents secteurs de D2, que les données associées à une variable v3 seront toutes stockées sur le disque D2, dans différents secteurs de D2, que les données associées à une variable v4 seront toutes stockées sur un disque D3, dans différents secteurs de D3, et que les données associées à une variable v4, seront toutes stockées sur le disque D3, dans différents secteurs de D3. Au cours d'une deuxième étape 32, on stocke au moins deux vecteurs de données codées, obtenus en appliquant le code à au moins deux vecteurs de données source. Plus précisément, on stocke les données codées associées aux variables de chacun des vecteurs de données codées selon le schéma d'allocation. Par exemple, on stocke au cours d'une sous-étape 321 un premier vecteur de données codées, noté R1, obtenu en appliquant le code à un premier vecteur de données source, noté U1. Plus précisément, on stocke au cours de cette étape les données codées associées aux variables dans un premier secteur de chaque support de stockage selon le schéma d'allocation. On stocke au cours d'une sous-étape 322 au moins un deuxième vecteur de données codées, noté Ri, obtenu en appliquant le code à au moins un deuxième vecteur de données source, noté Ui. Plus précisément, on stocke au cours de cette étape les données codées associées aux variables dans au moins un deuxième secteur de chaque support de stockage selon le même schéma d'allocation. On note que les sous-étapes 321 et 322 de stockage peuvent être mises en oeuvre successivement ou simultanément. En effet, dans la mesure où le schéma d'allocation utilisé pour stocker tous les vecteurs de données codées est identique, l'ordre de stockage des vecteurs n'a pas d'importance. On rappelle que la notion de variable est définie au niveau de la construction même du code. Un code correcteur d'erreurs défini ainsi un ensemble de combinaisons que les variables doivent respecter. Ces variables peuvent prendre différentes valeurs, correspondant à des données codées, i.e. des données source et/ou des données de redondance d'un « mot de code », encore appelé vecteur de données codées. La figure 4 illustre un exemple de supports de stockage utilisés selon l'invention. On considère selon cet exemple un ensemble de cinq disques durs D1, D2, D3, D4 et D5, chacun décomposé en trois secteurs S1, S2 et S3. Par exemple, la taille de chaque secteur est de 512 ou 1024 octets. Le codage se fait d'un disque à l'autre sur la même série de secteurs, c'est-à-dire que l'on encode les premiers secteurs S1 de chaque disque du réseau ensemble, puis les deuxièmes secteurs S2 de chaque disque D1 à D5, etc. A chaque série de secteurs correspond donc un mot de code différent, i.e. un vecteur de données codées différent. L'ensemble formé par une série de secteurs est appelé bande. Ainsi, la première bande B1 est formée par l'ensemble des premiers secteurs S1 de chaque disque D1 à D5, stockant le premier vecteur de données codées. La deuxième bande B2 est formée par l'ensemble des deuxièmes secteurs S2 de chaque disque D1 à D5, stockant le deuxième vecteur de données codées. La troisième bande B3 est formée par l'ensemble des troisièmes secteurs S3 de chaque disque D1 à D5, stockant le troisième vecteur de données codées. Cette structure particulière permet de répéter bande par bande le même schéma d'allocation, ce qui permet d'optimiser le décodage. On décrit ci-après un exemple de mise en oeuvre de l'invention, pour le stockage de données sur un ensemble de quinze disques durs D1 à D15 supportant les défaillances de quatre disques durs. Par exemple, on utilise un code correcteur d'erreurs de type Hamming [15,11,3] . Ce code étant de distance minimale égale à 3, il permet de supporter la perte/défaillance d'au moins deux disques durs. On peut noter qu'il est non MDS (puisqu'il utilise quatre symboles de parité/données de redondance. Un tel code peut être définit par une matrice de contrôle de parité H telle que : 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1 ou par la matrice génératrice G telle que : H G [ ] avec P la partie de la matrice génératrice utilisée pour calculer les données de redondance, telle que : P= 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 On note que la forme et/ou la taille de la matrice génératrice ou de contrôle de parité peuvent être définies en tenant compte du nombre de supports de stockage disponibles et/ou du nombre d'effacements de variables/ défaillance de supports de stockage autorisés. Ainsi, le nombre de colonnes de la matrice génératrice ou de contrôle de parité doit être égal au nombre de supports de stockage, ou un multiple du nombre de supports de stockage. Les colonnes de la matrice de contrôle de parité H représentent les différentes variables v0 à v14 du code correcteur d'erreurs, et les lignes de la matrice de contrôle de parité les différentes contraintes c0 à c3 que doivent respecter les variables v0 à v14. Par exemple, on peut définir les équations suivantes : v4+v5+v6+v7+v8+v9+v10+v11 = 0 v1+v2+v3+v7+v8+v9+v10+v12 =0 v0+v2+v3+v5+v6+v9+v10+v13 = 0 v0+v1+v3+v4+v6+v8+v10+v14 = 0 où l'opérateur « + » est un « ou exclusif », encore noté XOR. Ainsi, si l'on considère un vecteur de données U comprenant des données source, tel que U =(u0,u1,u2,....,u10), alors le vecteur de données codées à stocker R, comprenant des données source et des données de redondance, tel que R=(r0j1,r2,....,r14), est obtenu de la façon suivante : R=GxU où r0 à r10 correspondent à des données source, et r11 à r14 à des données de redondance. En effet, le code présenté étant systématique, les valeurs du vecteur de données source U se retrouvent à l'identique dans le vecteur de données à stocker R. Selon cet exemple, on considère que chaque disque dur stocke les données associées à une seule variable. Ainsi, le schéma d'allocation associe la variable v0 au disque dur D1, la variable vl au disque dur D2, la variable v2 au disque dur D3, ..., la variable v14 au disque dur D15 : v0 -> D1 v5 -> D6 v10 -> D11 v1 -> D2 v6 -> D7 v11 -> D12 v2 -> D3 v7 -> D8 v12 -> D13 v3 -> D4 v8 -> D9 v13 -> D14 v4 -> D5 v9 -> D10 v14 -> D15 On note que l'ordre d'allocation sur les disques n'a pas d'importance. En d'autres termes, la variable v0 pourrait indifféremment être allouée au disque D2 plutôt qu'au disque Dl. On dispose donc de onze disques durs associés à des variables de données source portant des données source, et de quatre disques durs associés des variables de parité portant des données de redondance. On considère par exemple un vecteur de données source U1 portant les symboles suivants : U1= [120,23,1,45,219,34,54,2,78,18,65] En appliquant la matrice génératrice G à ce vecteur de données source Ul, i.e. en appliquant le code correcteur d'erreurs au vecteur de données source Ul, on obtient un vecteur de données codées R1 portant les symboles suivants, en effectuant les calculs dans le corps de gallois (GF28) : R1= [120,23,1,45,219,34,54,2,78,18,65,208,36,19,160] On peut appliquer ces valeurs aux variables v0 à v14 définies précédemment, par exemple comme proposé ci-après : v0=120 v5=34 v10=65 v1=23 v6=54 v11=208 v2=1 v7=2 v12=36 v3=45 v8=78 v13=19 v4=219 v9=18 v14=160 On peut ainsi réaliser le stockage des données du premier vecteur de données codées R1 sur une première bande B1 des quinze disques durs, en respectant le schéma d'allocation proposé pour les variables v0 à v14. Les opérations précédentes peuvent être réitérées pour les vecteurs de données source suivants. Par exemple, en appliquant la matrice génératrice G à un vecteur de données source U2, i.e. en appliquant le code correcteur d'erreurs au vecteur de données source U2, tel que : U2 = [89,35,215,178,3,73,176,92,16,31,71] on obtient un vecteur de données codées R2 portant les symboles suivants : R2 = [89,35,215,178,3,73,176,92,16,31,71,238,82,157,44] On peut alors réaliser le stockage des données du deuxième vecteur de données codées R2 sur une deuxième bande des quinze disques durs, en appliquant ces valeurs aux variables v0 à v14 définies précédemment et en respectant le schéma d'allocation proposé pour les variables v0 à v14. En appliquant la matrice génératrice G à un vecteur de données source U3, tel que : U3 = [1,62,93,47,69,82,17,38,211,56,19] on obtient un vecteur de données codées R3 portant les symboles suivants : R3 = [1,62,93,47,69,82,17,38,211,56,19,216,146,27,132] On peut alors réaliser le stockage des données du troisième vecteur de données codées R3 sur une troisième bande des quinze disques durs, en appliquant ces valeurs aux variables v0 à v14 définies précédemment et en respectant le schéma d'allocation proposé pour les variables v0 à v14. Ainsi, les variables v0 à v14 définies précédemment peuvent prendre successivement les valeurs suivantes (où pour chaque cellule, les trois nombres correspondent respectivement à un symbole du vecteur de données codées R1, à un symbole du vecteur de données codées R2, et à un symbole du vecteur de données codées R3) : v0=120,89,1 v5=34,73,82 v10=65,71,19 v1=23,35,62 v6=54,176,17 v11=208,2358,216 v2=1,215,93 v7=2,92,38 v12=36,82,146 v3=45,178,47 v8=78,16,21 v13=19,157,27 v4=219,3,69 v9=18,31,56 v14=160,44,132 La figure 5 illustre le résultat de l'opération de stockage mettant en oeuvre le même schéma d'allocation bande par bande, i.e. stockant sur le même disque les valeurs associées aux mêmes variables correspondant aux mêmes positions dans les différents vecteurs de données codées. On note que, selon l'exemple illustré, chaque secteur stocke les données associées à une unique variable. Bien entendu, un secteur peut stocker les données associées à plusieurs variables. Par exemple, il est possible de stocker sur un même secteur uniquement des données source, ou uniquement des données de redondance. Dans ce cas, on dispose de disques portant uniquement des données utilisateurs (données source) et de disques portant uniquement des données de parité (données de redondance). En variante, il est possible de stocker sur un même secteur des données source et des données de redondance. Dans ce cas, on dispose de disques mixtes portant à la fois des données utilisateurs (données source) et des données de parité (données de redondance). 5.4 Décodage des données On présente désormais, en relation avec la figure 6, les principales étapes mises en oeuvre par un procédé de décodage de données selon l'invention, permettant de décoder des données stockées selon un mode de réalisation du procédé de stockage de données décrit ci-dessus. Selon l'invention, un tel procédé de décodage permet de retrouver les données source, même en cas d'effacement d'un ou plusieurs supports de stockage. Pour ce faire, un tel procédé de décodage met en oeuvre une première étape de décodage 61 d'un des vecteurs de données codées, dit premier vecteur de données codées, déterminant un ordre de résolution des équations d'un système d'équations représentatif du code et mettant en oeuvre une résolution des équations, et au moins une deuxième étape de décodage 63 d'un autre des vecteurs de données codées, dit deuxième vecteur de données codées, distincte de la première étape de décodage, tenant compte de l'ordre de résolution 62 du système mis en oeuvre lors de la première étape de décodage. En particulier, lorsqu'au moins un des supports de stockage est défaillant, la première étape de décodage 61, apte à décoder le premier vecteur de données codées, comprenant au moins une itération des étapes suivantes : recherche 610, dans un système d'équations représentatif du code, d'au moins une équation présentant une seule variable associée à une donnée codée du premier vecteur de données codées, préalablement stockée sur le ou les supports de stockage défaillant, dite variable effacée. Cette étape permet notamment d'identifier les équations à une seule inconnue du système d'équations, que l'on peut facilement résoudre, reconstruction 611 de la ou des données codées du premier vecteur de données codées associées à la ou aux variables effacées, par résolution de la ou des équations, délivrant au moins une donnée reconstruite, mise à jour 612 du système d'équations tenant compte de la ou des données reconstruites. Cette étape permet notamment de mettre à jour les équations dans lesquelles interviennent la ou les données reconstruites à l'étape 611. Ces étapes de recherche 610, reconstruction 611 et mise à jour 612 du système d'équations sont mises en oeuvre tant que toutes les variables ne sont pas déterminées (i.e. tant que toutes les données du vecteur de données codées ne sont pas reconstruites). En particulier, l'étape de mise à jour peut être mise à oeuvre à chaque fois qu'une donnée est reconstruite. A la fin de cette première étape de décodage, ou au fur et à mesure de la mise en oeuvre de cette première étape de décodage, on peut mémoriser l'ordre de résolution 62 des équations du système d'équations. Le procédé de décodage met ensuite en oeuvre au moins une fois la deuxième étape de décodage 63, apte à décoder au moins un deuxième vecteur de données codées, mettant en oeuvre une reconstruction d'au moins une donnée codée du deuxième vecteur de données codées associées à la ou aux variables effacées, par résolution du système d'équations représentatif du code selon l'ordre de résolution, mémorisé au cours de l'étape 62. Cette deuxième étape de décodage se sert de la connaissance de l'ordre de résolution des équations mis en oeuvre pour le décodage de la première bande, pour simplifier le décodage des bandes suivantes. En effet, dans les bandes suivantes, les données effacées seront associées aux mêmes variables que les données effacées de la première bande, avec des valeurs différentes. Il n'est donc plus nécessaire de chercher les équations à une seule inconnue du système d'équations pour initier le décodage des bandes suivantes, puisque le décodeur sait directement dans quel ordre il doit résoudre les différentes équations. On obtient ainsi un gain de temps sur le décodage, d'autant plus important que la taille de la matrice de contrôle de parité sera grande. On présente plus précisément un exemple de mise en oeuvre de l'invention, pour le décodage de données stockées sur un ensemble de quinze disques durs illustré en figure 5. On suppose que les disques D6, D8, D11 et D14 sont défaillants. En d'autres termes, les données codées associées aux variables v5, v7, v10 et v13 allouées aux disques D6, D8, D11 et D14 sont effacées. On dispose donc uniquement des disques D1 à D5, D7, D9, D10, D12, D13 et D15 pour reconstruire les données source (données utilisateur). En d'autres termes, on dispose uniquement des données codées associées aux variables v0 à v4, v6, v8, v9, v11, v12 et v14 pour reconstruire les données source. On applique la première étape de décodage décrite ci-dessus à la première bande I31. Si les disques D6, D8, D11 et D14 sont défaillants, le premier vecteur de données codées stocké sur la bande B1 a la forme suivante : R1 =[120,23,1,45,219,?,54,?,78,18,?,208,36,?,160] On recherche tout d'abord, dans le système d'équations représentatif du code, au cours d'une première itération, une équation ou plusieurs équations présentant une seule variable associée à une donnée codée du premier vecteur de données codées préalablement stockée sur le ou les supports de stockage défaillants, dites variables effacées. Cette étape permet notamment d'identifier les équations à une seule inconnue du système d'équations, que l'on peut facilement résoudre. La première équation, qui correspond à la première ligne de la matrice de contrôle de parité, i.e. v4 + v5+ v6+ v7+ v8+ v9+ v10+ v11 = 0, comprend trois inconnues puisque les données codées associées aux variables v5, v7 et v10, qui étaient stockées sur les disques D6, D8 et D11, ont été effacées. On ne peut donc pas la résoudre. La deuxième équation, qui correspond à la deuxième ligne de la matrice de contrôle de parité, i.e. v1+ v2+ v3+ v7+ v8+ v9+ v10 + v12 = 0, comprend deux inconnues puisque les données codées associées aux variables v7 et v10, qui étaient stockées sur les disques D8 et D11, ont été effacées. On ne peut donc pas la résoudre. La troisième équation, qui correspond à la troisième ligne de la matrice de contrôle de parité, i.e. v0 + v2+ v3+ v5 + v6 + v9+ v10 + v13 = 0, comprend trois inconnues puisque les données codées associées aux variables v5, v10 et v13 qui étaient stockées sur les disques D6, D11 et D14, ont été effacées. On ne peut donc pas la résoudre. En revanche, la quatrième équation, qui correspond à la quatrième ligne de la matrice de contrôle de parité, i.e. v0 + v1+ v3+ v4 + v6+ v8+ v10+ v14 = 0, comprend une seule inconnue, la donnée associée à la variable v10. On peut donc déterminer sa valeur en résolvant la quatrième équation : v10 = v0+v1+v3+v4+v6+v8+v14 v10 =120+23+45+219+54+78+160 v10 = 65 Le système d'équations peut alors être mis à jour en tenant compte de la donnée reconstruite v10 = 65 . Cette étape permet notamment de mettre à jour les équations dans lesquelles intervient la variable v10. On recherche ensuite, dans le système d'équations représentatif du code, au cours d'une deuxième itération, une équation ou plusieurs équations présentant une seule variable effacée. La première équation comprend toujours deux inconnues (les données codées associées aux variables v5 et v7). On ne peut donc pas la résoudre. En revanche, la deuxième équation ne comprend plus qu'une seule inconnue, la valeur associée à la variable v7. On peut donc déterminer sa valeur en résolvant la deuxième équation : v7 =v1+v2+v3+v8+v9+v10+v12 v7=23+1+45+78+18+65+36 v7 = 2 La troisième équation comprend toujours deux inconnues (les données codées associées aux variables v5 et v13). On ne peut donc pas la résoudre. Le système d'équations peut alors être mis à jour en tenant compte de la donnée reconstruite v7 = 2. Cette étape permet notamment de mettre à jour les équations dans lesquelles intervient la variable v7. On recherche à nouveau, dans le système d'équations représentatif du code, au cours d'une troisième itération, une équation ou plusieurs équations présentant une seule variable effacée. La première équation ne comprend plus qu'une seule inconnue, la valeur associée à la variable v5. On peut donc déterminer cette valeur en résolvant la première équation, et mettre à jour les équations dans lesquelles intervient la variable v5 : v5 = v4 + v6 + v7+ v8+ v9+ v10 + v11 v5=219+54+2+78+18+65+208 v5=34 A son tour, la troisième équation ne comprend plus qu'une seule inconnue, la valeur associée à la variable v13. On peut donc déterminer cette valeur en résolvant la troisième équation : v13 = v0 + v2 + v3+ v5 + v6 + v9+ v10 v13=120+1+45+34+54+18+65 v13 =19 Le système d'équation est alors résolu, ce qui signifie que la première bande, correspondant au premier vecteur de données codées, peut être décodée, et les donnés source restituées, même après effacement de quatre disques durs. L'ordre de résolution des équations (quatrième équation, puis deuxième équation, puis première équation, puis troisième équation) est mémorisé, par exemple au fur et à mesure des itérations. On applique alors la deuxième étape de décodage décrite ci-dessus à la deuxième bande B2 stockant le deuxième vecteur de données codées, en tenant compte de l'ordre de résolution des équations préalablement mémorisé. Si les disques D6, D8, D11 et D14 sont défaillants, le deuxième vecteur de données codées aura la forme suivante : R2 =[89,35,215,178,3,?,176,?,16,31,?,238,82,?,44] On rappelle que l'allocation du deuxième vecteur de données codées est identique à l'allocation du premier vecteur de données codées (i.e. on a réalisé l'allocation de sorte qu'une valeur du deuxième vecteur de données codées R2 associée à une variable donnée soit positionnée sur le même disque qu'une valeur du premier vecteur de données codées R1 associée à la variable donnée, correspondant à la même position dans l'équation). On a donc de nouveau les mêmes inconnues dans la matrice de contrôle de parité H, et par suite le même système d'équations à résoudre, et on connaît l'ordre dans lequel on peut résoudre ce système : - la quatrième équation comprend une seule inconnue, la donnée associée à la variable v10. On peut donc résoudre cette équation et mettre à jour le système d'équations : v10 = v0 + v1+v3+v4+v6+v8+v14 v10=89+35+178+3+176+16+44 v10=71 - la deuxième équation comprend alors une seule inconnue, la donnée associée à la variable v7. On peut donc résoudre cette équation et mettre à jour le système d'équations : v7 =v1+v2+v3+v8+v9+v10+v12 v7=35+215+178+16+31+71+82 v7=92 - la première équation comprend alors une seule inconnue, la donnée associée à la variable v5. On peut donc résoudre cette équation et mettre à jour le système d'équations : v5 = v4 + v6 + v7 + v8 + v9+ v10 + v11 v5=3+176+92+16+31+71+238 v5=73 - la troisième équation comprend alors une seule inconnue, la donnée associée à la variable v13. On peut donc résoudre cette équation et mettre à jour le système d'équations : v13 = v0+v2+v3+v5+v6+v9+v10 v13 = 89+215+178+73+176+31+71 v13 =157 Le système d'équation est alors résolu, ce qui signifie que la deuxième bande, correspondant au deuxième vecteur de données codées, peut être décodée, et les donnés source restituées, même après effacement de quatre disques durs. On applique alors la deuxième étape de décodage décrite ci-dessus à la troisième bande B3 stockant le troisième vecteur de données codées, en tenant compte de l'ordre de résolution des équations préalablement mémorisé. Si les disques D6, D8, D11 et D14 sont défaillants, le troisième vecteur de données codées aura la forme suivante : R3 = [1,62,93,47,69,?,17,?,211,56,?,216,146,?,132] L'allocation du troisième vecteur de données codées étant identique à l'allocation des premier et deuxième vecteurs de données codées, on considère le même système d'équations, et on connaît l'ordre dans lequel on peut résoudre ce système : - la résolution de la quatrième équation permet de reconstruire la valeur de la variable v10 : v10=19 - la résolution de la deuxième équation permet de reconstruire la valeur de la variable v7 : v7=38 - la résolution de la première équation permet de reconstruire la valeur de la variable v5 : v5=82 - la résolution de la troisième équation permet de reconstruire la valeur de la variable v13 : v13=27. Le système d'équation est alors résolu, ce qui signifie que la troisième bande, correspondant au troisième vecteur de données codées, peut être décodée, et les donnés source restituées, même après effacement de quatre disques durs. De cette façon, lors de l'étape de décodage de la deuxième bande et de la troisième bande, le procédé de décodage connaît l'ordre de résolution optimal des équations. On peut ainsi s'affranchir de l'étape de recherche des équations à une inconnue du système d'équations, étape qui augmente considérablement la complexité du décodage. On optimise ainsi remarquablement le temps de décodage. On peut noter que ce gain de temps sera d'autant plus important que la taille de la matrice génératrice ou de contrôle de parité sera importante. 5.5 Structures simplifiées d'un dispositif de stockage et d'un dispositif de décodage On présente finalement, en relation avec les figures 7 et 8 respectivement, la structure simplifiée d'un dispositif de stockage de données et la structure simplifiée d'un dispositif de décodage de données stockées selon un mode de réalisation de l'invention. Comme illustré en figure 7, un dispositif de stockage de données selon au moins un mode de réalisation de l'invention comprend une mémoire 71 comprenant une mémoire tampon, une unité de traitement 72, équipée par exemple d'un microprocesseur [1.13, et pilotée par le programme d'ordinateur 73, mettant en oeuvre le procédé de stockage de données selon au moins un mode de réalisation de l'invention. A l'initialisation, les instructions de code du programme d'ordinateur 73 sont par exemple chargées dans une mémoire RAM avant d'être exécutées par le processeur de l'unité de traitement 72. L'unité de traitement 72 reçoit en entrée au moins un vecteur de données source. Le microprocesseur de l'unité de traitement 72 met en oeuvre les étapes du procédé de stockage de données selon au moins un mode de réalisation décrit précédemment, selon les instructions du programme d'ordinateur 72, pour coder le ou les vecteurs de données source, et distribuer les symboles (données codées) du ou des vecteurs de données codées ainsi obtenus sur les différents supports de stockage. Pour cela, le dispositif de stockage de données comprend, outre la mémoire tampon 71, un module de détermination 74 d'un schéma d'allocation des variables sur les supports de stockage et un module de stockage 75 de vecteurs de données codées. Ces modules sont pilotés par le microprocesseur de l'unité de traitement 72. Comme illustré en figure 8, un dispositif de décodage de données stockées selon au moins un mode de réalisation de l'invention comprend une mémoire 81 comprenant une mémoire tampon, une unité de traitement 82, équipée par exemple d'un microprocesseur [IP, et pilotée par le programme d'ordinateur 83, mettant en oeuvre le procédé de décodage selon au moins un mode de réalisation de l'invention. A l'initialisation, les instructions de code du programme d'ordinateur 83 sont par exemple chargées dans une mémoire RAM avant d'être exécutées par le processeur de l'unité de traitement 82. L'unité de traitement 82 dispose d'un ensemble de données stockées sur des supports de stockage, dont l'un au moins peut être défaillant. Le microprocesseur de l'unité de traitement 82 met en oeuvre les étapes du procédé de décodage décrit précédemment, selon les instructions du programme d'ordinateur 83, pour retrouver l'ensemble des données source à partir des données stockées. Pour cela, le dispositif de stockage comprend, outre la mémoire tampon 81, un premier module de décodage 84, configuré pour décoder un premier vecteur de données codées, un registre ou une mémoire 85 mémorisant l'ordre de résolution desdites équations, au moins un deuxième module de décodage 86, configuré pour décoder au moins un deuxième vecteur de données codées. Ces modules sont pilotés par le microprocesseur de l'unité de traitement 82.30 REVENDICATIONS1. Procédé de stockage de données sur une pluralité de supports de stockage, mettant en oeuvre un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, caractérisé en ce que ledit procédé de stockage met en oeuvre des étapes de : détermination (31) d'un schéma d'allocation desdites variables sur lesdits supports de stockage, stockage (32) d'au moins deux vecteurs de données codées, obtenus en appliquant ledit code à au moins deux vecteurs de données source, stockant, pour chacun desdits vecteurs de données codées, les données codées associées auxdites variables selon ledit schéma d'allocation. 2. Procédé de stockage de données selon la revendication 1, caractérisé en ce que, chaque support de stockage étant organisé en au moins deux secteurs, ladite étape de stockage (32) met en oeuvre le stockage (321) d'un premier vecteur de données codées, stockant lesdites données codées associées auxdites variables dans un premier secteur de chaque support de stockage selon ledit schéma d'allocation et le stockage (322) d'au moins un deuxième vecteur de données codées stockant lesdites données codées associées auxdites variables dans au moins un deuxième secteur de chaque support de stockage selon ledit schéma d'allocation. 3. Procédé de stockage de données selon l'une quelconque des revendications 1 et 2, caractérisé en ce que ledit code correcteur d'erreurs est de type code en graphe creux, dit code en graphe « sparse », dont la matrice génératrice ou la matrice de contrôle de parité est une matrice creuse. 4. Procédé de stockage de données selon l'une quelconque des revendications 1 à 3, caractérisé en ce que, ledit ensemble de variables comprenant des variables de données source, associées auxdites données source, et des variables de parité, associées auxdites données de redondance, ladite étape de détermination d'un schéma d'allocation alloue des supports de stockage distincts auxdites variables de données source et auxdites variables de parité. 5. Procédé de stockage de données selon l'une quelconque des revendications 1 à 3, caractérisé en ce que, ledit ensemble de variables comprenant des variables de données source, associées auxdites données source, et des variables de parité, associées auxdites données de redondance, ladite étape de détermination d'un schéma d'allocation alloue au moins un même support de stockage à au moins une desdites variables de données source et au moins une desdites variables de parité. 6. Dispositif de stockage de données sur une pluralité de supports de stockage, utilisant uncode correcteur d'erreurs définissant un ensemble de variables liées par des contraintes, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, caractérisé en ce que ledit dispositif de stockage comprend : un module (74) de détermination d'un schéma d'allocation desdites variables sur lesdits supports de stockage, un module (75) de stockage d'au moins deux vecteurs de données codées, obtenus en appliquant ledit code à au moins deux vecteurs de données source, stockant, pour chacun desdits vecteurs de données codées, les données codées associées auxdites variables selon ledit schéma d'allocation. 7. Procédé de décodage de données stockées sur une pluralité de supports de stockage, lesdites données ayant été préalablement stockées sous la forme d'au moins deux vecteurs de données codées, obtenus en appliquant un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes à au moins deux vecteurs de données source, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, les données codées associées auxdites variables de chacun desdits vecteurs de données codées ayant été stockées sur ladite pluralité de supports de stockage selon un même schéma d'allocation, caractérisé en ce que ledit procédé de décodage met en oeuvre : une première étape de décodage (61) d'un desdits vecteurs de données codées, dit premier vecteur de données codées, déterminant un ordre de résolution des équations d'un système d'équations représentatif dudit code et mettant en oeuvre une résolution desdites équations, et au moins une deuxième étape de décodage (63) d'un autre desdits vecteurs de données codées, dit deuxième vecteur de données codées, distincte de ladite première étape de décodage, tenant compte dudit ordre de résolution mis en oeuvre lors de ladite première étape de décodage. 8. Procédé de décodage de données selon la revendication 7, caractérisé en ce que, lorsqu'au moins un desdits supports de stockage est défaillant, ladite première étape de décodage (61) met en oeuvre au moins une itération des étapes suivantes : recherche (610), dans un système d'équations représentatif dudit code, d'au moins une équation présentant une seule variable associée à une donnée codée dudit premier vecteur de données codées préalablement stockée sur ledit au moins un support de stockage défaillant, dite variable effacée, reconstruction (611) de ladite ou desdites données codées dudit premier vecteur dedonnées codées associées à la ou auxdites variables effacées, par résolution de la ou desdites équations, délivrant au moins une donnée reconstruite, mise à jour (612) dudit système d'équations tenant compte de ladite au moins une donnée reconstruite, et en ce que ladite au moins une deuxième étape de décodage (63) met en oeuvre une reconstruction d'au moins une donnée codée dudit deuxième vecteur de données codées associées à la ou auxdites variables effacées, par résolution dudit système d'équations représentatif dudit code selon ledit ordre de résolution. 9. Dispositif de décodage de données stockées sur une pluralité de supports de stockage, lesdites données ayant été préalablement stockées sous la forme d'au moins deux vecteurs de données codées, obtenus en appliquant un code correcteur d'erreurs définissant un ensemble de variables liées par des contraintes à au moins deux vecteurs de données source, chaque variable étant associée à des données source et/ou des données de redondance, dites données codées, les données codées associées auxdites variables de chacun desdits vecteurs de données codées ayant été stockées sur ladite pluralité de supports de stockage selon un même schéma d'allocation, caractérisé en ce que ledit dispositif de décodage comprend : un premier module (84) de décodage d'un desdits vecteurs de données codées, dit premier vecteur de données codées, déterminant un ordre de résolution des équations d'un système d'équations représentatif dudit code et mettant en oeuvre une résolution desdites équations, et au moins une deuxième module (86) de décodage d'un autre desdits vecteurs de données codées, dit deuxième vecteur de données codées, distinct dudit premier module de décodage, tenant compte dudit ordre de résolution mis en oeuvre par ledit premier module de décodage. 10. Programme d'ordinateur comportant des instructions pour l'exécution des étapes du procédé de stockage de données selon l'une quelconque des revendications 1 à 5 ou du procédé de décodage de données stockées selon l'une quelconque des revendications 7 et 8 lorsque ledit programme est exécuté par un ordinateur.30