使用无效参数挂载mmcblk0p1失败


9

当我从SD卡运行linux并尝试挂载SD卡时-没问题,可以正常工作。但是,当我从闪存运行Linux时,无法挂载SD卡:

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

发生此错误的基本原因是什么?

附加信息

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
请尝试使用完整的命令(-t ...),以便fstab不使用该条目。
Hauke Laging

1
有什么有用的东西要写进去/var/log/messages吗?怎么dmesg | tail
2014年

@Flup我在上面更新了我的问题
gpuguy 2014年

4
mount -t /dev/mmcblk0p1 /mnt不是完整的命令。如果您知道文件系统类型,则应在-t参数(例如mount -t vfat /dev/mmcblk0p1 /mnt)之后指定它,或完全省略-t。
James Hebden 2014年

如上所见,省略省略没有用
gpuguy

Answers:


10

正如goldilocks评论的那样mount -t期望文件系统类型紧随其后-t,因此它将无法工作。否则,听起来您只需要指定文件系统类型即可。如果您不知道文件系统类型,那么可以在此答案中找到一系列方法。如果file命令可用,这可能是最好的方法。作为root,您将执行以下操作:

file -s /dev/mmcblk0p1

还要注意,如果文件系统类型未在中列出/proc/filesystems,则驱动程序不会编译到内核中,因此必须作为外部模块可用。输入正确的类型后,您可以尝试:

mount -t correct_type /dev/mmcblk0p1 /mnt

最后,请确保/mnt目录存在!如果没有创建mkdir /mnt


坐骑需要sudo吗?
Ferroao

@Ferroao,是的,挂载需要root特权。
格雷姆

如果我需要修改,在该SD中创建文件,我需要sudo吗?
Ferroao

@Ferroao,这取决于您要挂载的文件系统。对于Linux文件系统,每个文件/目录上的权限/所有者/组确定谁可以读取/写入。
Graeme'4

3

基本原因:(已更新)

1)从闪存启动时,系统没有(正确?)初始化或无法识别SD。/dev/mmcblk0从闪存启动后是否存在该设备?什么fdisk -l /dev/mmcblk0发言权?

2)/ dev / mmcblk0p1上没有文件系统,您需要首先创建一个文件系统(mkfs ...)。检查与file -s /dev/mmcblk0p1

3)/ dev / mmcblk0p1上的文件系统已损坏,您需要检查/修复它,尝试fsck /dev/mmcblk0p1或创建一个新的

4)您的内核(从闪存启动时)没有所需的文件系统驱动程序,请检查 cat /proc/filesystemsls "/lib/modules/$(uname -r)/kernel/fs/"看看是否该列表包含所需的文件系统类型。通常,较旧的内核不支持ext4,而您的操作系统可能已经具有创建ext4文件系统的工具。

5)硬件故障-可能是SD卡,控制器,接线...但是如果从SD卡启动时它可以工作,则很可能不是这种情况。


请注意,其中列出的文件系统/proc/filesystems仅是编译到内核中的文件系统。例如,my /proc/filesystems不包含vfat,但是我仍然可以挂载vfat系统,因为它可以作为模块使用。
Graeme

看起来不错,尽管OP可能只需要指定类型。该util-linux安装尝试识别通过文件系统blkid,然后尝试一切/etc/filesystems/proc/filesystem。我认为这是busybox坐骑,所以它可能做得更少。两者都可能会错过专业的Flash文件系统。
Graeme'4

2

首先检查内核支持的文件系统。

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

我假设您正在尝试安装与运行Linux相同的SD卡。如果是这样,我很合理地假设它在Linux中具有本机文件系统支持。要确保已加载SD卡驱动程序,可以尝试,

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

现在,尝试对分区进行读取访问:

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

或者:

$ sudo fdisk -l /dev/mmcblk

fdisk 也会告诉您分区类型。

这样可以确保SD卡驱动程序可以访问块设备。现在,您可以运行parted以打印文件系统:

$ 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

知道FS后,用

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

你确定吗?据我所知,分手可以分析签名。fdisk仅转储分区类型。
凯文

好的,您的权利parted确实尝试确定文件系统类型。评论已删除。
Graeme 2014年

-1

我似乎记得这是当您不支持尝试挂载的分区类型时遇到的错误。


如果知道分区类型是什么,请检查/ sbin中是否存在适当的fsck函数,并且内核(/ proc / modules)中存在适当的模块
sibaz 2014年

我不知道分区类型。有没有找到分区类型的命令?但是我看到了/ proc /
modules-

如果您具有root用户,这会容易得多,但是,按照我的想法,如果您正在Android上进行此操作,那么您正在寻找blkid如果没有),并且它是更传统的Linux环境,lsblk则可能更可取。
mikeserv

明天我将检查lsblk。为什么/ proc / modules为空。
gpuguy 2014年

您怎么知道呢,整整一天都不会在提示符下键入5个字母?
mikeserv

-1

由于分区大小,也许您需要使用(parted命令):

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

为确保正确创建了分区,请使用 /sbin/parted /dev/mmcblk0p1 print”

然后,您必须格式化创建的分区

/sbin/mkfs -t correct_type /dev/mmcblk0p1

2
使用partedon /dev/mmcblk0p1将在已经分区的设备的分区上创建分区表。同样,按照以下说明进行操作将删除设备上的所有数据
Graeme 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.