FR 3001818 A1 20140808 FR 1350967 A 20130205 La présente invention concerne le domaine des dispositifs de stockage redondants et est particulièrement adaptée aux disques électroniques appelés SSD (pour Solid State Drive en anglais). Elle concerne plus particulièrement un dispositif de stockage redondant sécurisé et un procédé de lecture écriture sécurisé sur des disques électroniques redondants. Elle concerne de manière générale l'implémentation d'un système de fichier basé sur des disques électroniques redondants. L'utilisation de la redondance est un moyen courant d'apporter de la fiabilité dans les systèmes de traitement de l'information. La duplication d'un dispositif de traitement de l'information permet d'effectuer en parallèle les opérations sur la pluralité de dispositifs redondants. Le résultat de ces opérations est alors comparé. Ainsi, une panne ou un dysfonctionnement de l'un des dispositifs est détecté lorsque les résultats fournis par les dispositifs redondants sont différents. L'application de ce principe à un système de stockage d'information basé sur des disques électroniques conduit à implémenter un système du type du système illustré par la figure 1. Ce dispositif de stockage 100 est constitué d'un module de gestion du système de fichier 101 et de deux dispositifs de stockage physique, ici des disques électroniques, redondants 110 et 120. L'exemple ici décrit contient deux disques électroniques redondants, l'homme du métier comprend que le nombre de disques électroniques redondants peut être supérieur. Ces disques électroniques redondants 110 et 120 sont typiquement identiques. A tout le moins ils comportent au moins en commun une partie du logiciel chargé du contrôle du disque. Ils comprennent un module de mémoire physique 112 et 122 typiquement constitué de mémoire de type flash, mais tout autre type de support physique tel qu'un support optique ou magnétique peut être envisagé. Il peut également s'agir de dispositifs de stockage distant tels que les disques réseaux dans lesquels le support physique est situé à distance et est accédé au travers d'un réseau de données. Cette mémoire est contrôlée par un module de contrôle, ou contrôleur, 111 et 121. Ce module de contrôle est chargé de la réception des ordres de lecture écriture 105 et 106 émis par le système de fichier 101 et de gérer ces ordres en provoquant les lectures et écritures requises sur les modules de mémoires physiques 112 et 122. Ces modules de contrôle 111 et 121 sont typiquement des modules logiciels exécutés sur un processeur embarqué des disques 110 et 120. Ces modules logiciels de contrôle des disques sont particulièrement complexes dans le cas des supports physiques du type mémoire flash en comparaison des modules de contrôle équivalents utilisés dans les disques magnétiques. En effet, la gestion des modules de mémoire exige une gestion fine des blocs de mémoire pour niveler l'usure de ces blocs, gérer une mémoire cache et organiser la collecte des blocs disponibles. Le système de fichier 101 est le module logiciel chargé d'offrir aux applications désireuses de stocker et d'accéder à des données sur le disque une vision logique de fichiers de données. Il reçoit des commandes 102 des applications formulées sous la forme de commandes de gestion de fichiers logiques. Le système de fichier 101 est chargé de transformer ces commandes orientées fichier en ordre de lecture écriture sur les différents disques 110 et 120. Ce système de fichier intègre typiquement, dans le cas de disques physiques redondants, un module de gestion du système de fichier proprement dit 103 et un module de gestion de la redondance 104. Le système de stockage peut donc être vu comme une succession d'abstractions successives permettant l'interaction avec une pluralité de disques électroniques physiques. Une première abstraction est gérée par le module de contrôle du disque, 111 et 121 qui permet de masquer les modules mémoires physiques 112 et 122 utilisés pour offrir une interface présentant le disque comme un volume de stockage logique unifié. Ce volume de stockage logique est mémorisé de manière redondante sur l'ensemble des disques redondants du dispositif de stockage. Un second niveau d'abstraction est offert par le module de gestion de la redondance 104 et permet de voir l'ensemble des disques électroniques physiques 110 et 120 comme un seul volume permettant la lecture et l'écriture de données. Ce volume est utilisé par le module de gestion du système de fichiers 103 pour offrir un troisième niveau d'abstraction aux applications, lesquelles se voient offrir un système de lecture écriture dans des fichiers logiques indépendamment de la gestion du stockage des données sur les disques physiques. Lorsque de tels systèmes de stockage doivent être utilisés dans des systèmes d'information critiques tels que les systèmes embarqués dans des aéronefs, des sous-marins ou encore les systèmes de gestion et de contrôle de centrales nucléaires, il est nécessaire de répondre à des normes de sécurité. Ces systèmes, s'ils ne peuvent être à l'abri de tout dysfonctionnement doivent être en mesure de détecter ceux-ci lorsqu'ils se produisent. La redondance des disques électroniques vise à remplir ce rôle. La fonction de détection des dysfonctionnements est typiquement mise en oeuvre au sein du module de gestion de la redondance 104. Typiquement, lorsqu'un ordre de lecture à une adresse donnée est généré par le système de fichier 103, le module de gestion de la redondance 104 va dupliquer la commande sur les disques électroniques redondants 110 et 120. Il va alors comparer les valeurs lues retournées par les disques redondants et les comparer. Une différence dans ces valeurs lues permet de détecter qu'au moins un des deux disques est dysfonctionnant. De même lorsqu'une commande d'écriture d'une commande à une adresse est générée par le système de fichier 103, cette commande est envoyée de manière identique par le module de gestion de la redondance 104 sur les différents disques. Le module de gestion de la redondance 104 va ensuite relire cette adresse sur les différents disques et comparer les résultats. Si au moins l'un des disques retourne une valeur différente de la valeur écrite, un dysfonctionnement est détecté. Un tel système permet de détecter le dysfonctionnement d'un module de mémoire physique 112 ou 122 sur les disques ou une panne survenant sur le processeur chargé de l'exécution du module de contrôle des disques 111 et 121. Toutefois, un tel système ne permet pas la détection d'un dysfonctionnement du à une erreur de conception du module de contrôle des disques 111 et 121. En effet, une telle erreur de conception étant présente, par définition, de manière identique au sein des deux modules de contrôle 111 et 121, elle provoquera un dysfonctionnement homogène des deux disques. Un tel dysfonctionnement ne pourra donc pas être détecté par une comparaison des valeurs retournées par les deux disques qui seront toujours identiques. La présente invention a pour but de résoudre les inconvénients précités en proposant un système de stockage de données basé sur une pluralité de dispositifs physiques de stockage redondants dans lequel les commandes de lecture écriture destinées à être envoyées aux disques redondants sont sujettes à une fonction de transfert avant d'être envoyées à au moins un des disques de manière à ce que les commandes effectives envoyées à au moins deux disques soient différentes. Les valeurs retournées par les disques ayant reçu les commandes ayant subi la fonction de transfert sont soumises à la fonction de transfert inverse. Ainsi une erreur de conception dans le module de contrôle des disques sera détectée car les modules de contrôle des disques ne seront pas sollicités de manière identique. L'invention concerne un dispositif de stockage qui comporte : - une pluralité de dispositifs de stockage physique redondants ; - un module de gestion de système de fichier générant des commandes de lecture écriture de données à destination de la pluralité de dispositifs de stockage physique redondants, les données devant être écrites de manière redondante sur chacun des dispositifs de stockage physique ; - un module de détection d'erreurs par comparaison des valeurs des données lues depuis la pluralité de dispositifs de stockage physique ; qui comporte en outre : - un module permettant d'appliquer une fonction de transfert aux commandes de lecture écriture à destination d'un sous-ensemble de dispositifs de stockage physique, ladite fonction de transfert étant destinée à modifier lesdites commandes de lecture écriture. Ainsi les erreurs de conception au sein des contrôleurs peuvent être détectées. Selon un mode particulier de réalisation, ladite fonction de transfert modifiant les données associées aux commandes d'écritures, le dispositif comporte en outre un module permettant d'appliquer une fonction de transfert inverse aux données lues depuis ledit sous-ensemble de dispositifs de stockage physique. Selon un mode particulier de réalisation, ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour appliquer une fonction bijective, définie sur l'espace des données du dispositif de stockage, sur les données associées aux commandes d'écriture et ledit module permettant d'appliquer une fonction de transfert inverse comporte des moyens pour appliquer la fonction bijective inverse sur les données lues. Selon un mode particulier de réalisation, ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour appliquer une fonction bijective, définie sur l'espace d'adressage logique du dispositif de stockage, sur l'adresse logique associée à la commande. Selon un mode particulier de réalisation, ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour ajouter des commandes supplémentaires aux commandes de lecture écriture. Selon un mode particulier de réalisation, ladite fonction de transfert remplace l'adresse associée à la commande par le résultat de la soustraction de cette adresse à l'adresse de fin de l'espace d'adressage logique du dispositif de stockage. Selon un mode particulier de réalisation, ladite fonction de transfert n'est appliquée qu'aux adresses paires, ou aux adresses impaires. Selon un mode particulier de réalisation, ladite fonction de transfert comporte des moyens pour complémenter à un les données associées aux commandes d'écriture et ladite fonction de transfert inverse comporte 10 également des moyens pour complémenter à un les données lues. Selon un mode particulier de réalisation, ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires avant la toute première commande reçue. 15 Selon un mode particulier de réalisation, ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires de façon périodique. 20 Selon un mode particulier de réalisation, ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires de façon aléatoire. L'invention concerne également un procédé de lecture écriture sur un 25 dispositif de stockage comportant une pluralité de dispositifs de stockage physique redondants, caractérisé en ce qu'il comporte : - une étape de réception d'une commande initiale de lecture écriture générée par un module de gestion de système de fichier ; - une étape d'application d'une fonction de transfert à ladite 30 commande initiale de lecture écriture, ladite fonction de transfert étant destinée à modifier ladite commande initiale de lecture écriture pour obtenir au moins une commande modifiée de lecture écriture; - une étape d'envoi de ladite commande initiale de lecture écriture à un premier sous-ensemble de dispositifs de stockage physique ; - une étape d'envoi de la ou des commande de lecture écriture modifiée à un second sous-ensemble de dispositifs de stockage physique ; - si la commande est une commande d'écriture, le procédé comporte en outre : o une étape de génération de la commande de lecture associée ; o une étape d'application de la fonction de transfert à la commande de lecture générée ; o une étape d'envoi de la commande de lecture au premier sous-ensemble de dispositifs de stockage physique ; o une étape d'envoi de la commande de lecture modifiée au second sous-ensemble de dispositifs de stockage physique ; - une étape de réception des valeurs lues ; et - une étape de comparaison des valeurs lues. Selon un mode particulier de réalisation, ladite fonction de transfert modifiant les données associées aux commandes d'écritures, le procédé comporte en outre une étape d'application d'une fonction de transfert inverse aux données lues issues du second sous-ensemble de dispositifs de stockage physique. L'invention concerne également un programme d'ordinateur comprenant des instructions adaptées à la mise en oeuvre de chacune des étapes du 30 procédé selon l'invention lorsque ledit programme est exécuté sur un ordinateur. L'invention concerne également un moyen de stockage d'informations, amovible ou non, partiellement ou totalement lisible par un ordinateur ou un microprocesseur comportant des instructions de code d'un programme d'ordinateur pour l'exécution de chacune des étapes du procédé selon l'invention. D'autres particularités et avantages de l'invention apparaîtront encore dans la description ci-après. Aux dessins annexés, donnés à titre d'exemples non limitatifs : - la figure 1 illustre l'architecture générale d'un système de stockage utilisant des disques électroniques redondants selon un exemple de réalisation de l'invention ; - la figure 2 illustre l'architecture matérielle typique d'un support de mémoire flash utilisé dans des disques électroniques ; - la figure 3 illustre un exemple de structure logique d'un contrôleur de disque électronique ; - la figure 4 illustre l'architecture logique d'un exemple de réalisation de l'invention ; - la figure 5 illustre un exemple de dissimilarité spatiale ; - la figure 6 illustre un autre exemple de dissimilarité spatiale ; - la figure 7 illustre l'organigramme d'un procédé de lecture écriture selon un exemple de réalisation de l'invention ; - la figure 8 est un bloc-diagramme schématique d'un dispositif de traitement de l'information pour la mise en oeuvre d'un ou plusieurs modes de réalisation de l'invention. La figure 2 illustre l'architecture matérielle typique d'un support de mémoire flash utilisé dans des disques électroniques. Les données stockées sur le support physique sont composées de cellules ou mots mémoire 200 élémentaires. Ces cellules 200 sont organisées en pages 201 contenant un ensemble de cellules 200. La page 201 est l'unité de base pour les opérations de lecture écriture des cellules 200. Pour lire ou écrire une cellule particulière, il est donc nécessaire de lire ou d'écrire la page entière contenant la cellule visée. Les pages sont elles-mêmes organisées en blocs 202 contenant un ensemble de pages 201. Le support de stockage est lui-même constitué d'un ensemble de ces blocs 202. Le bloc est l'unité de base des opérations d'effacement des cellules 200. En effet, il n'est possible d'écrire une page 201 de cellules 200 qu'à la condition que ces cellules 200 constituant la page 201 aient été préalablement effacées. Cette opération d'effacement impliquant nécessairement l'ensemble du bloc 202 incluant la page 201 visée. L'opération d'effacement d'un bloc est une opération qui prend un temps relativement long face aux temps nécessaires pour la lecture ou l'écriture d'une page. Une gestion intelligente des cycles de lecture écriture effacement est donc avantageuse pour chercher à limiter les opérations d'effacement de blocs dans un souci de performance. De plus, les blocs sont l'objet d'un phénomène d'usure caractérisé par un nombre d'effacements limité. Ce phénomène a pour conséquence qu'il est d'autant plus utile de limiter au strict nécessaire les opérations d'effacement de blocs. De plus, les données ont une pérennité variable. Certaines données ne sont jamais mises à jour tandis que d'autres sont modifiées fréquemment. Les données modifiées fréquemment vont entraîner de nombreuses opérations de réécriture et autant d'opérations d'effacement des blocs les contenant. Une gestion intelligente de la localisation physique des données sur les blocs au gré des réécritures permet de répartir l'usure des blocs. Le but est d'éviter que certains blocs fortement sollicités atteignent la limite du nombre d'effacement et doivent être désactivés alors que la plupart des blocs sont encore loin de leur fin de vie. Ces contraintes impliquent une gestion particulière et relativement complexe des cycles de lecture écriture effacement. Cette gestion est typiquement effectuée par des modules logiciels au sein du module de contrôle des disques 111 et 121. Traditionnellement les données stockées en mémoire ou sur un disque magnétique sont associées à un emplacement physique donné qui est immuable une fois alloué. Une donnée est associée à une adresse mémoire physique ou à un secteur sur un disque magnétique. Lorsque cette donnée doit être modifiée, la nouvelle valeur est écrite à la même localisation physique et vient écraser l'ancienne valeur. Un accès en lecture se fait donc toujours à la même adresse physique et permet d'obtenir la dernière valeur écrite. Une telle politique d'allocation physique des données entraine un vieillissement par usure des blocs due à la multiplication des opérations d'effacement des blocs contenant des données modifiées fréquemment dans le cas des disques électroniques. Une gestion intelligente de l'allocation physique des données a donc été développée pour pallier à ces inconvénients. Cette politique d'allocation comprend principalement trois mécanismes clés. Un premier mécanisme est implémenté sous la forme d'un algorithme appelé couche de traduction flash ou FTL pour Flash Translation Layer algorithm en anglais. Selon cet algorithme, les blocs sont répartis en deux ensembles de blocs, d'une part les blocs organisés en blocs (block mapped en anglais) et les blocs organisés en pages (page mapped en anglais). Ces deux ensembles de blocs se distinguent par le mode d'adressage permettant l'accès en lecture écriture des données. Nous rappelons que l'unité de base des opérations de lecture écriture est la page. Les données sont donc associées au niveau applicatif à une page au moyen d'une adresse de page logique appelée LPN pour Logical Page Number en anglais. La couche de traduction flash FTL doit donc traduire cette adresse de page logique en une adresse de page physique du composant de mémoire. Si la donnée est attribuée à un bloc organisé en bloc, la traduction se fait selon le procédé suivant. L'adresse de page logique est décomposée en un premier champ constituant une adresse de bloc logique ou LBN pour Logical Bloc Number en anglais et un saut (offset en anglais). Une table d'association permet de retrouver l'adresse de bloc physique PBN, pour Physical Bloc Number en anglais, à partir de l'adresse de bloc logique servant d'index dans cette table d'association. La valeur de saut donne l'adresse physique de la page au sein du bloc physique. Si la donnée est attribuée à un bloc organisé en page, la traduction se fait selon le procédé suivant. L'adresse de page logique sert directement d'index dans une table d'association des pages qui permet d'obtenir une adresse physique de page PPN pour Physical Page Number en anglais. Cette adresse physique de page est directement l'adresse de la page physique au sein d'un bloc organisé en page. Ce système organisant les blocs de mémoire physique en deux ensembles de blocs organisés en bloc ou en page est utilisé de la manière suivante. Lorsqu'une donnée est écrite pour la première fois, elle se voit attribuer un emplacement physique au sein d'un bloc organisé en bloc. Les blocs organisés en blocs correspondent donc aux premières allocations en mémoire des données. Les blocs organisés en pages constituent un espace mémoire de pages organisés en journal (log en anglais). Ce journal constitue un espace de pages consécutives qui vont être allouées successivement. Lorsqu'une donnée doit être modifiée, pour éviter une modification de la page allouée à cette donnée qui nécessiterait un effacement du bloc, une nouvelle page, par défaut la première page libre, est allouée à cette donnée dans le journal. L'écriture de cette donnée modifiée est donc faite dans une page libre ce qui ne nécessite pas d'opération d'effacement préalable. La page qui contenait l'ancienne valeur de la donnée est alors marquée comme obsolète, mais n'est pas effacée immédiatement pour ne pas générer d'opération d'effacement. Les pages d'association sont alors mises à jour en conséquence. Ce procédé permet de modifier les données stockées dans la mémoire sans nécessiter d'opération d'effacement, tout du moins tant qu'il reste des pages libres dans le journal. Les données statiques qui ne sont jamais modifiées restent allouées dans des blocs organisés en bloc dont l'accès est moins coûteux en mémoire. En effet, la table d'association bloc qui ne contient qu'une entrée par bloc est moins grande que la table d'association page qui contient une entrée par page. Les données dynamiques qui sont modifiées sont stockées dans le journal qu'elles remplissent au fur et à mesure des modifications. Ce mécanisme est particulièrement efficace en termes de temps d'accès du fait qu'il évite les opérations d'effacement des blocs. Par contre, chaque modification de données rend obsolète au moins une page de mémoire. Après un certain temps d'utilisation du système, il est possible de manquer de blocs libres tandis que les blocs utilisés sont parsemés de pages obsolètes. Pour remédier à ce problème et permettre de reconstituer l'ensemble de blocs libres, un mécanisme de ramasse miette (garbage collector en anglais) est mis en place. Ce mécanisme s'occupe de sélectionner les blocs dont toutes les pages sont marquées comme obsolètes, d'effacer alors le bloc pour le rendre de nouveau disponible au sein d'un ensemble de blocs libres. Avantageusement, le ramasse miette incorpore un mécanisme de fusion de blocs. Ce mécanisme permet de sélectionner un ensemble de blocs contenant de nombreuses pages obsolètes. Ces blocs dans leur ensemble doivent contenir un nombre de pages utiles, c'est-à-dire non obsolète, inférieur ou égal à la taille d'un bloc. Ces pages utiles sont alors écrites dans un bloc libre. L'ensemble des blocs sélectionnés peuvent alors être effacés pour être rendus disponibles dans l'ensemble des blocs libres. Ce ramasse miette permet donc de rassembler les pages utiles disséminées au sein d'un ensemble de blocs dans un même bloc et de rendre ces blocs disponibles à nouveau. Un mécanisme de nivellement d'usure (wear leveling algorithm en anglais) permet de plus d'éviter que certains blocs vieillissent prématurément du fait d'un grand nombre d'opérations d'effacement les affectant. Ce mécanisme dote tous les blocs d'un compteur permettant de connaître le nombre d'opérations d'effacement qu'ils ont subies. Ainsi, lorsque le système réclame un nouveau bloc libre pour l'attribuer à l'ensemble des blocs organisés en bloc ou à l'ensemble des blocs organisés en page, le bloc libre ayant la valeur de compteur la plus faible est désigné. Ainsi les blocs les moins usés sont toujours utilisés en priorité. L'apparition d'un bloc usé et donc inutilisable est ainsi retardée. La figure 3 illustre un exemple de structure logique d'un contrôleur 300 de disque électronique implémentant ces divers mécanismes. Les commandes de lecture écriture sont reçues et mémorisées dans une mémoire cache 301 avant d'être interprétées par la couche de traduction flash 302. Ce dernier contrôle deux ensembles de blocs de mémoire alloués, un premier ensemble 303 de blocs organisés en blocs et un second ensemble 304 de blocs organisés en page formant le journal. La couche de traduction flash vient donc écrire les données une première fois dans l'ensemble 303 de blocs organisés en blocs. Les écritures suivantes venant modifier la donnée sont effectuées dans le journal 304. La couche de traduction flash 302 requiert au besoin un bloc libre fourni pas un ensemble de blocs libres 306. Le bloc libre est alloué par le mécanisme de nivellement d'usure 307 qui s'assure que le bloc alloué est toujours un bloc possédant un compteur d'usure minimal au sein de l'ensemble des blocs libres 306. Ce bloc est alors alloué selon le besoin soit à l'ensemble 303 des blocs organisés en blocs, soit au journal 304. Le ramasse miette 305 s'occupe de récupérer les blocs de ces deux ensembles en appliquant au besoin le mécanisme de fusion de blocs décrit plus haut. Les blocs ainsi récupérés sont effacés pour rejoindre l'ensemble des blocs libres 306. Leur compteur d'usure est alors incrémenté d'une unité. Un tel contrôleur de disque électronique est donc complexe et représente un logiciel de taille conséquente. Lorsque se pose le problème d'utiliser un tel disque dans un environnement nécessitant un haut niveau de sécurité, tel qu'un aéronef, une centrale nucléaire ou autres, les logiciels mis en oeuvre doivent respecter certains standards de sécurité, tel que ceux préconisés par le document DO-178B utilisé, par exemple, par l'industrie aéronautique. L'utilisation d'un disque électronique dans un aéronef nécessiterait donc la réécriture complète du contrôleur du disque pour respecter les préconisations de ce document. Il serait avantageux de pouvoir utiliser des disques électroniques du commerce directement dans les aéronefs avec leur contrôleur d'origine. Toutefois, une telle utilisation implique que le contrôleur peut contenir une erreur de conception qui pourrait ne pas être détectée, même en utilisant un système redondant tel que décrit en rapport avec la figure 1. En particulier, une erreur de conception dans le contrôleur peut conduire aux erreurs suivantes dans un système redondant. Dans un premier type d'erreurs, la donnée est incorrectement écrite sur le disque. Dans un second type d'erreurs, la donnée est correctement écrite mais à une mauvaise adresse. Dans un troisième type d'erreur, la donnée n'est pas écrite du tout sur le disque. Dans les trois cas, la commande renvoie un accusé de réception notifiant la réussite de l'opération d'écriture. L'erreur étant reproduite à l'identique par le second disque, elle ne sera pas détectée par une lecture subséquente et une comparaison des données lues sur les deux disques. L'invention est basée sur l'introduction d'une dissimilarité dans le fonctionnement du contrôleur des disques électroniques redondant. En provoquant un fonctionnement différent des deux contrôleurs, on évite qu'une erreur de conception dans le logiciel de ces contrôleurs se produise de manière similaire dans les deux disques, provoquant une même erreur. Ainsi, les éventuelles erreurs de conception présentes dans le code des contrôleurs vont se produire à des moments différents sur des données différentes et pourront donc être détectées par le mécanisme de contrôle des commandes. Ce mécanisme de contrôle, rappelons-le, consiste à venir relire les données écrites et à comparer le résultat de ces lectures pour vérifier leur cohérence. Selon un mode de réalisation préféré de l'invention, cette dissimilarité est introduite sous la forme d'une fonction de transfert implémentée au niveau du système de fichier 101 figure 1, typiquement au sein du module de gestion de la redondance 104. Cette fonction de transfert vient modifier les commandes de lecture écriture destinées à un sous-ensemble des disques électroniques redondants. Ce sont ces commandes modifiées qui sont alors envoyées pour exécution sur le sous-ensemble de disques redondants en lieu et place des commandes originales. Sur le sous-ensemble de disques redondants non sujet à la fonction de transfert, les commandes originales sont directement exécutées. Ainsi, les commandes de lecture écriture finalement exécutées par les contrôleurs des disques sont différentes. Lors de la lecture, une fonction de transfert inverse est appliquée aux données lues de façon à assurer la cohérence des données lues sur l'ensemble des disques redondants. Ces données peuvent donc être comparées pour détecter une erreur éventuelle. Les mêmes données sont donc mémorisées sur l'ensemble des disques redondants, mais le processus de stockage et donc le chemin logiciel exécuté par les contrôleurs des disques est différent entre les disques sujet à la fonction de transfert et ceux qui n'y sont pas sujet. En créant cette dissimilarité qui provoque l'exécution de chemins logiciels différents au sein des contrôleurs des disques, la probabilité qu'une erreur de conception desdits contrôleurs entraîne une erreur similaire sur les disques qui échapperait de ce fait au mécanisme de détection d'erreur est rendue proche de zéro. Ce système de disques redondants peut donc être utilisé dans des systèmes critiques en répondant aux exigences de sécurité requises. La figure 4 illustre l'architecture logique d'un exemple de réalisation de l'invention. Une commande 411 de lecture écriture est émise par le système à destination des disques. Cette commande 411 est reçue de manière identique par le module de gestion de la redondance 104 figure 1. Cette commande 411 est donc envoyée à un premier disque qui n'est pas sujet à la fonction de transfert. Cette même commande 411 est également envoyée à la fonction de transfert 422 pour un disque qui lui est sujet à la fonction de transfert 422. Cette fonction 422 modifie la commande 411 et génère au moins une commande 423 résultat de l'application de la fonction de transfert à la commande 411. Lors de l'étape 414, le disque qui n'est pas sujet à la fonction de transfert exécute la commande initiale 411. Pendant l'étape 424, le disque sujet à la fonction de transfert exécute la commande modifiée 423. Ces exécutions modifient donc l'état interne des deux disques et ont pour résultat l'exécution de la commande initiale. Toutefois, les deux disques ont exécuté différemment la commande initiale. Ensuite, le mécanisme de détection d'erreur entre en oeuvre et génère typiquement une lecture sur les deux disques pour vérifier la cohérence des données sujettes à la commande initiale 411. Plus précisément, si la commande initiale 411 est une commande de lecture, cette lecture sert directement à la détection d'erreur. Si la commande 411 est une commande d'écriture, la commande de lecture correspondante est générée pour provoquer la lecture des données qui viennent d'être écrites. Cette commande de lecture se voit également appliquer la fonction de transfert pour le disque qui est sujet à cette fonction. Sur le disque qui n'est pas sujet à la fonction de transfert, la valeur lue 417 sert directement à la vérification. Sur le disque sujet à la fonction de transfert, la valeur lue 425 se voit appliquer la fonction de transfert inverse 426 pour générer une valeur lue finale 427. Ces valeurs lues sont comparées par l'étape 418. Une erreur est détectée lorsque ces valeurs sont différentes. Les commandes de lecture écriture sont caractérisées d'une part par une adresse logique qui doit être lue ou écrite et, dans le cas d'une écriture, par une donnée à écrire. La fonction de transfert est donc en charge de modifier ce couple adresse plus donnée pour générer la commande modifiée. Selon un premier mode de réalisation, la fonction de transfert vise à générer une dissimilarité spatiale. La commande modifiée va provoquer la lecture ou l'écriture à une adresse différente de l'adresse prévue dans la commande originale. Par exemple, si l'espace logique de stockage s'étend entre une adresse de début et une adresse de fin, cet espace est logiquement rempli à partir de l'adresse de début. La fonction de transfert peut remplacer l'adresse contenue dans la commande par l'adresse de fin moins cette adresse. Ainsi, dans le disque implémentant la fonction de transfert, l'espace de stockage sera rempli à partir de l'adresse de fin vers l'adresse de début. Ce mode de réalisation est illustré par la figure 5. L'espace de stockage logique d'un premier disque 501 n'implantant pas la fonction de transfert est organisé pour un remplissage progressif à partir d'une adresse de début @début et jusqu'à une adresse de fin @fin. L'espace de stockage logique d'un second disque 502 implémentant la fonction de transfert est organisé pour un remplissage progressif à partir de l'adresse de fin @fin et jusqu'à l'adresse de début @début. Une commande relative à une adresse @commande est exécutée directement à cette adresse sur un disque non sujet à la fonction de transfert. Cette inversion de la direction de remplissage de l'espace logique du disque sujet à la fonction de transfert est obtenu en remplaçant l'adresse relative à la commande @commande par l'adresse @fin - @commande par la fonction de transfert. La commande modifiée par la fonction de transfert est donc dans ce cas la commande initiale dont l'adresse a été ainsi modifiée. Les même données sont donc écrites de manière identique sur les deux disques mais à des adresses logiques différentes. Les commandes de lecture subissent les mêmes modifications et permettent donc de lire les bonnes données de manière cohérente sur l'ensemble des disques. Une autre fonction de transfert générant une dissimilarité spatiale peut consister à ajouter un saut à l'adresse originale. Une autre possibilité est d'appliquer la modification uniquement aux adresses paires, ou au contraire aux adresses impaires. L'homme du métier comprend que la fonction de transfert peut consister en toute fonction mathématique bijective définie sur l'espace d'adressage logique des disques. Une telle fonction génère nécessairement une dissimilarité spatiale. La figure 6 illustre un autre exemple de dissimilarité spatiale. Dans cet exemple, les données sont organisées en un ensemble de données logique segmenté 600. Cet ensemble comprend un ensemble de segments 601, 602 à 606. La fonction de transfert réalise une permutation de segments. Dans l'exemple, l'ensemble de données modifié 610 est constitué des mêmes segments 611 à 616 ordonnancés dans un ordre différent. Dans l'exemple de la figure 6 une permutation deux à deux des segments a été réalisée. Toute autre permutation peut être envisagée. De même que dans les exemples précédents de dissimilarité spatiale, ce résultat est obtenu par l'application d'une fonction de transfert réalisant une relation bijective entre les adresses des commandes. Les adresses correspondant au bloc 601 original sont modifiées pour correspondre au bloc 612 modifié, celles du bloc 602 sont modifiées pour correspondre à celles du bloc 611 et ainsi de suite pour l'ensemble des blocs. Dans le cas d'une dissimilarité spatiale, la fonction de transfert inverse affectant les données lues est l'identité. Seules les commandes de lecture et d'écriture, incluant les commandes de lecture utilisées par le mécanisme de détection des erreurs, sont modifiées. Dans ce mode de réalisation une erreur de conception liée à l'adresse utilisée ne se produirait pas de façon homogène sur l'ensemble des disques et serait détectée. Il est également à noter que cette répartition différente des données entraîne une allocation de blocs différentes et donc une exécution différente des mécanismes de ramasse miette et de nivellement de l'usure. Selon un second mode de réalisation, la fonction de transfert implémente une dissimilarité de motif. Dans ce cas, la fonction de transfert modifie la donnée associée à la commande. Elle consiste à appliquer une fonction bijective à cette donnée. Cette fonction bijective est définie sur l'espace des données du dispositif de stockage, typiquement l'espace constitué par l'ensemble des mots de données possibles. Elle ne concerne donc que les commandes d'écriture qui sont les seules à être associées à une donnée. Les commandes de lecture ne sont pas modifiées. Un exemple de fonction de transfert générant une dissimilarité de motif consiste à complémenter à un la donnée devant être écrite. C'est-à-dire que les bits représentant la donnée sont inversés un à un. La fonction de transfert inverse consiste dans ce cas à appliquer la fonction bijective inverse aux données lues de manière à retrouver la donnée initiale. Dans le cas du complément à un, la fonction inverse est également le complément à un. Dans ce mode de réalisation, les données sont donc stockées aux mêmes adresses sur un disque sujet à la fonction de transfert que sur un disque qui ne l'est pas, mais la valeur de la donnée est modifiée. Ainsi, une erreur de conception qui serait liée à la valeur de la donnée écrite ne se produirait pas de manière homogène sur l'ensemble des disques et serait détectée. Selon un troisième mode de réalisation, la fonction de transfert génère une dissimilarité temporelle. Dans ce cas, la fonction de transfert modifie la commande initiale en lui ajoutant au moins une commande autre que nous appellerons commande fantôme. Cette insertion de commandes supplémentaires fantômes vise à modifier la séquence temporelle des commandes exécutées par le ou les disques sujets à la fonction de transfert. Elle a également comme conséquence de modifier la répartition géographique physique des données du fait d'écritures supplémentaires insérées au sein des écritures originales demandées par le système de fichier. Par conséquence elle provoque également une modification du fonctionnement des mécanismes de ramasse miette et de nivellement d'usure. Avantageusement l'insertion n'est pas systématique lors de chaque commande pour éviter une trop lourde surcharge en temps de calcul et en espace physique alloué sur le disque sujet à la fonction de transfert. L'insertion peut être aléatoire ou encore périodique. Selon un mode de réalisation particulière elle permet d'insérer des commandes supplémentaires avant la toute première commande d'écriture reçue. Ainsi la séquence des commandes est modifiée dès la première commande utile. Les commandes utiles étant les commandes originales définies en opposition aux commandes supplémentaires. Elle peut consister en l'insertion de commandes d'écriture de données aléatoires dans des espaces libres de l'espace de stockage logique. Elle peut également consister en l'insertion de commandes de lecture. Ces dernières, même si elles ne modifient pas les données inscrites sur le disque physique permettent toutefois de modifier le contenu des mémoires caches et donc d'introduire de ce fait des dissimilarités dans les chemins logiciels utilisés par le contrôleur des disques. Il est également à noter qu'un ramasse miette qui serait déclenché périodiquement sur la base d'une période exprimée en nombre de commandes exécutées ne sera pas déclenché aux mêmes moments du fait de l'insertion des commandes fantômes. Son comportement ne sera donc pas similaire sur l'ensemble des disques. La fonction de transfert inverse est l'identité dans ce mode de réalisation, car les adresses logiques et les données relatives ne sont pas modifiées dans les commandes utiles. Lors d'une extinction inattendue d'un disque, il est courant qu'une capacité assure l'alimentation en énergie du disque pendant un laps de temps court. Ce temps est mis à profit pour vider la mémoire cache. Il peut arriver que ce laps de temps ne soit pas suffisant et que certains blocs situés en cache n'ait pas le temps d'être sauvegardés sur le support et se retrouvent par là même corrompus. La dissimilarité temporelle en provoquant l'envoi de données de manière retardée sur le disque sujet à la fonction de transfert provoque une dissimilarité dans la séquence de blocs pouvant être corrompus. Ces erreurs pourront donc être détectées. La figure 7 illustre l'organigramme d'un procédé de lecture écriture selon un exemple de réalisation de l'invention. Ce procédé est mis en oeuvre typiquement au sein du module de gestion de la redondance 104 figure 1. Lors d'une première étape 700 ce module reçoit du système de fichier une commande de lecture écriture initiale destinée aux dispositifs de stockage physique. Lors d'une étape 701, une fonction de transfert visant à modifier cette commande initiale est appliquée. Au moins une commande de lecture écriture modifiée est alors obtenue par l'application de cette fonction de transfert. La commande initiale est envoyée à un premier sous-ensemble de dispositifs de stockage physique lors d'une étape 703. Parallèlement, la ou les commandes modifiées sont envoyées à un second sous-ensemble de dispositifs de stockage physique lors de l'étape 704. Si la commande initiale est une commande d'écriture, et seulement dans ce cas, une étape 705 génère la commande de lecture associée. C'est-à-dire la commande de lecture des données stockées à l'adresse logique contenue dans la commande d'écriture. Le but étant de relire la donnée qui vient d'être écrite pour pouvoir vérifier que l'écriture s'est bien passée. Cette commande de lecture générée est également soumise à la même fonction de transfert lors de l'étape 706 pour générer une ou plusieurs commandes de lecture modifiées. Toujours uniquement dans le cas où la commande initiale était une commande d'écriture, la commande de lecture générée est alors envoyée au premier sous-ensemble de dispositifs de stockage physique lors de l'étape 707. Tandis que la commande de lecture modifiée est envoyée au second sous-ensemble de dispositifs de stockage physique lors de l'étape 708. Lors de l'étape 709, les valeurs lues sont reçues. Les valeurs lues envoyées par le second sous-ensemble de dispositifs de stockage physique sont soumises à l'application de la fonction de transfert inverse lors de l'étape 710. Cette étape n'est nécessaire que dans le cas où les données ont été modifiées par la fonction de transfert, c'est-à-dire dans le cas d'une dissimilarité de motif. Lors de l'étape 711, les valeurs lues reçues et les valeurs lues modifiées sont comparées pour détecter un éventuel disfonctionnement sur l'un des disques. Ce procédé permet de détecter également les erreurs de conception au sein du logiciel de contrôle des dispositifs de stockage physique qui ne se produiront pas de manière identique dans les dispositifs de stockage physique des deux sous-ensembles. Ces trois modes de réalisation de l'invention peuvent se combiner deux à deux selon les dissimilarités recherchées. Selon un mode de réalisation préféré, les trois modes de dissimilarité sont combinés. Ainsi, le niveau de dissimilarité entre les disques sujets à la fonction de transfert et les disques qui ne le sont pas est augmenté d'autant. La probabilité qu'une erreur de conception dans le contrôleur du disque ne soit pas détectée est alors minimisée. Selon un autre mode de réalisation, l'ensemble des disques redondants est divisé en plus de deux sous-ensembles. Seul l'un des sous-ensembles n'est pas sujet à une fonction de transfert. Les autres sous-ensembles de disques sont alors soumis à une fonction de transfert. Cette fonction de transfert étant spécifique pour chaque sous-ensemble. Le mécanisme de détection des erreurs compare alors les résultats fournis par chacun des sous-ensembles pour en vérifier la cohérence. La redondance selon l'invention peut se combiner également avec les mécanismes de redondances visant à garantir la tolérance aux pannes tels que les mécanismes connus sous le nom de RAID (Redondant Array of Independent Disks en anglais). Cette redondance de type RAID serait alors également typiquement gérée par le module de gestion de la redondance 104 figure 1. Bien que particulièrement intéressante dans le cas des disques électroniques du fait de la complexité des contrôleurs intégrés dans ces disques, l'invention peut également être avantageusement implémentée sur la base de tout type de dispositifs de stockage physique tels que des disques magnétiques classiques, des disques optiques, des disques distants ou autres. La figure 8 est un bloc-diagramme schématique d'un dispositif de traitement de l'information 800 pour la mise en oeuvre d'un ou plusieurs modes de réalisation de l'invention. Le dispositif 800 de traitement de l'information peut être un périphérique tel qu'un micro-ordinateur, un poste de travail ou un terminal mobile de télécommunication. Le dispositif 800 comporte un bus de communication connecté à: - une unité centrale de traitement 801, tel qu'un microprocesseur, notée CPU; - une mémoire à accès aléatoire 802, notée RAM, pour mémoriser le code exécutable du procédé de réalisation de l'invention ainsi que les registres adaptés à enregistrer des variables et des paramètres nécessaires pour la mise en oeuvre du procédé selon des modes de réalisation de l'invention ; la capacité de mémoire du dispositif peut être complétée par une mémoire RAM optionnelle connectée à un port d'extension, par exemple; - une mémoire morte 803, notée ROM, pour stocker des programmes informatiques pour la mise en oeuvre des modes de réalisation de l'invention; - une interface réseau 804 est normalement connectée à un réseau de communication sur lequel des données numériques à traiter sont transmis ou reçus. L'interface réseau 804 peut être une seule interface réseau, ou composée d'un ensemble d'interfaces réseau différentes (par exemple filaire et sans fil, interfaces ou différents types d'interfaces filaires ou sans fil). Des paquets de données sont envoyés sur l'interface réseau pour la transmission ou sont lues à partir de l'interface de réseau pour la réception sous le contrôle de l'application logiciel exécuté dans le processeur 801 ; - une interface utilisateur 805 pour recevoir des entrées d'un utilisateur ou pour afficher des informations à un utilisateur ; - un dispositif de stockage 806 tel que décrit dans l'invention et noté HD ; - un module d'entrée/sortie 807 pour la réception / l'envoi de données depuis / vers des périphériques externes tels que disque dur, support 15 de stockage amovible ou autres. Le code exécutable peut être stocké dans une mémoire morte 803, sur le dispositif de stockage 806 ou sur un support amovible numérique tel que par exemple un disque. Selon une variante, le code exécutable des 20 programmes peut être reçu au moyen d'un réseau de communication, via l'interface réseau 804, afin d'être stocké dans l'un des moyens de stockage du dispositif de communication 800, tel que le dispositif de stockage 806, avant d'être exécuté. 25 L'unité centrale de traitement 801 est adaptée pour commander et diriger l'exécution des instructions ou des portions de code logiciel du programme ou des programmes selon l'un des modes de réalisation de l'invention, instructions qui sont stockées dans l'un des moyens de stockage précités. Après la mise sous tension, le CPU 801 est capable d'exécuter des 30 instructions de la mémoire RAM principale 802, relatives à une application logicielle. Un tel logiciel, lorsqu'il est exécuté par le processeur 801, provoque les étapes des procédés décrits pour être exécutées. Dans ce mode de réalisation, l'appareil est un appareil programmable qui utilise un logiciel pour mettre en oeuvre l'invention. Toutefois, à titre subsidiaire, la présente invention peut être mise en oeuvre dans le matériel (par exemple, sous la forme d'un circuit intégré spécifique ou ASIC). Naturellement, pour satisfaire des besoins spécifiques, une personne compétente dans le domaine de l'invention pourra appliquer des modifications dans la description précédente. Bien que la présente invention ait été décrite ci-dessus en référence à des modes de réalisation spécifiques, la présente invention n'est pas limitée aux modes de réalisation spécifiques, et les modifications qui se trouvent dans le champ d'application de la présente invention seront évidentes pour une personne versée dans l'art. REVENDICATIONS1. Dispositif de stockage qui comporte : une pluralité de dispositifs de stockage physique redondants ; un module de gestion de système de fichier générant des commandes de lecture écriture de données à destination de la pluralité de dispositifs de stockage physique redondants, les données devant être écrites de manière redondante sur chacun des dispositifs de stockage physique ; un module de détection d'erreurs par comparaison des valeurs des données lues depuis la pluralité de dispositifs de stockage physique ; caractérisé en ce qu'il comporte en outre : un module permettant d'appliquer une fonction de transfert aux commandes de lecture écriture à destination d'un sous-ensemble de dispositifs de stockage physique, ladite fonction de transfert étant destinée à modifier lesdites commandes de lecture écriture. 2. Dispositif de stockage selon la revendication 1, caractérisé en ce que, ladite fonction de transfert modifiant les données associées aux commandes d'écritures, il comporte en outre : un module permettant d'appliquer une fonction de transfert inverse aux données lues depuis ledit sous-ensemble de dispositifs de stockage physique. 3. Dispositif selon la revendication 2, caractérisé en ce que : ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour appliquer une fonction bijective, définie sur l'espace des données du dispositif de stockage, sur les données associées aux commandes d'écriture ; et- ledit module permettant d'appliquer une fonction de transfert inverse comporte des moyens pour appliquer la fonction bijective inverse sur les données lues. 4. Dispositif selon l'une des revendications 1 à 3, caractérisé en ce que : ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour appliquer une fonction bijective, définie sur l'espace d'adressage logique du dispositif de stockage, sur l'adresse logique associée à la commande. 5. Dispositif selon l'une des revendications 1 à 4, caractérisé en ce que : ledit module permettant d'appliquer une fonction de transfert comporte des moyens pour ajouter des commandes supplémentaires aux commandes de lecture écriture. 6. Dispositif selon la revendication 4, caractérisé en ce que : ladite fonction de transfert remplace l'adresse associée à la commande par le résultat de la soustraction de cette adresse à l'adresse de fin de l'espace d'adressage logique du dispositif de stockage. 7. Dispositif selon l'une des revendications 4 ou 6, caractérisé en ce que : - ladite fonction de transfert n'est appliquée qu'aux adresses paires, ou aux adresses impaires. 8. Dispositif selon la revendication 3, caractérisé en ce que : ladite fonction de transfert comporte des moyens pour complémenter à un les données associées aux commandes d'écriture ; et ladite fonction de transfert inverse comporte également des moyens pour complémenter à un les données lues. 9. Dispositif selon la revendication 5, caractérisé en ce que : ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires avant la toute première commande reçue. 10. Dispositif selon l'une des revendications 5 ou 9, caractérisée en ce que : - ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires de façon périodique. 11. Dispositif selon l'une des revendications 5, 9 ou 10, caractérisée en ce que : - ladite fonction de transfert comporte des moyens pour insérer des commandes supplémentaires de façon aléatoire. 12. Procédé de lecture écriture sur un dispositif de stockage comportant une pluralité de dispositifs de stockage physique redondants, caractérisé en ce qu'il comporte : une étape (700) de réception d'une commande initiale de lecture écriture générée par un module de gestion de système de fichier ; une étape (702) d'application d'une fonction de transfert à ladite commande initiale de lecture écriture, ladite fonction de transfert étant destinée à modifier ladite commande initiale de lecture écriture pour obtenir au moins une commande modifiée de lecture écriture; une étape (703) d'envoi de ladite commande initiale de lecture écriture à un premier sous-ensemble de dispositifs de stockage physique ; une étape (704) d'envoi de la ou des commande de lecture écriture modifiée à un second sous-ensemble de dispositifs de stockage physique ;si la commande est une commande d'écriture, le procédé comporte en outre : o une étape (705) de génération de la commande de lecture associée ; o une étape (706) d'application de la fonction de transfert à la commande de lecture générée ; o une étape (707) d'envoi de la commande de lecture au premier sous-ensemble de dispositifs de stockage physique ; o une étape (708) d'envoi de la commande de lecture modifiée au second sous-ensemble de dispositifs de stockage physique ; une étape (709) de réception des valeurs lues ; et une étape (711) de comparaison des valeurs lues. 13. Procédé selon la revendication 12, caractérisé en ce que, ladite fonction de transfert modifiant les données associées aux commandes d'écritures, il comporte en outre : une étape (710) d'application d'une fonction de transfert inverse aux données lues issues du second sous-ensemble de dispositifs de stockage physique. 14. Programme d'ordinateur comprenant des instructions adaptées à la mise en oeuvre de chacune des étapes du procédé selon l'une quelconque des revendications 12 à 13 lorsque ledit programme est exécuté sur un ordinateur. 15. Moyen de stockage d'informations, amovible ou non, partiellement ou totalement lisible par un ordinateur ou un microprocesseur comportant des instructions de code d'un programme d'ordinateur pour l'exécution de chacune des étapes du procédé selon l'une quelconque des revendications 12 à 13.