잘못된 인수로 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?
— Flup

@Flup 위의 질문을 업데이트했습니다
— gpuguy

4
mount -t /dev/mmcblk0p1 /mnt완전한 명령이 아닙니다. filesytem 유형을 알고 있으면 -t 인수 뒤에 지정 mount -t vfat /dev/mmcblk0p1 /mnt하거나 (예 :) -t를 완전히 생략해야합니다.
— James Hebden

위에서 볼 수 있듯이 생략이 작동하지 않았습니다
— gpuguy

답변:


10

마찬가지로 금발 미녀 댓글을 달았 , mount -t파일 시스템 유형이 후 올 것으로 예상 -t, 그래서 그것은 작동하지 않습니다. 그렇지 않으면 파일 시스템 유형을 지정 해야하는 것처럼 들립니다. 파일 시스템 유형을 모르는 경우이 답변 에서 찾을 수있는 방법 목록 이 있습니다. 은 IF file명령을 사용할 수 있습니다, 이것은 아마도 가장 좋은 방법입니다. 루트로서 당신은 할 것입니다 :

file -s /dev/mmcblk0p1

파일 시스템 유형이에 나열되어 /proc/filesystems있지 않으면 드라이버가 커널로 컴파일되지 않으므로 외부 모듈로 사용 가능해야합니다. 올바른 유형이되면 다음을 시도해보십시오.

mount -t correct_type /dev/mmcblk0p1 /mnt

마지막으로 /mnt디렉토리가 존재 하는지 확인하십시오 ! 로 작성하지 않으면 mkdir /mnt.


마운트에는 sudo가 필요합니까?
— Ferroao

@Ferroao, 예 마운트에는 루트 권한이 필요합니다.
— Graeme

수정 해야하는 경우 해당 SD에 파일을 작성하고 sudo가 필요합니까?
— Ferroao

@Ferroao는 마운트하려는 파일 시스템에 따라 다릅니다. 각 파일 / 디렉토리의 Linux 파일 시스템 권한 / 소유자 / 그룹에 대해 누가 읽고 쓸 수 있는지 결정하십시오.
— Graeme

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를 지원하지 않지만 OS에는 이미 ext4 파일 시스템을 만드는 도구가있을 수 있습니다.

5) 하드웨어 결함-SD 카드, 컨트롤러, 배선 일 수 있습니다 ...하지만 SD 카드로 부팅 할 때 작동하면 대부분 그렇지 않습니다.


나열된 파일 시스템 /proc/filesystems은 커널로 컴파일 된 파일 시스템 일뿐입니다. 예를 들어, my /proc/filesystems는 포함하지 않지만 시스템은 모듈로 제공되므로 vfat여전히 마운트 할 수 있습니다 vfat.
— Graeme

OP는 유형을 지정해야 할 수도 있지만 좋아 보입니다. 을 util-linux통해 파일 시스템을 식별하는 시도를 장착 blkid한 후 시도의 모든 /etc/filesystems또는 /proc/filesystem. 나는 이것이 busybox마운트 라고 생각 하기 때문에 아마도 덜 할 것입니다. 전문가 용 플래시 파일 시스템이 없을 것입니다.
— Graeme

2

먼저 커널에서 지원되는 파일 시스템을 확인하십시오.

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

Linux를 실행하는 것과 동일한 SD 카드를 마운트하려고한다고 가정합니다. 그렇다면 필자는 리눅스에서 기본 파일 시스템을 지원한다고 가정합니다. 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>

확실합니까? parted는 내가 기억할 수있는 한 서명을 분석 할 수 있습니다. fdisk는 단지 파티션 유형을 덤프합니다.
— Kevin

좋아, parted파일 시스템 유형을 결정하려고합니다. 댓글이 삭제되었습니다.
— Graeme

-1

마운트하려는 파티션 유형이 지원되지 않을 때 발생하는 오류라는 것을 기억합니다.


파티션 유형이 무엇인지 알고 있다면, 적절한 fsck 기능이 / sbin에 있고 해당 모듈이 커널 (/ proc / modules)에
— 있는지 확인하십시오.

나는 파티션 유형을 모른다. 파티션 유형을 찾기위한 명령이 있습니까? 그러나 / proc / modules는 비어 있습니다
— gpuguy

루트가 있다면 훨씬 쉬울 것입니다.하지만 내가 생각하는 것처럼 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
사용 parted에서 /dev/mmcblk0p1이미 분할 된 장치의 파티션의 파티션 테이블을 생성한다. 또한이 지침을 따르면 장치의 모든 데이터 가 지워집니다 .
— Graeme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.