монтирование mmcblk0p1 не удалось с недопустимым аргументом

9

Когда я запускаю Linux с SD-карты и пытаюсь смонтировать 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
gpuguy
источник
1
Пожалуйста, попробуйте завершить команду ( -t ...), чтобы fstabзапись не использовалась.
Хауке Лагинг
1
Есть ли что-нибудь полезное записано /var/log/messages? Как насчет dmesg | tail?
Флюп
@Flup я обновил свой вопрос выше
gpuguy
4
mount -t /dev/mmcblk0p1 /mntне полная команда Если вы знаете тип файловой системы, вы должны указать его после аргумента -t (например mount -t vfat /dev/mmcblk0p1 /mnt) или полностью опустить -t.
Джеймс Хебден
опускание не сработало, как вы можете видеть выше
gpuguy

Ответы:

10

Как прокомментировал goldilocks , mount -tожидает, что тип файловой системы будет указан позже -t, поэтому он не будет работать. В противном случае это звучит так, как будто вам просто нужно указать тип файловой системы. Если вы не знаете тип файловой системы, то в этом ответе есть список методов . Если fileкоманда доступна, это, вероятно, лучший метод. В качестве пользователя root вы должны сделать:

file -s /dev/mmcblk0p1

Также обратите внимание, что если тип файловой системы не указан в списке /proc/filesystems, драйвер не скомпилирован в ядро ​​и поэтому должен быть доступен как внешний модуль. Когда у вас есть правильный тип, вы можете попробовать:

mount -t correct_type /dev/mmcblk0p1 /mnt

В заключение, также убедитесь, что /mntкаталог существует! Если не создать его с mkdir /mnt.

Graeme
источник
монтирует требует sudo?
Ferroao
@ Ferroao, да, для монтирования требуются права суперпользователя.
Грэм
если мне нужно изменить, создать файлы в этом SD мне понадобится sudo?
Ferroao
@Ferroao, это зависит от файловой системы, которую вы пытаетесь смонтировать. Для файловых систем Linux разрешения / владелец / группа для каждого файла / каталога определяют, кто может читать / писать.
Грэм
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/filesystemsи ls "/lib/modules/$(uname -r)/kernel/fs/"увидеть , если этот список содержит необходимый тип файловой системы. Как правило, старые ядра не поддерживают ext4, в то время как ваша ОС может уже иметь инструменты для создания файловой системы ext4.

5) Аппаратный дефект - это может быть SD-карта, контроллер, проводка ... но если он работает при загрузке с SD-карты, то, скорее всего, это не так.

Zrin
источник
Обратите внимание, что файловые системы, перечисленные в, /proc/filesystemsявляются только теми, которые скомпилированы в ядро. Например, my /proc/filesystemsне содержит vfat, но я все еще могу смонтировать vfatсистему, поскольку она доступна в виде модуля.
Грэм
Выглядит хорошо, хотя OP может просто указать тип. util-linuxМонтирования пытается определить файловую систему с помощью blkidзатем пытается все в /etc/filesystemsили /proc/filesystem. Я думаю, что это busyboxкрепление, так что, вероятно, делает меньше. Либо, скорее всего, не хватит специализированной флеш-файловой системы.
Грэм
2

Сначала проверьте файловые системы, поддерживаемые в ядре.

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

Я предполагаю, что вы пытаетесь смонтировать ту же SD-карту, с которой вы используете Linux. Если это так, я полагаю, вполне разумно, что он имеет встроенную поддержку файловой системы в 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>
Kevin
источник
Вы уверены, что? parted может анализировать подпись, насколько я помню. fdisk просто выводит тип раздела.
Кевин
Хорошо, ваше право, partedпытается определить тип файловой системы. Комментарий удален.
Грэм
-1

Кажется, я помню, что это ошибка, которую вы получаете, когда тип раздела, который вы пытаетесь смонтировать, не поддерживается.

sibaz
источник
Если вы знаете тип раздела, убедитесь, что соответствующая функция fsck находится в / sbin, и что соответствующие модули находятся в ядре (/ proc / modules)
sibaz
я не знаю тип раздела. есть ли команда для поиска типа раздела? Но я вижу / proc / modules - он пустой
gpuguy
Если у вас есть root, это будет намного проще, но если, как я думаю, вы делаете это на Android, вы ищете blkid, если нет, и это более обычная среда Linux, lsblkвероятно, предпочтительнее.
mikeserv
Завтра я проверю lsblk. Но почему / proc / modules пуст.
gpuguy
Как вы можете знать это и все еще быть целым днем, не набирая 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создаст таблицу разделов на разделе устройства, которое уже было разделено. Кроме того, следуя этим инструкциям, вы удалите все данные на устройстве .
Грэм