Verificar e corrigir erros do cartão SD no próprio Android?

42

Às vezes, meu cartão SD fica "corrompido" e isso leva a muitos erros de leitura / gravação. Normalmente, conectar o cartão SD ao Windows 7 e selecionar a opção "Verificação de erro" (clique com o botão direito do mouse na unidade> Ferramentas> Verificação de erro) encontra a corrupção e a corrige.

Existe alguma ferramenta ou aplicativo para verificar os cartões SD para erros de unidade e corrigir o mesmo de dentro do próprio Android ?

Também gostaria de mencionar que estou no froyo enraizado com o busybox instalado.

Irfan
fonte
Você já tentou com um aplicativo de terminal, executando sue executando o /system/bin/fsck.exfat?
Izzy
@Izzy Gives meNo such file or directory
Irfan
Verifique locais diferentes, talvez esteja em /system/xbinvez disso? Tentando cdentrar no diretório e ls fsc*verificar o que está disponível. Deve estar em algum lugar :)
Izzy
1
Exatamente. O Busybox tenta ser o mais fino possível. Tente tia Google com "homem monte", funciona bem :) E veja minha resposta abaixo. Se algo não estiver claro, comente lá (ou me veja no chat - embora eu não esteja disponível nas próximas horas), ainda há outros membros que o ajudarão :) :)
Izzy
2
Se houver repetidamente erros no seu cartão SD, verifique se ele possui realmente a capacidade declarada usando o H2testw (link apenas em alemão, software em alemão e inglês. Acredito que este seja o lar oficial, apesar das aparências em contrário). Cartões SD ruins serão corrompidos automaticamente.
Code Bling

Respostas:

17

Você pode corrigir isso com a ajuda do root e de um emulador de terminal (por exemplo, Android Emulator Terminal (ou, alternativamente, usando adb shell). O binário para fazer o trabalho é chamado fscke geralmente localizado em um /system/xbinou outro /system/bin. Às vezes você precisa de uma variante especial , que pode, por exemplo, ser chamado fsck.exfatou algo parecido.Então, primeiro, certifique-se de encontrar o binário correto:

cd /system/xbin
ls fsc*

Se não for encontrado, repita com /system/bin. Assumirei aqui que foi encontrado em primeiro lugar e é chamado simplesmente fsck(ajuste o seguinte correspondentemente, se não for esse o caso).

Como fsckvem do "núcleo Linux", podemos consultar sua página de manual para obter a sintaxe. Embora possa haver algumas opções que não funcionam no Android, as mais básicas devem. Veja a página de manual vinculada para obter detalhes (ou execute uma VM do Linux e use man fsckno caso de essa página desaparecer) - vou seguir o básico aqui:

Primeiro, precisamos encontrar o dispositivo ao qual seu cartão SD está vinculado. Se estiver montado, o mountcomando nos ajudará:

mount

É isso, basicamente: verifique a saída e veja onde fica o seu cartão SD. Geralmente isso é algo que está sendo usado vold, mas é diferente entre os dispositivos. A saída pode incluir algo como /dev/block/vold/179:17 on /mnt/storage/sdcard- nesse caso, a primeira parte da minha cotação é o nosso dispositivo. Para reparar a "unidade", é necessário desmontá-la primeiro. Isso pode ser feito através do menu de configurações ou, como estamos no terminal, emitindo

umount /dev/block/vold/179:17

Agora podemos ir para o trabalho de reparo. A sintaxe básica é:

fsck [options] [-t fstype] <filesystem> [fsoptions]

Então, primeiro tentamos a abordagem mais simples e a esperança fsckdescobre tudo:

fsck -C -r /dev/block/vold/179:17

O que basicamente significa: Mostrar progresso (-C) e sempre pedir ao usuário para reparar (-r) quaisquer erros /dev/block/vold/179:17. Se isso não der certo, consulte a página de manual vinculada para obter mais opções.

Izzy
fonte
4
Você também pode salvar as cdetapas, se desejar, usando ls /system/bin/fsc*e ls /system/xbin/fsc*de qualquer diretório de trabalho atual. Você pode até combinar os dois em um comando com ls /system/xbin/fsc* /system/bin/fsc*.
eldarerathis
1
Não, eu não confundo as coisas, o que eu não sabia era que essa pergunta é realmente sobre cartão SD. Então, sim, eu realmente confundi algumas coisas. Bem, estritamente falando, você também pode formatar seu cartão SD como ext, para que isso se aplique às pessoas que fazem isso.
Lie Ryan
1
Ponto tomado. Embora o "usuário médio" (ou o "em dúvida") possa se ater melhor ao FAT, pelo menos para interoperabilidade. Pelo menos até que o ExtFS seja suportado na maioria dos sistemas operacionais com facilidade e, por padrão, sem a necessidade de drivers adicionais (acho que o Windows é e continuará sendo uma armadilha aqui, como sempre).
Izzy
1
Obrigado por esta resposta, acho que é o que eu preciso. Eu tenho um erro no umount, você tem que ser root?
Organic Marble
1
@OrganicMarble sim, é claro - para todos os comandos acima, ou você não obtém acesso aos dispositivos (tudo começando com /dev) dessa maneira.
Izzy
3

obrigado por isso, salva o meu dia :)

root@android:/ # mount | grep -i sdcard
/dev/block/nandk /mnt/sdcard vfat rw,relatime,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0

root@android:/ # /system/bin/fsck_msdos -y /dev/block/nandk
júnior
fonte
Obrigado por postar esta resposta, me ajudou tremendamente. Pela resposta aceita, eu não sabia como consertar um sistema de arquivos vfat. Votado.
Organic Marble
2

Se houver repetidamente erros no seu cartão SD, verifique se ele possui realmente a capacidade declarada usando o H2testw (link apenas em alemão, software em alemão e inglês. Acredito que este seja o lar oficial, apesar das aparências em contrário). Cartões SD ruins serão corrompidos automaticamente.

Code Bling
fonte
Obrigado pelo voto positivo nesta resposta há muito esquecida. Provavelmente deveria ser um comentário, mas eu provavelmente não tinha a reputação disso na época. Deixarei isso aqui por enquanto até que o comentário seja votado e fique visível.
Code Bling
Votei seu comentário com sucesso.
Inesquecívelid
@unforgettableid Obrigado, só quero ter certeza de que todos saibam sobre esse risco. É realmente péssimo perder dados.
Código Bling
OK, agora que o comentário foi votado, você pode excluir esta resposta. :)
inesquecível
@unforgettableid vai deixar tanto para agora, para a visibilidade
Código Bling
0

Se não me engano, você pode forçar o android a fsck o armazenamento interno e externo na reinicialização, fazendo o seguinte, dependendo da sua ROM.

execute o aplicativo terminal e digite

su
touch /forcefsck

Então reinicie.

Se o seu telefone não estiver enraizado, isso definitivamente falhará.

fonte: http://forum.xda-developers.com/showpost.php?p=57027579&postcount=20

Trekeyus
fonte
O que você quer dizer com "dependendo da sua ROM"?
Inesquecívelid
Esse truque pode não funcionar em todos os telefones. telefones diferentes podem deixar de fazer qualquer coisa. Além disso, seu telefone precisa estar enraizado.
Trekeyus
Depois de reiniciar, como posso saber se fsckrealmente foi executado ou não?
Inesquecível
1
-1. Eu diminuí o voto da sua postagem. Eis o motivo: passei mais tempo investigando o assunto. Sua técnica sugerida provavelmente está 100% errada. Isso pode induzir os leitores a pensar que isso ajuda, mas a técnica realmente não faz nada.
Inesquecível
2
touch /forcefsckfuncionará apenas em um dispositivo com um script init que verifique a presença de um /forcefsckarquivo. Não conheço um único dispositivo Android que tenha esse script de inicialização. Portanto, embora sua técnica provavelmente funcione em dispositivos Debian, Ubuntu e Mint, duvido muito que funcione em qualquer dispositivo Android. Se alguém encontrar um único dispositivo Android com um script init que verifique /forcefsck, informe-me! Basta responder a este comentário.
Inesquecível