pemasangan mmcblk0p1 gagal dengan argumen yang tidak valid

9

Ketika saya menjalankan linux dari kartu sd dan mencoba me-mount kartu sd -tidak ada masalah, berfungsi dengan baik. Tetapi ketika saya menjalankan linux dari memori flash, saya tidak dapat memasang kartu SD saya:

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

Apa yang bisa menjadi alasan dasar untuk kesalahan ini?

Informasi tambahan

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
sumber
1
Silakan coba perintah lengkap ( -t ...) agar fstabentri tidak digunakan.
Hauke ​​Laging
1
Apakah ada hal berguna yang bisa ditulis /var/log/messages? Bagaimana dengan dmesg | tail?
Flup
@ Flup saya memperbarui pertanyaan saya di atas
gpuguy
4
mount -t /dev/mmcblk0p1 /mntbukan perintah yang lengkap. Jika Anda mengetahui tipe file files, Anda harus menentukannya setelah argumen -t (mis. mount -t vfat /dev/mmcblk0p1 /mnt) Atau menghilangkan -t sepenuhnya.
James Hebden
menghilangkan tidak bekerja seperti yang Anda lihat di atas
gpuguy

Jawaban:

10

Seperti yang dikomentari oleh goldilocks , mount -tmengharapkan tipe sistem file yang akan datang -t, sehingga tidak akan berfungsi. Kalau tidak, sepertinya Anda hanya perlu menentukan jenis sistem file. Jika Anda tidak tahu tipe sistem file, maka ada daftar metode untuk mengetahuinya dalam jawaban ini . Jika fileperintah tersedia, ini mungkin metode terbaik. Sebagai root, Anda akan melakukan:

file -s /dev/mmcblk0p1

Perhatikan juga bahwa jika tipe sistem file tidak ada dalam daftar /proc/filesystems, maka driver tidak dikompilasi ke dalam kernel dan karenanya harus tersedia sebagai modul eksternal. Setelah Anda memiliki jenis yang benar, Anda dapat mencoba:

mount -t correct_type /dev/mmcblk0p1 /mnt

Sebagai pemikiran terakhir, pastikan juga /mntdirektori tersebut ada! Jika tidak membuatnya dengan mkdir /mnt.

Graeme
sumber
tunggangan membutuhkan sudo?
Ferroao
@Ferroao, ya pemasangan membutuhkan hak akses root.
Graeme
jika saya perlu memodifikasi, membuat file di sd itu apakah saya perlu sudo?
Ferroao
@Ferroao, itu tergantung pada sistem file yang Anda coba pasang. Untuk izin sistem berkas Linux / pemilik / grup pada setiap file / direktori, tentukan siapa yang dapat membaca / menulis.
Graeme
3

Alasan dasar: (diperbarui)

1) Sistem Anda tidak (dengan benar?) Menginisialisasi atau tidak mengenali SD saat booting dari flash. Apakah ada /dev/mmcblk0perangkat setelah Anda boot dari flash? Apa yang fdisk -l /dev/mmcblk0dikatakan?

2) Tidak ada sistem file di / dev / mmcblk0p1, Anda harus membuat sistem file terlebih dahulu (mkfs ... ). Periksa denganfile -s /dev/mmcblk0p1

3) Sistem file pada / dev / mmcblk0p1 rusak, Anda perlu memeriksa / memperbaikinya, mencoba fsck /dev/mmcblk0p1, atau membuat yang baru

4) kernel Anda (ketika booting dari flash) tidak memiliki driver sistem file yang dibutuhkan, memeriksa cat /proc/filesystemsdan ls "/lib/modules/$(uname -r)/kernel/fs/"dan melihat apakah daftar yang berisi dibutuhkan jenis file system. Biasanya, kernel yang lebih lama tidak mendukung ext4, sementara OS Anda mungkin sudah memiliki alat untuk membuat sistem file ext4.

5) Cacat perangkat keras - bisa berupa kartu SD, pengontrol, kabel ... tetapi jika berfungsi saat booting dari kartu SD maka ini kemungkinan besar tidak demikian.

Zrin
sumber
Perhatikan bahwa sistem file yang terdaftar /proc/filesystemshanya yang dikompilasi ke dalam kernel. Misalnya saya /proc/filesystemstidak mengandung vfat, tetapi saya masih bisa memasang vfatsistem karena tersedia sebagai modul.
Graeme
Terlihat bagus, meskipun OP mungkin hanya harus menentukan jenisnya. The util-linuxme-mount mencoba untuk mengidentifikasi filesystem melalui blkidupaya maka semuanya di /etc/filesystemsatau /proc/filesystem. Saya pikir ini adalah busyboxmount, jadi mungkin kurang. Kemungkinan besar akan melewatkan sistem file flash spesialis.
Graeme
2

Pertama periksa sistem file yang didukung di kernel.

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

Saya berasumsi bahwa Anda mencoba memasang kartu SD yang sama dari mana Anda menjalankan Linux. Jika demikian, saya berasumsi, cukup masuk akal, bahwa ia memiliki dukungan sistem file asli di Linux. Untuk memastikan Anda telah memuat driver kartu SD, Anda dapat mencoba,

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

Sekarang, coba baca akses ke partisi:

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

Kalau tidak:

$ sudo fdisk -l /dev/mmcblk

fdisk akan memberi tahu Anda tipe partisi juga.

Ini meyakinkan Anda bahwa driver kartu SD dapat mengakses perangkat blok. Sekarang Anda dapat menjalankan parteduntuk mencetak sistem file:

$ 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

Setelah Anda mengetahui FS, pasang dengan

$ sudo mount -t <FS> /dev/mmcblkpX </target/dir>
Kevin
sumber
Apa kamu yakin akan hal itu? berpisah dapat menganalisis tanda tangan serta sejauh yang saya ingat. fdisk hanya membuang tipe partisi.
Kevin
Ok, kanan Anda, partedmemang mencoba untuk menentukan jenis sistem file. Komentar dihapus.
Graeme
-1

Sepertinya saya ingat ini adalah kesalahan yang Anda dapatkan ketika jenis partisi yang Anda coba pasang tidak didukung.

sibaz
sumber
Jika Anda tahu apa tipe partisi itu, periksa fungsi fsck yang sesuai di / sbin dan bahwa modul yang sesuai ada di kernel (/ proc / modules)
sibaz
saya tidak tahu tipe partisi. apakah ada perintah untuk menemukan tipe partisi? Tapi saya telah melihat / proc / modules - kosong
gpuguy
Jika Anda memiliki root, ini akan jauh lebih mudah, tetapi jika, seperti yang saya pikir Anda lakukan, Anda melakukan ini di Android, Anda sedang mencari blkid, jika tidak, dan ini lingkungan Linux yang lebih konvensional, lsblkmungkin lebih disukai.
mikeserv
Saya akan memeriksa lsblk besok. Tapi mengapa / proc / modules kosong.
gpuguy
Bagaimana Anda bisa tahu itu dan masih sehari penuh untuk mengetik 5 huruf saat diminta?
mikeserv
-1

Mungkin Anda perlu menggunakan (perintah parted) karena ukuran partisi:

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

Untuk memastikan bahwa partisi dibuat dengan benar, gunakan /sbin/parted /dev/mmcblk0p1 print”

Maka Anda harus memformat partisi yang dibuat

/sbin/mkfs -t correct_type /dev/mmcblk0p1
Charles nakhel
sumber
2
Menggunakan partedon /dev/mmcblk0p1akan membuat tabel partisi pada partisi perangkat yang sudah dipartisi. Juga, mengikuti petunjuk ini akan menghapus semua data pada perangkat .
Graeme