Meu cartão SD tem uma partição, mas o Linux não cria uma entrada de dispositivo para a partição

1

OK, eu não sei o que está acontecendo aqui, no começo eu achei que era um problema que eu lembro de ter algum tempo atrás, onde eu não consegui montar uma partição vfat porque ela tinha algum sinalizador que não tinha sido limpo removido. Eu lembro que havia uma maneira de consertar isso, mas não consigo encontrá-lo agora. De qualquer forma, eu não acho que é o problema aqui, e eu tenho procurado por alguns dias sem sorte.

Este é um cartão SDHC (32GB) que eu uso para uma das minhas câmeras (eu tenho outro cartão de 32GB que eu usei para outra câmera, com o mesmo adaptador USB, e que funciona bem no linux) para que eu possa ver os arquivos de dentro da câmera não há problema, mas quando eu conecto o adaptador + placa no linux, não consigo aparecer nenhum dispositivo no Konqueror. Então eu tento fazer:

# mount /dev/sdd /d/try/2
mount: you must specify the filesystem type
# mount -t vfat /dev/sdd /media/sdcard
mount: wrong fs type, bad option, bad superblock on /dev/sdd,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

fdisk diz

fdisk -l /dev/sdd

Disk /dev/sdd: 31.9 GB, 31914983424 bytes
255 heads, 63 sectors/track, 3880 cylinders, total 62333952 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            8192    62333951    31162880    c  W95 FAT32 (LBA)

mas

# ls /dev/sdd*
/dev/sdd

Portanto, não há dispositivos / dev / sddX listados, embora fdisk diga que eles existem!   gparted mostra-me a partição / dev / sdd1 sem problemas (mas há 4MB de espaço livre antes disso). Então é aí que eu suspeito que há algo diferente acontecendo. É possível que esse espaço livre esteja causando os problemas? Por que isso? Redimensionar a partição para usar esses 4 mb (como isso aconteceu, no entanto?) Consertar tudo isso? E isso então faria com que os dados de alguma forma agora não possam ser lidos da câmera? Ou pior, irremediavelmente corrompido? Tenho certeza que consegui acessar este cartão antes de dentro do linux, pois acho que até movi alguns arquivos (tem algumas fotos da outra câmera). Então é estranho que eu não consiga acessá-lo agora.

Basicamente, gostaria de saber como corrigir isso (o mais não destrutivamente possível) e o que está causando o problema (para evitá-lo no futuro). Para referência incluímos dmesg output.

# dmesg|tail -30
[3783978.490032] usb 1-5: new high-speed USB device number 44 using ehci_hcd
[3783978.608523] usb 1-5: New USB device found, idVendor=05e3, idProduct=0727
[3783978.608528] usb 1-5: New USB device strings: Mfr=3, Product=4, SerialNumber=2
[3783978.608530] usb 1-5: Product: USB Storage
[3783978.608531] usb 1-5: Manufacturer: Generic
[3783978.608533] usb 1-5: SerialNumber: 000000000207
[3783978.609406] scsi29 : usb-storage 1-5:1.0
[3783979.610445] scsi 29:0:0:0: Direct-Access     Generic  STORAGE DEVICE   0207 PQ: 0 ANSI: 0
[3783979.613096] sd 29:0:0:0: Attached scsi generic sg3 type 0
[3783979.773160] sd 29:0:0:0: [sdd] 62333952 512-byte logical blocks: (31.9 GB/29.7 GiB)
[3783979.774295] sd 29:0:0:0: [sdd] Write Protect is off
[3783979.774300] sd 29:0:0:0: [sdd] Mode Sense: 0b 00 00 08
[3783979.775406] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.775410] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783979.779038] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.779048] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.471143] sd 29:0:0:0: [sdd] Unhandled sense code
[3783981.471147] sd 29:0:0:0: [sdd]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[3783981.471150] sd 29:0:0:0: [sdd]  Sense Key : Medium Error [current] 
[3783981.471153] sd 29:0:0:0: [sdd]  Add. Sense: Data phase CRC error detected
[3783981.471157] sd 29:0:0:0: [sdd] CDB: Read(10): 28 00 00 00 00 00 00 00 08 00
[3783981.471162] end_request: I/O error, dev sdd, sector 0
[3783981.471166] Buffer I/O error on device sdd, logical block 0
[3783981.482542] Dev sdd: unable to read RDB block 0
[3783981.482548]  sdd: unable to read partition table
[3783981.486264] sd 29:0:0:0: [sdd] No Caching mode page present
[3783981.486267] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.486269] sd 29:0:0:0: [sdd] Attached SCSI removable disk
    
por insaner 23.04.2015 / 08:27

3 respostas

1

Alguns avanços, (vou editar esta resposta se / quando encontrar uma solução final adequada). Depois de fazer um backup completo do dispositivo usando o comando dd do @ INDIVIDUAL-IT (acho que usar um bs = 1M tornou a transferência dolorosamente lenta). Eu não consegui montar o arquivo de backup, mas um

# dd if=backup.img of=backup-skip.img bs=1M skip=4

criou um arquivo montável ( backup-skip.img ), e até onde eu poderia dizer, todos os arquivos estavam lá e acessíveis. (ATUALIZAÇÃO: gravar essa imagem removida de volta no cartão SD fez com que ela fosse automaticamente detectada e montada pelo linux, mas não funcionava na câmera.)

Eu carreguei gparted novamente e tentei remover esses 4MB de espaço vazio antes da minha partição, mas isso não foi possível, não permiti que a partição usasse todo o espaço, deixando um mínimo de 1MB sem nenhuma maneira de remover isso (tentei todas as opções para alinhar , mas sem dados).

Por curiosidade, desmarcou a opção lba da partição sdd1. Eu não fui solicitado a confirmar essa alteração, tampouco cliquei em qualquer lugar para confirmar as alterações no dispositivo, mas vi o LED no adaptador piscando e, de repente, havia uma entrada no konqueror para o meu cartão SD. Desmontei, desconectei o dispositivo USB e, em seguida, o conectei novamente, mas o cartão SD não foi autodetectado e voltei à estaca zero. gparted no dispositivo agora informa que lba não está ativado neste dispositivo. Estranho.

Partição detectada!

O nevoeiro levantou um pouco da minha memória graças ao estranho efeito gparted, e então eu corri:

# partprobe

e de repente / dev / sdd1 é criado, e o dispositivo aparece no konqueror! Então, não é uma solução final ainda (desde que você tenha que executar o partprobe, como root, toda vez), mas pelo menos eu posso acessar meus arquivos. Espero que ajude alguém lá fora enquanto descubro uma solução permanente.

    
por 24.04.2015 / 05:50
0

Para mim, parece que sua tabela de partições está um pouco confusa.

  1. faça um backup completo do cartão com dd: dd if=/dev/sdd of=backup.img bs=1M . Se o dd não conseguir copiar o cartão SD, é provável que o hardware esteja quebrado. Você ainda pode tentar a sua sorte com o ddrescue
  2. use TestDisk para tentar recuperar a tabela de partições. Faça a recuperação no arquivo backup.img ou até mesmo um backup do arquivo de backup. Só para ter certeza de que você não está piorando.
  3. Para se livrar dos primeiros 4MB use dd if=backup.img of=backup_striped bs=1M skip=4
  4. se a recuperação fornecer um arquivo montável com todos os arquivos existentes e o fsck não apresentar nenhum erro durante o teste, você poderá gravar o arquivo recuperado no cartão SD. dd if=backup_striped of=/dev/sdd bs=1M verifique se você está escrevendo na unidade correta
  5. se a recuperação da partição falhar, você pode usar o TestDisk para recuperar os arquivos um por um com acima de tudo ou bisturi

Você pode usar o TestDisk para

    
por 23.04.2015 / 14:25
0

De acordo com os logs, o kernel está recebendo um erro do hardware quando tenta ler a tabela de partições imediatamente após a detecção da placa. No entanto, quando você chama partprobe depois, o kernel é capaz de ler a tabela de partição muito bem. Parece que há um erro de hardware ou um erro de driver que faz com que a leitura inicial falhe. Pode ser que o firmware do leitor ou do cartão SD precise de algum tempo para concluir a inicialização e o driver tente ler muito cedo. A solução (menos de mudar o hardware) seria introduzir um atraso no driver.

Como solução alternativa, você pode adicionar uma regra do udev que corresponde ao seu dispositivo e executa um script

#!/bin/sh
sleep 1
partprobe "$DEVNAME"
    
por 24.04.2015 / 08:58