montaggio mmcblk0p1 non riuscito con argomento non valido


9

Quando eseguo Linux dalla scheda SD e provo a montare la scheda SD, nessun problema, funziona bene. Ma quando eseguo Linux dalla memoria flash non riesco a montare la mia scheda SD:

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

Quale potrebbe essere la ragione di base di questo errore?

Informazioni addizionali

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

1
Prova il comando completo ( -t ...) in modo che la fstabvoce non venga utilizzata.
Hauke ​​Laging,

1
Viene scritto qualcosa di utile /var/log/messages? Che ne dici dmesg | tail?
Flup,

@Flup ho aggiornato la mia domanda sopra
gpuguy

4
mount -t /dev/mmcblk0p1 /mntnon è un comando completo. Se conosci il tipo filesytem, ​​dovresti specificarlo dopo l'argomento -t (es. mount -t vfat /dev/mmcblk0p1 /mnt) O omettere completamente -t.
James Hebden,

omettere non ha funzionato come puoi vedere sopra
gpuguy,

Risposte:


10

Come commentato da goldilocks , si mount -taspetta che il tipo di filesystem venga dopo -t, quindi non funzionerà. Altrimenti sembra che devi solo specificare il tipo di filesystem. Se non conosci il tipo di filesystem, allora c'è una lista di metodi da scoprire in questa risposta . Se il filecomando è disponibile, questo è probabilmente il metodo migliore. Come root dovresti fare:

file -s /dev/mmcblk0p1

Si noti inoltre che se il tipo di filesystem non è elencato in /proc/filesystems, allora il driver non è compilato nel kernel e quindi deve essere disponibile come modulo esterno. Una volta che hai il tipo corretto, puoi provare:

mount -t correct_type /dev/mmcblk0p1 /mnt

Come ultimo pensiero, assicurati anche che la /mntdirectory esista! In caso contrario, crearlo con mkdir /mnt.


monta richiede sudo?
Ferroao,

@Ferroao, sì, il montaggio richiede i privilegi di root.
Graeme,

se devo modificare, creare file in quel SD avrò bisogno di sudo?
Ferroao,

@Ferroao, dipende dal filesystem che stai cercando di montare. Per i filesystem Linux i permessi / proprietario / gruppo su ogni file / directory determinano chi può leggere / scrivere.
Graeme,

3

Ragioni di base: (aggiornato)

1) Il tuo sistema non si inizializza (correttamente?) O non riconosce la SD quando si avvia da flash. Esiste il /dev/mmcblk0dispositivo dopo l'avvio dal flash? Cosa fdisk -l /dev/mmcblk0dice?

2) Non esiste un file system su / dev / mmcblk0p1, è necessario prima creare un file system ( mkfs ...). Controllare confile -s /dev/mmcblk0p1

3) Il file system su / dev / mmcblk0p1 è danneggiato, è necessario controllarlo / ripararlo, provare fsck /dev/mmcblk0p1o crearne uno nuovo

4) Il tuo kernel (durante l'avvio dal flash) non ha il driver del file di sistema necessari, controllare cat /proc/filesystemse ls "/lib/modules/$(uname -r)/kernel/fs/"vedere se questo elenco contiene il tipo di file di sistema necessari. In genere, i kernel più vecchi non supportano ext4, mentre il tuo sistema operativo potrebbe già disporre di strumenti per creare un file system ext4.

5) Difetto hardware: potrebbe essere la scheda SD, il controller, il cablaggio ... ma se funziona all'avvio dalla scheda SD, molto probabilmente non è così.


Si noti che i filesystem elencati in /proc/filesystemssono solo quelli che sono compilati nel kernel. Ad esempio my /proc/filesystemsnon contiene vfat, ma posso ancora montare un vfatsistema poiché è disponibile come modulo.
Graeme,

Sembra buono, anche se l'OP potrebbe dover solo specificare il tipo. Il util-linuxmount tenta di identificare il filesystem tramite blkidquindi tenta tutto in /etc/filesystemso /proc/filesystem. Penso che questo sia il busyboxsupporto, quindi probabilmente fa di meno. O probabilmente perderebbe un filesystem flash specializzato.
Graeme

2

Prima controlla i file system supportati nel kernel.

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

Presumo che tu stia provando a montare la stessa scheda SD da cui stai eseguendo Linux. In tal caso, presumo, abbastanza ragionevolmente, che abbia il supporto del file system nativo in Linux. Per essere sicuro di aver caricato il driver della scheda SD, puoi provare,

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

Ora prova a leggere l'accesso alle partizioni:

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

In alternativa:

$ sudo fdisk -l /dev/mmcblk

fdisk ti dirà anche i tipi di partizione.

Questo ti assicura che il driver della scheda SD può accedere al dispositivo a blocchi. Ora puoi eseguire partedper stampare i file system:

$ 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 volta che conosci il FS, montalo con

$ sudo mount -t <FS> /dev/mmcblkpX </target/dir>

Sei sicuro di questo? parted è in grado di analizzare la firma per quanto posso ricordare. fdisk scarica semplicemente il tipo di partizione.
Kevin,

Ok, hai ragione, partedcerca di determinare il tipo di filesystem. Commento rimosso.
Graeme,

-1

Mi sembra di ricordare che questo è l'errore che si ottiene quando il tipo di partizione che si sta tentando di montare non è supportato.


Se sai qual è il tipo di partizione, controlla che la funzione fsck appropriata sia in / sbin e che i moduli appropriati siano nel kernel (/ proc / modules)
sibaz,

non conosco il tipo di partizione. c'è qualche comando per trovare il tipo di partizione? Ma ho visto / proc / modules - è vuoto
gpuguy il

Se hai root questo sarà molto più semplice, ma se, come penso, lo stai facendo su Android, stai cercando blkid, se no, ed è un ambiente Linux più convenzionale, lsblkè probabilmente preferibile.
Mikeserv,

Domani controllerò lsblk, ma perché / proc / modules è vuoto.
gpuguy,

Come puoi saperlo ed essere ancora a un giorno intero dalla digitazione di 5 lettere al tuo prompt?
Mikeserv,

-1

Forse devi usare (comando parted) a causa delle dimensioni della partizione:

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

Per assicurarsi che la partizione sia stata creata correttamente, utilizzare /sbin/parted /dev/mmcblk0p1 print”

Quindi devi formattare la partizione creata

/sbin/mkfs -t correct_type /dev/mmcblk0p1

2
L'utilizzo di partedon /dev/mmcblk0p1creerà una tabella delle partizioni su una partizione di un dispositivo che è già stata partizionata. Inoltre, seguendo queste istruzioni verranno cancellati tutti i dati sul dispositivo .
Graeme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.