Das Mounten von mmcblk0p1 ist mit einem ungültigen Argument fehlgeschlagen

9

Wenn ich Linux von der SD-Karte aus starte und versuche, die SD-Karte zu mounten - kein Problem, funktioniert das einwandfrei. Aber wenn ich Linux aus dem Flash-Speicher laufen lasse, kann ich meine SD-Karte nicht mounten:

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

Was könnte der Hauptgrund für diesen Fehler sein?

Zusätzliche Information

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
quelle
1
Bitte versuchen Sie den vollständigen Befehl ( -t ...), damit der fstabEintrag nicht verwendet wird.
Hauke ​​Laging
1
Wird etwas Nützliches geschrieben /var/log/messages? Wie wäre es dmesg | tail?
Flup
@Flup Ich habe meine Frage oben aktualisiert
gpuguy
4
mount -t /dev/mmcblk0p1 /mntist kein vollständiger Befehl. Wenn Sie den Dateisystemtyp kennen, sollten Sie ihn nach dem Argument -t (z. B. mount -t vfat /dev/mmcblk0p1 /mnt) angeben oder -t vollständig weglassen.
James Hebden
Auslassen hat nicht funktioniert, wie Sie oben sehen können
gpuguy

Antworten:

10

Wie von goldilocks kommentiert , wird mount -terwartet , dass der Dateisystemtyp nachkommt -t, sodass er nicht funktioniert. Andernfalls müssen Sie lediglich den Dateisystemtyp angeben. Wenn Sie den Dateisystemtyp nicht kennen, finden Sie in dieser Antwort eine Liste von Methoden, die Sie herausfinden können . Wenn der fileBefehl verfügbar ist, ist dies wahrscheinlich die beste Methode. Als Wurzel würden Sie tun:

file -s /dev/mmcblk0p1

Beachten Sie auch, dass /proc/filesystemsder Treiber nicht in den Kernel kompiliert wird und daher als externes Modul verfügbar sein muss , wenn der Dateisystemtyp nicht in aufgeführt ist. Sobald Sie den richtigen Typ haben, können Sie versuchen:

mount -t correct_type /dev/mmcblk0p1 /mnt

Stellen Sie abschließend auch sicher, dass das /mntVerzeichnis vorhanden ist! Wenn nicht, erstellen Sie es mit mkdir /mnt.

Graeme
quelle
Reittiere erfordert Sudo?
Ferroao
@Ferroao, ja für das Mounten sind Root-Rechte erforderlich.
Graeme
Wenn ich etwas ändern muss, erstelle ich Dateien in dieser SD. Benötige ich Sudo?
Ferroao
@Ferroao, das hängt vom Dateisystem ab, das Sie bereitstellen möchten. Für Linux-Dateisysteme bestimmen die Berechtigungen / Eigentümer / Gruppe für jede Datei / jedes Verzeichnis, wer lesen / schreiben kann.
Graeme
3

Grundlegende Gründe: (aktualisiert)

1) Ihr System initialisiert die SD nicht (richtig?) Oder erkennt sie beim Booten von Flash nicht. Gibt es das /dev/mmcblk0Gerät nach dem Booten von Flash? Was fdisk -l /dev/mmcblk0sagt das aus?

2) Unter / dev / mmcblk0p1 befindet sich kein Dateisystem. Sie müssen zuerst ein Dateisystem erstellen ( mkfs ...). Überprüfen Sie mitfile -s /dev/mmcblk0p1

3) Das Dateisystem unter / dev / mmcblk0p1 ist beschädigt. Sie müssen es überprüfen / reparieren, versuchen fsck /dev/mmcblk0p1oder ein neues erstellen

4) Ihr Kernel (wenn das Booten von Flash) nicht die benötigten Dateisystemtreiber haben, prüfen cat /proc/filesystemsund ls "/lib/modules/$(uname -r)/kernel/fs/"sehen , ob die Liste der benötigten Dateisystemtyp enthält. In der Regel unterstützen ältere Kernel ext4 nicht, während Ihr Betriebssystem möglicherweise bereits über Tools zum Erstellen eines ext4-Dateisystems verfügt.

5) Hardwarefehler - könnte die SD-Karte, der Controller, die Verkabelung sein ... aber wenn es beim Booten von der SD-Karte funktioniert, ist dies höchstwahrscheinlich nicht der Fall.

Zrin
quelle
Beachten Sie, dass die in aufgelisteten Dateisysteme /proc/filesystemsnur diejenigen sind, die in den Kernel kompiliert wurden. Zum Beispiel enthält mein /proc/filesystemsnicht vfat, aber ich kann trotzdem ein vfatSystem mounten , da es als Modul verfügbar ist.
Graeme
Sieht gut aus, obwohl das OP möglicherweise nur den Typ angeben muss. Der util-linuxMount versucht, das Dateisystem zu identifizieren, indem er blkiddann alles in /etc/filesystemsoder versucht /proc/filesystem. Ich denke, das ist das busyboxReittier, also macht es wahrscheinlich weniger. Beides würde wahrscheinlich ein spezielles Flash-Dateisystem vermissen.
Graeme
2

Überprüfen Sie zunächst die im Kernel unterstützten Dateisysteme.

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

Ich gehe davon aus, dass Sie versuchen, dieselbe SD-Karte zu mounten, auf der Sie Linux ausführen. Wenn ja, gehe ich davon aus, dass es unter Linux native Dateisystemunterstützung bietet. Um sicherzustellen, dass Sie den SD-Kartentreiber geladen haben, können Sie Folgendes versuchen:

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

Versuchen Sie nun, den Lesezugriff auf Partitionen zu lesen:

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

Alternative:

$ sudo fdisk -l /dev/mmcblk

fdisk Hier erfahren Sie auch die Partitionstypen.

Dies stellt sicher, dass der SD-Kartentreiber auf das Blockgerät zugreifen kann. Jetzt können Sie parteddie Dateisysteme drucken:

$ 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

Wenn Sie den FS kennen, montieren Sie ihn mit

$ sudo mount -t <FS> /dev/mmcblkpX </target/dir>
Kevin
quelle
Bist du dir da sicher? parted kann die Unterschrift analysieren, soweit ich mich erinnern kann. fdisk gibt nur den Partitionstyp aus.
Kevin
Ok, Ihr Recht, partedversucht den Dateisystemtyp zu bestimmen. Kommentar entfernt.
Graeme
-1

Ich scheine mich zu erinnern, dass dies der Fehler ist, den Sie erhalten, wenn der Partitionstyp, den Sie bereitstellen möchten, nicht unterstützt wird.

Sibaz
quelle
Wenn Sie wissen, was der Partitionstyp ist, überprüfen Sie, ob sich die entsprechende fsck-Funktion in / sbin befindet und ob sich die entsprechenden Module im Kernel befinden (/ proc / modules)
sibaz
Ich kenne den Partitionstyp nicht. Gibt es einen Befehl, um den Partitionstyp zu finden? Aber ich habe / proc / modules - es ist leer
gpuguy
Wenn Sie Root haben, wird dies viel einfacher sein, aber wenn Sie dies, wie ich glaube, auf Android tun, suchen Sie blkid, wenn nicht, und es lsblkist wahrscheinlich eine konventionellere Linux-Umgebung, die vorzuziehen ist.
Mikeserv
Ich werde lsblk morgen überprüfen. Aber warum ist / proc / modules leer.
Gpuguy
Wie können Sie das wissen und trotzdem einen ganzen Tag davon entfernt sein, 5 Buchstaben an Ihrer Eingabeaufforderung einzugeben?
Mikeserv
-1

Möglicherweise müssen Sie (Teilbefehl) aufgrund der Partitionsgröße verwenden:

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

Um sicherzustellen, dass die Partition ordnungsgemäß erstellt wurde, verwenden Sie /sbin/parted /dev/mmcblk0p1 print”

Dann müssen Sie die erstellte Partition formatieren

/sbin/mkfs -t correct_type /dev/mmcblk0p1
Charles Nakhel
quelle
2
Mit partedon /dev/mmcblk0p1wird eine Partitionstabelle auf einer Partition eines Geräts erstellt, das bereits partitioniert wurde. Wenn Sie diese Anweisungen befolgen, werden auch alle Daten auf dem Gerät gelöscht .
Graeme