Sources :
Une carte SD1) ou micro-SD n'est pas toujours ce qu'elle prétend être. Entre ce que le marchand (en ligne ou pas) vous a vendu, ce qui est imprimé sur l'emballage ou sur le produit et ce que avez vraiment en main, la différence peut être substantielle.
La plupart du temps, un des indices de suspicion sera un trop belle affaire. Un prix cassé par un marchand inconnu peut être une bonne affaire ou le signe d'une contrefaçon. Les plates-formes marchandes réputées brouillent les pistes puisqu'elles hébergent des marchands peu scrupuleux qui apparaissent et disparaissent au gré des signalements, quand ils sont suivis d'effets. Il est même arrivé que de grandes enseignes physiques se fassent piéger…
Enfin, les cartes SD tendent à devenir de simples consommables de haute technologie avec les conséquences négatives que cela entraîne sur les niveaux de contrôle-qualité.
Pour celles qui connaissent la musique mais qui ont oublié les paroles Les messages affichés par les commandes sont explicites.
$ lsblk $ rm -Rf <mount point>/* $ f3write <mount point> $ f3read <mount point> $ dd if=/dev/zero of=<mount point>/testfile bs=10MB # f3probe --destructive --time-ops <device name> # f3fix --last-sec=<last usable block> <device name> // <last usable block> = nombre de blocs uitilisables - 1 !!! # parted -l
Même en l'absence de tout indice, une bonne pratique consiste à contrôler systématiquement toute nouvelle carte SD qui entre en sa possession (achat, don, récupération…). Le but est d'estimer la confiance que l'on peut accorder aux informations imprimées sur la carte, en termes de capacité de stockage et de vitesses d'accès.
Heureusement, l'outil f32) a été développé dans ce seul but. Pour l'installer sous Debian :
# atp install f3
Il fournit 4 commandes directement utiles à toute simple utilisatrice3) : f3probe, f3fix, f3write, f3read.
Les plus simples d'utilisation sont f3wite et f3read car elles ne demandent aucune connaissance particulière : insérer la carte SD dans l'ordi4) si elle n'est pas montée automatiquement, la monter manuellement5) et repérer le point de montage.
Pour éviter de causer des dommages irréparables à d'autres supports de stockage que celui que l'on veut tester, la commande lsblk affichera l'état des dispositifs de stockage connectés (montés ou non montés) et reconnus par le système.
lsblk
On peut alors afficher le contenu de la carte qui devrait être vierge. C'est un premier test.
La combinaison de f3write et f3read va nous permettre de tester la capacité réelle de la carte.
f3write point_de_montage
par exemple :
f3write /media/moi/3745-5135/
L'exécution peut être longue7) puisque l'objectif est de “gaver” la carte de données jusqu'à ce qu'elle soit pleine. L'écriture s'effectue par blocs de données avec un compte-rendu après chaque écriture. La vitesse d'écriture affichée est une première indication des performances réelles de la carte. Une fois l'écriture terminée, on procède à une lecture de contrôle de ce qui a été8) écrit, par exemple :
f3read /media/moi/3745-5135/
chaque bloc précédemment écrit est lu et vérifié, avec un compte-rendu après chaque lecture. À la fin, f3read affiche la capacité constatée de la carte et les erreurs éventuellement rencontrées.
Les trois types d'erreurs signalés sont les suivants :
Pour en savoir plus sur l'interprétation des résultats :
Une autre commande va nous permettre de conforter l'estimation de la capacité mais surtout de tester la vitesse d'écriture en continu qui est celle généralement mentionnée par le fabricant, sans plus de précision11). La forme générale de la commande est la suivante :
dd if=/dev/zero of=point_de_montage/testfile bs=10MB
par exemple,
dd if=/dev/zero of=/media/moi/3745-5135/testfile bs=10MB
En fin d'exécution, la capacité constatée ainsi que la vitesse d'écriture sont affichées.
À étudier :
Dans le cas de la captation d'une vidéo, la vitesse d'écriture en continu rend compte des capacités de la carte dans une situation réelle. Mais lorsqu'elle sert au stockage multiusages, cette vitesse est sans intérêt. L'indice “A” figurant sur certaines cartes est là pour informer sur les capacités d'entrées/sorties aléatoires revendiquées par le fabricant.
Pour mesurer les performances réelles, on dispose de la commande fio. Si elle n'est pas déjà installée :
# apt install fio
L'utilisation de cette commande est tout sauf intuitive et je n'ai pas eu le temps de l'explorer suffisamment pour la présenter. Cela ne tient pas tant à une syntaxe complexe qu'à la difficulté à laquelle on est confrontée lorsqu'on doit définir clairement ce que l'on entend pas “lecture/écriture aléatoire”. Pour ne prendre que deux situations, l'écriture par plusieurs processus dans des journaux d'activité n'a pas grand chose à voir avec l'exécution d'un script de retouche appliqué à un lot d'images en haute définition. Pourtant les deux vont déclencher de nombreux accès sur les supports de stockage. Il faudrait non seulement définir les différentes situations que l'on veut tester mais aussi les pondérer.
Il existe probablement des recueils de recettes fio concoctées pour tester des situations d'utilisation déjà été répertoriées (à chercher). Il se pourrait même que quelqu'une ait déjà partagé un script exploitant fio pour en sortir des indicateurs synthétiques.
Par exemple, la commande suivante serait calibrée pour tester les performances en lecture/écriture d'une clé USB en effectuant un mix de lectures et d'écritures de 4Ko… :
sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=200M --readwrite=randrw --rwmixread=75
— à compléter —
Ce test va tenter d'identifier si la carte a été contrefaite et de cataloguer la technique de contrefaçon utilisée. De plus, il affiche la capacité annoncée par la carte, la capacité réelle constatée et le nombre de “secteurs” contigus utilisables. Cette dernière information peut être utilisée plus tard.
Pour le test, il faut connaître le nom donné au dispositif (device) de stockage lui-même et non plus au point de montage qui permet d'en consulter le contenu. La commande suivante affichera une vue des dispositifs identifiés et devrait vous permettre d'y retrouver votre carte SD :
lsblk
Une fois le nom du dispositif noté, on peut lancer la commande, en tant que root ou superutilisatrice :
# f3probe --destructive --time-ops nom_du_disposotif
par exemple,
# f3probe --destructive --time-ops /dev/sdb
Le nombre de “secteurs” contigus utilisables figure dans la ligne suivante, parmi des résultats affichés :
… *Usable* size: 7.86 GB (16477879 blocks) …
ici “16477879”.
Si la capacité réelle de la carte est manifestement inférieure à la capacité indiquée sur la carte13) tout en restant intéressante dans votre cas d'utilisation14), il peut être intéressant de corriger l'information erronée enregistrée dans la carte. On le fait en utilisant le dernier secteur utilisable indiqué par f3probe :
# f3fix --last-sec=16477878 /dev/sdb
Il reste conseillé de vérifier l'ensemble des performances de la carte ainsi corrigée.
Mine de rien, nous avons jusqu'ici supposé que la carte :
Il arrive que, sortie de son emballage, la carte contienne une première partition de petite taille (par ex. 16Mo), que le système n'a ni montée automatiquement ni proposé de monter. Certains fabricants de cartes la dédie au contrôleur de mémoire intégré sur la carte . Il est donc conseillé de ne pas y toucher16)..
Tout dépend de l'utilisation
Lorsque j'utilise ma carte SD comme un support de stockage interne sur un ordi portable Linux ou un smartphone Android17), je choisis ext4, sans hésiter, tant pour les fonctionnalités qu'apporte ce système de fichiers que pour la technologie des inodes, si pratique pour l'enregistrement différentiel.
Si j'utilise ma carte comme un support amovible, je choisis encore ext4 dans le cas (fréquent) où je la connecte exclusivement à des appareils Linux ou Android. Dans la plupart des autres cas, si ext4 n'est pas utilisable, je m'aligne sur ce qu'imposent les autres appareils. Mais pas n'importe comment : j'exclus exFAT, j'évite FAT32, j'utilise NTFS si c'est possible. Si je ne connais pas “tous les autres appareils”, j'évalue les conséquences d'une limitation de la taille maximale des fichiers à 4Go18) et choisis FAT32 si l'impact est négligeable.
Si cette carte n'est utilisée que dans un seul appareil, je respecte les recommandations du fabricant en partant du principe que le format recommandé est le mieux adapté au firmware. En gros, je fais comme s'il s'agissait d'un composant de stockage interne dont je ne pourrais pas choisir le format.
En savoir plus : Filesystems Explained: What’s the Difference between FAT32, NTFS, exFAT, HFS+, ext4 etc.?
Le système de fichiers f2fs a été conçu pour tirer parti des caractéristiques propres aux équipements de stockage sur semi-conduteurs (SSD19)) dont font partie les cartes SD. Les caractéristiques et les performances de f2fs sont séduisantes. C'est probablement le meilleur choix pour une carte SD passant sa vie dans un androphone. On se retrouve alors presque dans le cas d'un composant inamovible où je suggère de suivre la recommandation du fabricant. Des fabricants majeurs de smartphones ont adopté f2fs pour le stockage interne de leur appareils.
J'ai hâte que sa diffusion et son intégration harmonieuse dans le monde GNU-Linux se poursuivent20) afin de reconsidérer sereinement la priorité que je donne à ext4. Comparé à ce dernier, f2fs n'a pas à rougir de ses performances lorsqu'il accueille le système d'exploitation et les applications. Dans les autres utilisations il distancie ext4 pouvant même se montrer trois fois plus rapide ! La lecture continue constitue une exception puisque ext4 s'y montre plus de deux fois meilleur.
En savoir plus :
Les performances utiles sont celle qui correspondent à la situation concrète d'utilisation21). Les performances disponibles sont les maxima mesurés dans des situations type d'utilisation réelle, avec un banc d'essai22). Les performances pures sont celles obtenue par un dispositifs externe à la carte parvenant à la faire fonctionner aux limites de ses possibilités23).
Les performances utiles sont nécessairement relatives à une utilisatrice, dans un contexte donné d'utilisation. Elles peuvent être très différentes, pour une même carte. Elle relèvent d'une mesure effective dans le contexte concret et ne peut être réalisée qu'après l'acquisition. Les performances disponibles donnent une idée, avant acquisition, de ce que pourront être les performances utiles pour soi.
Les performances pures donnent des maxima théoriques. Cela permet de les écarter directement, si elles sont en dessous de nos besoins. Elles sont censées être au moins égales aux performances revendiquées par le fabricant et imprimées sur la carte ou l'emballage. Certains fabricants ont l'honnêteté d'indiquer qu'elles ont été obtenues au moyen de technologies propriétaires. Ce simple fait interdit de les confirmer avec un banc de test, aussi puissant soit-il, qui ne serait pas doté de ces technologies.
Il arrive que les performances pures24) d'une carte soit sensiblement supérieures à celles affichées. Cela découle le plus souvent des contrôles qualité qui invalident un produit pour la classe supérieure25) ou de la politique commerciale visant à éviter la défaillance du fabricant sur un type de produit, malgré une insuffisance stock/production. Si des tests effectués par des laboratoires indépendants font état de performances supérieures à celles revendiquées, sur une26) carte d'une référence données, elle ne peuvent donc pas être prises pour acquises et encore moins orienter notre choix d'acquisition.
Toutes sont des performances réelles. Elle ne décrivent simplement pas la même réalité. Dans le langage courant, on utilisera l'expression “performances réelles” à propos des utiles ou disponibles. C'est vague… L'expression n'est pas à bannir mais il convient alors de préciser de quoi on parle.