montaż mmcblk0p1 nie powiódł się z nieprawidłowym argumentem


9

Kiedy uruchamiam Linux z karty SD i próbuję zamontować kartę SD - brak problemu, działa dobrze. Ale kiedy korzystam z systemu Linux z pamięci flash, nie mogę zamontować karty SD:

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

Co może być podstawową przyczyną tego błędu?

Dodatkowe informacje

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
Spróbuj wykonać pełną komendę ( -t ...), aby fstabwpis nie był używany.
Hauke ​​Laging

1
Czy zapisuje się coś przydatnego /var/log/messages? Jak o dmesg | tail?
Flup

@ Flup zaktualizowałem moje pytanie powyżej
gpuguy

4
mount -t /dev/mmcblk0p1 /mntnie jest kompletnym poleceniem. Jeśli znasz typ pliku file, powinieneś go podać po argumencie -t (np. mount -t vfat /dev/mmcblk0p1 /mnt) Lub całkowicie pominąć -t.
James Hebden

pominięcie nie działało, jak widać powyżej
gpuguy

Odpowiedzi:


10

Jak skomentował goldilocks , mount -toczekuje , że typ systemu plików pojawi się później -t, więc nie będzie działać. W przeciwnym razie wygląda na to, że wystarczy określić typ systemu plików. Jeśli nie znasz typu systemu plików, w tej odpowiedzi znajduje się lista metod . Jeśli filepolecenie jest dostępne, jest to prawdopodobnie najlepsza metoda. Jako root zrobiłbyś:

file -s /dev/mmcblk0p1

Zauważ również, że jeśli typ systemu plików nie znajduje się na liście /proc/filesystems, sterownik nie jest wkompilowany w jądro i dlatego musi być dostępny jako moduł zewnętrzny. Gdy masz odpowiedni typ, możesz spróbować:

mount -t correct_type /dev/mmcblk0p1 /mnt

Na koniec upewnij się, że /mntkatalog istnieje! Jeśli nie, utwórz go za pomocą mkdir /mnt.


mounts wymaga sudo?
Ferroao

@ Ferroao, tak, montaż wymaga uprawnień roota.
Graeme,

jeśli muszę zmodyfikować, utwórz pliki w tym SD, czy będę potrzebować sudo?
Ferroao

@Ferroao, zależy to od systemu plików, który próbujesz zamontować. W przypadku systemów plików Linux uprawnienia / właściciel / grupa w każdym pliku / katalogu określ, kto może czytać / zapisywać.
Graeme

3

Podstawowe powody: (zaktualizowano)

1) Twój system nie inicjuje (poprawnie?) Lub nie rozpoznaje karty SD podczas uruchamiania z pamięci flash. Czy istnieje /dev/mmcblk0urządzenie po uruchomieniu z pamięci flash? Co fdisk -l /dev/mmcblk0mówi

2) Nie ma systemu plików na / dev / mmcblk0p1, musisz najpierw utworzyć system plików ( mkfs ...). Sprawdź zfile -s /dev/mmcblk0p1

3) System plików na / dev / mmcblk0p1 jest uszkodzony, musisz go sprawdzić / naprawić, wypróbować fsck /dev/mmcblk0p1lub utworzyć nowy

4) Twój jądra (podczas bootowania z pamięci flash) nie ma potrzebnego sterownika systemu plików, sprawdź cat /proc/filesystemsi ls "/lib/modules/$(uname -r)/kernel/fs/"i sprawdzić, czy lista zawiera potrzebne typ systemu plików. Zazwyczaj starsze jądra nie obsługują ext4, podczas gdy twój system operacyjny może już mieć narzędzia do tworzenia systemu plików ext4.

5) Wada sprzętowa - może to być karta SD, kontroler, okablowanie ... ale jeśli działa podczas uruchamiania z karty SD, najprawdopodobniej tak nie jest.


Zauważ, że wymienione systemy plików /proc/filesystemsto tylko te, które są wkompilowane w jądro. Na przykład mój /proc/filesystemsnie zawiera vfat, ale nadal mogę zamontować vfatsystem, ponieważ jest on dostępny jako moduł.
Graeme

Wygląda dobrze, chociaż OP może po prostu określić typ. util-linuxZamontować próbuje zidentyfikować plików poprzez blkidspróbuje wszystkiego w /etc/filesystemslub /proc/filesystem. Myślę, że to jest busyboxwierzchowiec, więc prawdopodobnie robi mniej. Oba prawdopodobnie przegapiłyby specjalistyczny system plików flash.
Graeme

2

Najpierw sprawdź systemy plików obsługiwane w jądrze.

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

Zakładam, że próbujesz zamontować tę samą kartę SD, z której działa Linux. Jeśli tak, zakładam, całkiem rozsądnie, że ma on obsługę natywnego systemu plików w systemie Linux. Aby upewnić się, że załadowałeś sterownik karty SD, możesz spróbować,

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

Teraz spróbuj uzyskać dostęp do odczytu partycji:

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

Alternatywnie:

$ sudo fdisk -l /dev/mmcblk

fdisk powie ci również typy partycji.

Zapewnia to, że sterownik karty SD może uzyskać dostęp do urządzenia blokowego. Teraz możesz uruchomić, partedaby wydrukować systemy plików:

$ 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

Kiedy poznasz FS, zamontuj go

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

Jesteś pewien? parted może analizować podpis, o ile dobrze pamiętam. fdisk po prostu zrzuca typ partycji.
Kevin

Ok, masz rację, partedpróbuje określić typ systemu plików. Komentarz usunięty.
Graeme

-1

Wydaje mi się, że pamiętam ten błąd, który pojawia się, gdy typ partycji, którą próbujesz zamontować, nie jest obsługiwany.


Jeśli wiesz, co typ partycji, zaznacz odpowiednią funkcję fsck jest w / sbin i że odpowiednie moduły są w jądrze (/ proc / modules)
sibaz

nie znam typu partycji. czy jest jakieś polecenie, aby znaleźć typ partycji? Ale widzę / proc / moduły - jest puste
gpuguy

Jeśli masz root, będzie to o wiele łatwiejsze, ale jeśli tak myślę, robisz to na Androidzie, szukasz blkid, jeśli nie, i jest to bardziej konwencjonalne środowisko Linux, lsblkprawdopodobnie jest lepsze.
mikeserv

Jutro sprawdzę lsblk, ale dlaczego / proc / modules jest pusty.
gpuguy

Skąd możesz o tym wiedzieć i nadal być cały dzień z dala od wpisywania 5 liter po znaku zachęty?
mikeserv

-1

Być może trzeba użyć polecenia (parted) ze względu na rozmiar partycji:

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

Aby upewnić się, że partycja jest poprawnie utworzona, użyj /sbin/parted /dev/mmcblk0p1 print”

Następnie musisz sformatować utworzoną partycję

/sbin/mkfs -t correct_type /dev/mmcblk0p1

2
Użycie opcji partedon /dev/mmcblk0p1spowoduje utworzenie tabeli partycji na partycji urządzenia, które zostało już podzielone na partycje. Postępowanie zgodnie z tymi instrukcjami spowoduje również usunięcie wszystkich danych z urządzenia .
Graeme
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.