Outils pour utilisateurs

Outils du site


phone:check-sd-card

Vérifier sa carte SD

Objet

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é.

Résumé des opérations

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

Préparatifs

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.

Test de capacité

La combinaison de f3write et f3read va nous permettre de tester la capacité réelle de la carte.

Cette opération effacera tout ce qui est inscrit sur la carte6).
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 vitesses de lecture/écriture constatées via f3read et f3write sont dépendantes du système de fichiers. Elles nous renseignent sur les performances que nous rencontrerons en utilisation réelle. Elles sont nécessairement inférieures aux performances de la carte elle-même, les opérations de lecture/écriture étant ralenties par le système de fichiers et le blocs de lecture-écriture qui ne sont pas optimisés pour faire plaisir aux technologies et paramètres intégrées dans la carte9).

Test de vitesse d'écriture

Continue

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écision10). 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.

Aléatoire (à explorer)

À é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.

Les indications qui suivent dans cette section sont a prendre avec circonspection.
Par défaut, la commande fio effectue les opérations de lecture/écriture dans le répertoire courant11).

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 —

Test de contrefaçon

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”.

Redimensionnement de la carte

Si la capacité réelle de la carte est manifestement inférieure à la capacité indiquée sur la carte12) tout en restant intéressante dans votre cas d'utilisation13), 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
0n remarque que la valeur à indiquer dans la commande est exactement la valeur renvoyée par f3probe moins 114).

Il reste conseillé de vérifier l'ensemble des performances de la carte ainsi corrigée.

Partitions initiales

Suppositions

Mine de rien, nous avons jusqu'ici supposé que la carte :

  • ne contenait qu'une seule partition
  • que celle-ci était formatée
  • que notre système était capable d'exploiter ce formatage en lecture et écriture.

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 :-x. Il est donc conseillé de ne pas y toucher15)..

Comment doit-on traiter cette partition si l'on souhaite changer le type de table de partition (MBR vers GPT ou l'inverse.) ? C'est une bonne question à laquelle je n'ai pas la réponse.

Le meilleur formatage ?

Tout dépend de l'utilisation LOL

Lorsque j'utilise ma carte SD comme un support de stockage interne sur un ordi portable Linux ou un smartphone Android16), 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 à 4Go17) 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.?

f2fs ?

Le système de fichiers f2fs a été conçu pour tirer parti des caractéristiques propres aux équipements de stockage sur semi-conduteurs (SSD18)) 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 poursuivent19) 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 :

Tests de performances ?

Performances utiles, disponibles, pures

Les performances utiles sont celle qui correspondent à la situation concrète d'utilisation20). Les performances disponibles sont les maxima mesurés dans des situations type d'utilisation réelle, avec un banc d'essai21). Les performances pures sont celles obtenue par un dispositifs externe à la carte parvenant à la faire fonctionner aux limites de ses possibilités22).

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 pures23) 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érieure24) 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 une25) 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.

Une chaîne de mesure

1)
“SD” pour “Secure Digital”.
2)
“Fight Flash Fraud”, tout simplement !
3)
Un cinquième outil est destiné aux développeuses.
4)
À l'aide d'un lecteur externe de carte SD si nécessaire. Pour les tests de vitesse, être attentives aux limites du lecteur lui-même.
5)
Dépend de votre système. Faites comme avec une clé USB.
6)
Ce qui ne doit pas poser de problème puisqu'elle est censée être vide
7)
Selon sa capacité et sa vitesse.
8)
Ou aurait l'être si la carte est fonctionnelle et n'est pas une contrefaçon.
9)
À ma diffférnce des test effectués sur bans de test constructeur.
10)
L'écriture en continu est plus rapide que l'écriture aléatoire. La première intéresse typiquement une caméra numérique. La seconde intéresse un ordi ou smartphone utilisant la carte comme unité de stockage multiusages.
11)
La commande “pwd” renvoie cette information.
12)
Et que vous ne pouvez pas vous faire rembourser :-(
13)
Par ex. 64Go au lieu de 128Go…
14)
Parce que les secteurs sont comptés à partir de 0 au lieu de 1…
15)
Sur une carte de plusieurs Go, la perte est négligeable. Quoiqu'on pense de cette pratique, il me semble inutile de prendre des risques.
16)
Ne pas oublier que la carte doit également être lisible par le recovery installé sur l'androphone, par exemple TWRP.
17)
Au regard des utilisations prévues et de la capacité totale de la carte.
18)
En anglais : “Solid State Device”.
19)
À ce jour (juillet 2022), il reste du chemin à faire… Il est, par exemple, impossible de donner un nom (label) à une partition f2fs, même en utilisant la dernière version de Linux-Mint ! Une fonctionnalité élémentaire pour un support amovible :-D
20)
S'il y en a plusieurs, c'est une mix de ces situations.
21)
En pratique, toute installation dont on s'est préalablement assurée de la fiabilité et des performances qui ne doivent pas entraver les tests parce que trop faibles.
22)
Électroniques et logique/performance du contrôleur.
23)
Avec un effet domino sur les autres performances.
24)
Tout en étant au-dessus de la classe inférieure.
25)
Ou même plusieurs !
phone/check-sd-card.txt · Dernière modification : 2023/04/13 23:07 de 127.0.0.1