Permalink: 2015-01-21 00:00:00+01:00 by kleph in Blog tags: Fix

Ébauche d'article sur les mémoires flash, et en particulier, les clés USB peu chères dont la capacité annoncée est très supérieure à la réalité. En plus de ne pas être honnêtes ces clés sont relativmeent dangereuses puisque les données écrites au délà de la capacité réelle sont perdues peu après l'écriture, au mieux elles restent dans un cache quelques secondes avant de disparaitre. L'OS rapportera probablement une erreur d'accès à la prochaine tentative de lecture de ces données.

Une bonne partie de l'article se base sur l'utilisation de l'excellent programme : f3 Comme je viens d'avoir une clé de ce type, et que sur le coup je n'ai pas trouvé de ressources en français, voici donc cette ébauche.

Détection

À l'insertion de la clé, le noyau semble la détecter correctement, avec sa taille annoncée de 128 Go

 scsi 14:0:0:0: Direct-Access     Generic  Flash Disk       8.00 PQ: 0 ANSI: 4
 sd 14:0:0:0: Attached scsi generic sg2 type 0
 sd 14:0:0:0: [sdc] 262144000 512-byte logical blocks: (134 GB/125 GiB)
 sd 14:0:0:0: [sdc] Write Protect is off
 sd 14:0:0:0: [sdc] Mode Sense: 23 00 00 00
 sd 14:0:0:0: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
  sdc: sdc1

Comme j'avais de forts doutes sur cette clé, j'ai lancé f3probe avant même d'essayer d'écrire quoique ce soit dessus.

# ./f3probe /dev/sdc
F3 probe 5.0
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

Please unplug and plug back the USB drive. Waiting... Thanks
[... x6 ... ]
Please unplug and plug back the USB drive. Waiting... Thanks

CAUTION     CAUTION     CAUTION
No more resets are needed, so do not unplug the drive
Probe finished, recovering blocks... Done

Bad news: The device `/dev/sdc' is a counterfeit of type limbo

You can "fix" this device using the following command:
f3fix --last-sec=26984447 /dev/sdc

Device geometry:
         *Real* size: 12.87 GB (3373056 blocks)
      Announced size: 125.00 GB (32768000 blocks)
              Module: 128.00 GB (2^37 Bytes)
          Block size: 4.00 KB (2^12 Bytes)
    Last good sector: 26984447

Probe time: 258.70 seconds

Le message est assez clair. Je ne me suis pas encore renseigné sur la nature exacte des "limbo", mais ça viendra. Mon hypothèse actuelle est que le début de la flash est normale et foncitionne et qu'à partir d'une certaine taille, le contrôleur cycle sur un intervalle d'adresses.

Réparation

Comme le contrôleur en lui même ment, il n'est pas facile de faire reconnaître la clé comme faisant 12 Go et non 128. Malgré celà, une solution très simple consiste à créer une partition dont la taille correspond à celle de la flash détectée comme correcte. f3probe nous donnait le dernier bon secteur, ainsi qu'un exemple de commande f3fix à utiliser pour créer une partition de la bonne taille.

Dans mon cas :

f3fix --last-sec=26984447 /dev/sdc

Sans vouloir rajouter de l'eau au moulin des conspirationistes et autres partisans du "monde de merde"©, ces clés ne sont clairement pas des erreurs. Il y a des mécanismes pour camoufler le fait que la mémoire soit plus petite que celle annoncée. Par exemple un système de cache qui permet conserver les données écrites, ainsi une lecture sera servie par le cache et empêchera la détection du fait que les données n'ont jamais été réeelements inscrites à l'adresse indiquée.

De préférence il faut "ennuyer" ces vendeurs, qui, au mieux, n'ont pas fait attention à la marchandise qu'ils revendaient, au pire sont parfaitement au courant. Avec l'augmentation de la taille des clés il devient difficile de s'en rendre compte rapidement, cet exemple avec la clé de 12 Go, aurait pu me prendre des mois, il aurait alors été bien trop tard pour un remboursement.

Encore merci à l'auteur de f3probe. Essayez de l'utiliser, rapidement après l'achat, sur toutes les clés et mémoires flash en tout genre afin de pouvoir embêter ces vendeurs. Ça serait bien de rendre ce marché non rentable pour qu'il s'arrête naturellement.