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
gpuguy
źródło
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.

Graeme
źródło
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.

Zrin
źródło
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>
Kevin
źródło
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.

Sibaz
źródło
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
Charles Nakhel
źródło
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