el montaje mmcblk0p1 falló con un argumento no válido

9

Cuando estoy ejecutando Linux desde la tarjeta SD e intento montar la tarjeta SD, no hay problema, funciona bien. Pero cuando estoy ejecutando Linux desde la memoria flash no puedo montar mi tarjeta SD:

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

¿Cuál podría ser la razón básica de este error?

Información 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
fuente
1
Intente con el comando completo ( -t ...) para que fstabno se use la entrada.
Hauke ​​Laging
1
¿Hay algo útil escrito /var/log/messages? ¿Qué tal dmesg | tail?
Flup
@Flup, actualicé mi pregunta anterior
gpuguy
44
mount -t /dev/mmcblk0p1 /mntNo es un comando completo. Si conoce el tipo de sistema de archivos, debe especificarlo después del argumento -t (por ejemplo mount -t vfat /dev/mmcblk0p1 /mnt) u omitir -t por completo.
James Hebden
omitir no funcionó como puede ver arriba
gpuguy

Respuestas:

10

Como comentó goldilocks , mount -tespera que el tipo de sistema de archivos venga después -t, por lo que no funcionará. De lo contrario, parece que solo necesita especificar el tipo de sistema de archivos. Si no conoce el tipo de sistema de archivos, hay una lista de métodos para averiguar en esta respuesta . Si el filecomando está disponible, este es probablemente el mejor método. Como root harías:

file -s /dev/mmcblk0p1

Tenga en cuenta también que si el tipo de sistema de archivos no figura en la lista /proc/filesystems, entonces el controlador no se compila en el núcleo y, por lo tanto, debe estar disponible como un módulo externo. Una vez que tenga el tipo correcto, puede intentar:

mount -t correct_type /dev/mmcblk0p1 /mnt

Como pensamiento final, también asegúrese de que /mntexista el directorio. Si no, créalo con mkdir /mnt.

Graeme
fuente
montajes requiere sudo?
Ferroao
@Ferroao, sí, el montaje requiere privilegios de root.
Graeme
si necesito modificar, crear archivos en ese sd, ¿necesitaré sudo?
Ferroao
@Ferroao, eso depende del sistema de archivos que está intentando montar. Para los sistemas de archivos de Linux, los permisos / propietario / grupo en cada archivo / directorio determinan quién puede leer / escribir.
Graeme
3

Razones básicas: (actualizado)

1) Su sistema no se inicializa (¿correctamente?) O no reconoce la SD al arrancar desde flash. ¿Existe el /dev/mmcblk0dispositivo después de arrancar desde flash? Que fdisk -l /dev/mmcblk0dice

2) No hay un sistema de archivos en / dev / mmcblk0p1, primero debe crear un sistema de archivos ( mkfs ...). Verifícalo confile -s /dev/mmcblk0p1

3) El sistema de archivos en / dev / mmcblk0p1 está dañado, debe verificarlo / repararlo, intentarlo fsck /dev/mmcblk0p1o crear uno nuevo

4) Su núcleo (cuando se arrancan desde flash) no tiene el controlador de sistema de archivo necesario, comprobar cat /proc/filesystemsy ls "/lib/modules/$(uname -r)/kernel/fs/"ver si la lista contiene el tipo de sistema de archivos necesarios. Por lo general, los núcleos más antiguos no son compatibles con ext4, mientras que su sistema operativo ya puede tener herramientas para crear un sistema de archivos ext4.

5) Defecto de hardware: podría ser la tarjeta SD, el controlador, el cableado ... pero si funciona al arrancar desde la tarjeta SD, probablemente este no sea el caso.

Zrin
fuente
Tenga en cuenta que los sistemas de archivos enumerados /proc/filesystemsson solo los que se compilan en el núcleo. Por ejemplo, my /proc/filesystemsno contiene vfat, pero aún puedo montar un vfatsistema ya que está disponible como módulo.
Graeme
Se ve bien, aunque el OP puede que solo tenga que especificar el tipo. El util-linuxmontaje intenta identificar el sistema de archivos a través de y blkidluego intenta todo en /etc/filesystemso /proc/filesystem. Creo que este es el busyboxmontaje, por lo que probablemente haga menos. Cualquiera de los dos probablemente perdería un sistema de archivos flash especializado.
Graeme
2

Primero verifique los sistemas de archivos admitidos en el núcleo.

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

Supongo que está intentando montar la misma tarjeta SD desde la que está ejecutando Linux. Si es así, supongo, bastante razonablemente, que tiene soporte de sistema de archivos nativo en Linux. Para asegurarse de haber cargado el controlador de la tarjeta SD, puede intentar,

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

Ahora, intente acceso de lectura a particiones:

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

Alternativamente:

$ sudo fdisk -l /dev/mmcblk

fdisk también le dirá los tipos de partición.

Esto le asegura que el controlador de la tarjeta SD puede acceder al dispositivo de bloque. Ahora puede ejecutar partedpara imprimir los sistemas de archivos:

$ 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

Una vez que conozca el FS, móntelo con

$ sudo mount -t <FS> /dev/mmcblkpX </target/dir>
Kevin
fuente
¿Estás seguro de eso? Parted puede analizar la firma tan bien como puedo recordar. fdisk simplemente voltea el tipo de partición.
Kevin
Ok, su derecho, partedtrata de determinar el tipo de sistema de archivos. Comentario eliminado
Graeme
-1

Creo recordar que este es el error que obtienes cuando el tipo de partición que estás intentando montar no es compatible.

sibaz
fuente
Si sabe cuál es el tipo de partición, verifique que la función fsck apropiada esté en / sbin y que los módulos apropiados estén en el núcleo (/ proc / modules)
sibaz
No sé el tipo de partición. ¿Hay algún comando para encontrar el tipo de partición? Pero he visto / proc / modules - está vacío
gpuguy
Si tiene root, esto será mucho más fácil, pero si, como creo que lo está haciendo, está haciendo esto en Android, está buscando blkid, si no, y lsblkes probablemente un entorno Linux más convencional .
mikeserv
Comprobaré lsblk mañana. Pero por qué está / proc / modules vacío.
gpuguy
¿Cómo puede saber eso y aún estar todo un día lejos de escribir 5 letras en su mensaje?
mikeserv
-1

Tal vez necesite usar (comando dividido) debido al tamaño de la partición:

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

Para asegurarse de que la partición se haya creado correctamente, use /sbin/parted /dev/mmcblk0p1 print”

Luego tienes que formatear la partición creada

/sbin/mkfs -t correct_type /dev/mmcblk0p1
Charles nakhel
fuente
2
El uso de partedon /dev/mmcblk0p1creará una tabla de partición en una partición de un dispositivo que ya ha sido particionado. Además, seguir estas instrucciones borrará todos los datos del dispositivo .
Graeme