Alterações no cartão SD desfeitas após a montagem (por exemplo, os arquivos excluídos são reapresentados)

6

Depois de ter um sistema de arquivos corrompido no meu cartão SD devido (provavelmente devido à fonte de alimentação insuficiente) eu quero fazer um novo sistema de arquivos. ( e2fsck falha, registre abaixo.)

No entanto, todas as alterações relacionadas a arquivos no cartão SD são magicamente desfeitas!

  • Primeiro exemplo: quando montei o cartão SD, apague alguns arquivos, os arquivos desaparecem. Quando eu desmontar e montar novamente, os arquivos estão lá novamente! Da mesma forma, quando modifico o conteúdo de um arquivo, o conteúdo original volta após a montagem.
  • Segundo exemplo: quando eu crio uma nova tabela de partição com fdisk , a tabela de partições antiga é colocada de volta imediatamente. (Log abaixo)
  • Terceiro exemplo: while eu corro dd if=/dev/zero of=/dev/mmcblk0 bs=1M , fdisk razoavelmente disse Disk /dev/mmcblk0 doesn't contain a valid partition table . Quando dd foi concluído, a tabela de partições antiga estava de volta.

Eu não tranquei o cartão SD fisicamente com o pequeno interruptor. Eu não recebo nenhum erro somente leitura. Na verdade, não recebo nenhum erro! dmesg não reporta nada, exceto que estou montando um sistema de arquivos com erros.

O problema também ocorreu rodando um live cd do Xubuntu (12.10). Infelizmente não tenho acesso a outros computadores e / ou leitores de cartão SD no momento.

Isso é um problema do meu computador, meu cartão SD, ou estou perdendo alguma coisa o tempo todo? Alguma sugestão que eu poderia tentar?

e2fsck falha:

$ 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 **********

Este é o log que mostra que fdisk não tem efeito:

$ 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
    
por chs 01.03.2013 / 22:50

2 respostas

3

Neste ponto, sugiro que você execute os badblocks no cartão SD para ver o que encontrar.

Parece que a lógica de gravação da placa está danificada, o que você vê em um ponto de montagem é simplesmente a versão em cache de seus dados. É suposto ser escrito de volta via sincronização e durante umount. Vendo que você não mencionou que o cartão SD está pendurado em tudo sugere que o dano é grave o suficiente para criar falsos positivos write back responses ou em termos mais simples seu disco está mentindo para você quando diz que uma gravação está completa .

Você pode tentar alternar a chave de proteção contra gravação enquanto a placa é removida do sistema. por exemplo,

  1. alternar proteção contra gravação
  2. insira
  3. faça algo trivial
  4. desmontar / ejetar
  5. proteção contra gravação reversa
  6. enxaguar / repetir

Em um esforço para fazer cócegas no circuito que pode estar armazenando em cache um valor "preso em 1". Fora isso, esmague-o para que ninguém mais sofra mais e lance-o.

    
por ppetraki 26.06.2013 / 15:52
0

Seu cartão parece estar bloqueado por meio do sinalizador de proteção contra gravação do MMC. Se você tiver um computador Linux com um leitor de cartão SD / MMC, tente executar

sudo sdtool /dev/mmcblk0 unlock

Note que você precisa de um dispositivo MCC (não um dispositivo de armazenamento em massa USB como /dev/sdX ) para que isso funcione.

sdtool pode ser encontrado aqui . Existe uma compilação do Raspberry Pi, caso contrário você terá que construir a partir de fontes.

Parece que uma ação semelhante pode ser realizada com hdparm , mas eu não tentei isso pessoalmente.

    
por Dmitry Grigoryev 16.11.2016 / 13:04