web-dev-qa-db-fra.com

Modifications de la carte SD annulées après le remontage (par exemple, les fichiers supprimés réapparaissent)

Après avoir eu un système de fichiers corrompu sur ma carte SD en raison (probablement en raison d'une alimentation insuffisante), je souhaite créer un nouveau système de fichiers. (e2fsck échoue, connectez-vous ci-dessous.)

Cependant, toutes les modifications de fichier sur la carte SD sont annulées comme par magie!

  • Premier exemple: lorsque je monte la carte SD, supprime certains fichiers, ceux-ci disparaissent. Quand je le démonte et le monte à nouveau, les fichiers sont à nouveau là! De même, lorsque je modifie le contenu d'un fichier, le contenu d'origine est rétabli après le remontage.
  • Deuxième exemple: lorsque je crée une nouvelle table de partition avec fdisk, l'ancienne table de partition est immédiatement remise en place. (Connectez-vous ci-dessous.)
  • Troisième exemple: while Je lance dd if=/dev/zero of=/dev/mmcblk0 bs=1M, fdisk raisonnablement dit Disk /dev/mmcblk0 doesn't contain a valid partition table. Lorsque dd était terminé, l'ancienne table de partition était de nouveau disponible.

Je n'ai pas verrouillé la carte SD physiquement avec le petit commutateur. Je ne reçois aucune erreur en lecture seule. En fait, je ne reçois aucune erreur du tout! dmesg ne rapporte rien sauf que je monte un système de fichiers avec des erreurs.

Le problème est également survenu lors de l'exécution d'un cd live Xubuntu (12.10). Malheureusement, je n'ai pas accès à d'autres ordinateurs et/ou lecteurs de carte SD pour le moment.

Est-ce un problème de mon ordinateur, de ma carte SD ou est-ce que je manque quelque chose tout le temps? Des suggestions de ce que je pourrais essayer?


e2fsck échoue:

$ Sudo e2fsck /dev/mmcblk0p2 
e2fsck 1.42.5 (29-Jul-2012)
/dev/mmcblk0p2: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? yes
e2fsck: unable to set superblock flags on /dev/mmcblk0p2


/dev/mmcblk0p2: ********** WARNING: Filesystem still has errors **********

Voici le journal qui montre que fdisk n'a aucun effet:

$ Sudo fdisk /dev/mmcblk0

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux

Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Selected partition 2

Command (m for help): p

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.



$ Sudo fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 31.5 GB, 31460425728 bytes
4 heads, 16 sectors/track, 960096 cylinders, total 61446144 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880    61446143    30661632   83  Linux
7
chs

À ce stade, je suggérerais de placer des badblocks sur la carte SD pour voir ce qu’elle trouve.

Il semble que la logique d’écriture de la carte soit endommagée. Ce que vous voyez sur un point de montage est simplement la version mise en cache de vos données. Il est censé être écrit via sync et pendant umount. Voir que vous ne mentionnez pas que la carte SD est suspendue suggère que le dommage est assez grave pour être créé réponses de réponses faussement positives ou plus simplement votre disque vous ment quand vous il est écrit qu'une écriture est complète.

Vous pouvez essayer de basculer le commutateur de protection en écriture lorsque la carte est retirée du système. par exemple.

  1. activer/désactiver la protection en écriture
  2. insérer
  3. faire quelque chose d'anodin
  4. démonter/éjecter
  5. protection en écriture inversée
  6. rincer/répéter

Dans un effort pour chatouiller les circuits qui pourraient mettre en cache une valeur "bloqué à 1". En dehors de cela, écrasez-le pour que personne d'autre ne souffre plus et ne le lancez pas.

4
ppetraki

Votre carte semble être verrouillée via l'indicateur de protection en écriture MMC. Si vous avez un ordinateur Linux avec un lecteur de carte SD/MMC, essayez d’exécuter

Sudo sdtool /dev/mmcblk0 unlock

Notez que vous avez besoin d’un périphérique MCC (et non d’un périphérique de stockage de masse USB tel que /dev/sdX) pour que cela fonctionne.

sdtool peut être trouvé ici . Il existe une version Raspberry Pi, sinon vous devrez créer à partir de sources. Il semble qu'une action similaire puisse être effectuée avec hdparm , mais je n'ai pas essayé personnellement.

Notez que les cartes défectueuses se verrouillent en interne de manière similaire afin d’éviter d’autres dommages aux données et ignorent les commandes de déverrouillage.

1
Dmitry Grigoryev