montagem mmcblk0p1 falhou com argumento inválido

9

Quando estou executando o linux a partir do cartão SD e tento montar o cartão SD - sem problemas, funciona bem. Mas quando estou executando o Linux a partir da memória flash, não consigo montar meu cartão SD:

# mount /dev/mmcblk0p1 /mnt/ 
mount: mounting /dev/mmcblk0p1 on /mnt/ failed: Invalid argument

Qual poderia ser o motivo básico desse erro?

Informação adicional

root@Xilinx-ZC702-14_7:/# mount -t /dev/mmcblk0p1 /mnt
mount: can't find /mnt in /etc/fstab 

root@Xilinx-ZC702-14_7:/var/volatile/log# ls
wtmp

root@Xilinx-ZC702-14_7:/var/volatile/log# dmesg
dmesg: klogctl: Function not implemented
gpuguy
fonte
1
Por favor, tente o comando completo ( -t ...) para que a fstabentrada não seja usada.
Hauke ​​Laging
1
Alguma coisa útil é escrita /var/log/messages? Que tal dmesg | tail?
Flup
@Flup eu atualizei a minha pergunta acima
gpuguy
4
mount -t /dev/mmcblk0p1 /mntnão é um comando completo. Se você conhece o tipo de sistema de arquivos, especifique-o após o argumento -t (por exemplo mount -t vfat /dev/mmcblk0p1 /mnt) ou omita -t completamente.
precisa
omitir não funcionou como você pode ver acima
gpuguy 26/03

Respostas:

10

Conforme comentado por goldilocks , mount -tespera que o tipo de sistema de arquivos venha depois -t, para que não funcione. Caso contrário, parece que você só precisa especificar o tipo de sistema de arquivos. Se você não conhece o tipo de sistema de arquivos, há uma lista de métodos para descobrir nesta resposta . Se o filecomando estiver disponível, este é provavelmente o melhor método. Como root você faria:

file -s /dev/mmcblk0p1

Observe também que, se o tipo de sistema de arquivos não estiver listado /proc/filesystems, o driver não será compilado no kernel e, portanto, deverá estar disponível como um módulo externo. Depois de ter o tipo correto, você pode tentar:

mount -t correct_type /dev/mmcblk0p1 /mnt

Como pensamento final, verifique também se o /mntdiretório existe! Caso contrário, crie-o com mkdir /mnt.

Graeme
fonte
montagens requer sudo?
Ferroao 08/04
@Ferroao, sim, a montagem requer privilégios de root.
Graeme
se eu precisar modificar, crie arquivos nesse sd, precisarei do sudo?
Ferroao 08/04
@Ferroao, isso depende do sistema de arquivos que você está tentando montar. Para sistemas de arquivos Linux, as permissões / owner / group em cada arquivo / diretório determinam quem pode ler / gravar.
Graeme
3

Razões básicas: (atualizado)

1) Seu sistema não inicializa (corretamente?) Ou não reconhece o SD ao inicializar a partir do flash. Existe o /dev/mmcblk0dispositivo após a inicialização do flash? O que fdisk -l /dev/mmcblk0diz?

2) Não existe um sistema de arquivos em / dev / mmcblk0p1, você precisa primeiro criar um sistema de arquivos ( mkfs ...). Verificar comfile -s /dev/mmcblk0p1

3) O sistema de arquivos em / dev / mmcblk0p1 está corrompido, é necessário verificar / reparar, tentar fsck /dev/mmcblk0p1ou criar um novo

4) Seu kernel (ao inicializar a partir do flash) não possui o driver do sistema de arquivos necessário, verifique cat /proc/filesystemse verifique ls "/lib/modules/$(uname -r)/kernel/fs/"se essa lista contém o tipo de sistema de arquivos necessário. Normalmente, os kernels mais antigos não suportam ext4, enquanto o seu sistema operacional já pode ter ferramentas para criar um sistema de arquivos ext4.

5) Defeito de hardware - pode ser o cartão SD, o controlador, a fiação ... mas se funcionar ao inicializar a partir do cartão SD, provavelmente não é esse o caso.

Zrin
fonte
Observe que os sistemas de arquivos listados em /proc/filesystemssão apenas os que são compilados no kernel. Por exemplo, o meu /proc/filesystemsnão contém vfat, mas ainda posso montar um vfatsistema, pois ele está disponível como um módulo.
Graeme
Parece bom, embora o OP precise apenas especificar o tipo. A util-linuxmontagem tenta identificar o sistema de arquivos via, em blkidseguida, tenta tudo em /etc/filesystemsou /proc/filesystem. Eu acho que esse é o busyboxmonte, então provavelmente faz menos. Qualquer um dos dois provavelmente sentiria falta de um sistema de arquivos flash especializado.
Graeme
2

Primeiro, verifique os sistemas de arquivos suportados no kernel.

[kevin@hexcore ~]
$ cat /proc/filesystems 
....
    ext3
    ext2
    ext4
....

Presumo que você esteja tentando montar o mesmo cartão SD a partir do qual você está executando o Linux. Nesse caso, presumo, razoavelmente, que ele tenha suporte nativo ao sistema de arquivos no Linux. Para garantir que você carregou o driver do cartão SD, tente:

$ sudo modprobe sdhci
$ dmesg | tail -n 10
sdhci: Secure Digital Host Controller Interface driver

Agora, tente o acesso de leitura às partições:

$ sudo dd if=/dev/mmcblk of=/dev/null bs=4k count=0  # note: count = 0

Alternativamente:

$ sudo fdisk -l /dev/mmcblk

fdisk também informará os tipos de partição.

Isso garante que o driver do cartão SD possa acessar o dispositivo de bloqueio. Agora você pode executar partedpara imprimir os sistemas de arquivos:

$ sudo parted /dev/mmcblk
(parted) p
Number  Start   End     Size    Type     File system     Flags
 1      1049kB  8000MB  7999MB  primary  linux-swap(v1)
 2      8000MB  500GB   492GB   primary  ext4

Depois de conhecer o FS, monte-o com

$ sudo mount -t <FS> /dev/mmcblkpX </target/dir>
Kevin
fonte
Você tem certeza sobre isso? O parted pode analisar a assinatura tanto quanto me lembro. O fdisk apenas despeja o tipo de partição.
Kevin
Ok, seu direito, partedtenta determinar o tipo de sistema de arquivos. Comentário removido.
Graeme
-1

Parece que lembro que esse é o erro que você recebe quando o tipo de partição que você está tentando montar não é suportado.

sibaz
fonte
Se você sabe o que o tipo de partição é, verifique o funcionamento fsck apropriada é em / sbin e que os módulos apropriados estão no kernel (/ proc / modules)
sibaz
Eu não sei o tipo de partição. existe algum comando para encontrar o tipo de partição? Mas eu tenho veja / proc / modules - o vazio
gpuguy
Se você possui root, isso será muito mais fácil, mas se, como eu penso, você está fazendo isso no Android, está procurando blkid, se não, e é um ambiente Linux mais convencional, lsblkprovavelmente é preferível.
mikeserv
Vou verificar o lsblk amanhã. Mas por que o / proc / modules está vazio.
gpuguy
Como você pode saber disso e ainda ficar um dia inteiro digitando cinco letras quando solicitado?
mikeserv
-1

Talvez você precise usar (comando partido) devido ao tamanho da partição:

# /sbin/parted /dev/mmcblk0p1
(parted) mklabel gpt
this disk will be lost. Do you want to continue?
Yes/No? yes
....
(parted) quit

Para garantir que a partição seja criada corretamente, use /sbin/parted /dev/mmcblk0p1 print”

Então você tem que formatar a partição criada

/sbin/mkfs -t correct_type /dev/mmcblk0p1
Charles nakhel
fonte
2
Usar partedon /dev/mmcblk0p1criará uma tabela de partição em uma partição de um dispositivo que já foi particionado. Além disso, seguir estas instruções apagará todos os dados no dispositivo .
Graeme