การเมาต์ mmcblk0p1 ล้มเหลวด้วยอาร์กิวเมนต์ไม่ถูกต้อง


9

เมื่อฉันใช้ linux จาก sd card และพยายามเมานต์ sd card - ไม่มีปัญหาทำงานได้ดี แต่เมื่อฉันใช้งาน 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

ตามที่แสดงความคิดเห็นโดย goldilocks , mount -tคาดว่าประเภทระบบไฟล์จะตามมา-t, ดังนั้นมันจะไม่ทำงาน. ไม่เช่นนั้นคุณจะต้องระบุประเภทระบบไฟล์ หากคุณไม่ทราบประเภทของระบบไฟล์ก็จะมีรายการวิธีการค้นหาในคำตอบนี้ หากfileคำสั่งพร้อมใช้งานนี่อาจเป็นวิธีที่ดีที่สุด ในฐานะที่เป็น root คุณต้องทำ:

file -s /dev/mmcblk0p1

โปรดทราบว่าหากประเภทระบบไฟล์ไม่ได้อยู่ในรายการ/proc/filesystemsไดรเวอร์จะไม่ถูกรวบรวมลงในเคอร์เนลดังนั้นจึงต้องใช้งานเป็นโมดูลภายนอก เมื่อคุณมีประเภทที่ถูกต้องคุณสามารถลอง:

mount -t correct_type /dev/mmcblk0p1 /mnt

เป็นความคิดสุดท้ายให้แน่ใจว่ามี/mntไดเรกทอรีอยู่! mkdir /mntถ้าไม่ได้สร้างมันขึ้นมาด้วย


ติดตั้งต้องใช้ sudo?
Ferroao

@Froroao ใช่การเมาท์ต้องใช้สิทธิ์ของรูต
แกรม

ถ้าฉันต้องการแก้ไขสร้างไฟล์ใน 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 นี่อาจเป็นกรณีที่ไม่ใช่


โปรดทราบว่าระบบไฟล์ที่ระบุไว้ใน/proc/filesystemsนั้นเป็นเพียงคนที่รวบรวมไว้ในเคอร์เนล ตัวอย่างเช่นฉัน/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>

คุณแน่ใจหรือไม่ แยกสามารถวิเคราะห์ลายเซ็นเช่นเดียวกับที่ฉันจำได้ fdisk เพียงทิ้งประเภทพาร์ติชัน
เควิน

ตกลงถูกต้องpartedพยายามกำหนดประเภทของระบบไฟล์ ลบความคิดเห็นแล้ว
แกรม

-1

ฉันดูเหมือนจะจำได้ว่านี่เป็นข้อผิดพลาดที่คุณได้รับเมื่อไม่รองรับประเภทพาร์ติชันที่คุณพยายามเมาต์


หากคุณทราบประเภทพาร์ติชั่นให้ตรวจสอบฟังก์ชั่น fsck ที่เหมาะสมใน / sbin และโมดูลที่เหมาะสมนั้นอยู่ในเคอร์เนล (/ proc / modules)
sibaz

ฉันไม่รู้ประเภทพาร์ติชั่น มีคำสั่งให้ค้นหาประเภทพาร์ติชั่นหรือไม่? แต่ฉันได้เห็น / proc / โมดูล - ว่างเปล่า
gpuguy

ถ้าคุณมีรากนี้จะมีจำนวนมากขึ้น แต่ถ้าเป็นฉันคิดว่าคุณเป็นคุณจะทำเช่นนี้บน Android ของคุณกำลังมองหาblkid,หากไม่ได้และมันเป็นสภาพแวดล้อมที่ลินุกซ์ธรรมดาlsblkน่าจะดีกว่า
mikeserv

ฉันจะตรวจสอบ lsblk ในวันพรุ่งนี้ แต่ทำไม / proc / modules ว่างเปล่า
gpuguy

คุณจะรู้ได้อย่างไรและยังคงอยู่ห่างจากการพิมพ์ตัวอักษร 5 ตัวภายในหนึ่งวันทั้งวัน?
mikeserv

-1

บางทีคุณต้องใช้ (คำสั่งแยก) เนื่องจากขนาดพาร์ติชัน:

# /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จะสร้างตารางพาร์ติชันบนพาร์ติชันของอุปกรณ์ที่มีการแบ่งพาร์ติชันแล้ว นอกจากนี้ตามคำแนะนำเหล่านี้จะลบข้อมูลทั้งหมดบนอุปกรณ์
แกรม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.