việc cài đặt mmcblk0p1 không thành công với đối số không hợp lệ


9

Khi tôi đang chạy linux từ thẻ sd và cố gắng gắn thẻ sd - không có vấn đề gì, hoạt động tốt. Nhưng khi tôi chạy linux từ bộ nhớ flash, tôi không thể gắn thẻ SD:

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

Điều gì có thể là lý do cơ bản cho lỗi này?

Thông tin bổ sung

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
Vui lòng thử lệnh hoàn chỉnh ( -t ...) để fstabmục nhập không được sử dụng.
Hauke ​​Laging

1
Có bất cứ điều gì hữu ích được viết vào /var/log/messages? Thế còn dmesg | tail?
Flup

@Flup tôi đã cập nhật câu hỏi của tôi ở trên
gpuguy

4
mount -t /dev/mmcblk0p1 /mntkhông phải là một lệnh hoàn chỉnh. Nếu bạn biết loại filesytem, ​​bạn nên chỉ định nó sau đối số -t (ví dụ mount -t vfat /dev/mmcblk0p1 /mnt) hoặc bỏ hoàn toàn -t.
James Hebden

bỏ qua không hoạt động như bạn có thể thấy ở trên
gpuguy

Câu trả lời:


10

Như nhận xét của goldilocks , mount -thy vọng loại hệ thống tập tin sẽ xuất hiện -t, vì vậy nó sẽ không hoạt động. Nếu không, có vẻ như bạn chỉ cần xác định loại hệ thống tập tin. Nếu bạn không biết loại hệ thống tập tin, thì có một danh sách các phương pháp để tìm ra trong câu trả lời này . Nếu filelệnh có sẵn, đây có lẽ là phương pháp tốt nhất. Là root bạn sẽ làm:

file -s /dev/mmcblk0p1

Cũng lưu ý rằng nếu loại hệ thống tập tin không được liệt kê trong /proc/filesystems, thì trình điều khiển không được biên dịch vào kernel và do đó phải có sẵn như là một mô-đun bên ngoài. Khi bạn có loại chính xác, bạn có thể thử:

mount -t correct_type /dev/mmcblk0p1 /mnt

Như một suy nghĩ cuối cùng, cũng đảm bảo /mntthư mục tồn tại! Nếu không tạo nó với mkdir /mnt.


gắn kết yêu cầu sudo?
Ferroao

@Ferroao, có gắn yêu cầu quyền root.
Graeme

Nếu tôi cần sửa đổi, tạo tập tin trong sd đó tôi có cần sudo không?
Ferroao

@Ferroao, điều đó phụ thuộc vào hệ thống tập tin bạn đang cố gắn kết. Đối với quyền / chủ sở hữu / nhóm hệ thống tệp Linux trên mỗi tệp / thư mục xác định ai có thể đọc / ghi.
Graeme

3

Lý do cơ bản: (cập nhật)

1) Hệ thống của bạn không (đúng cách?) Khởi tạo hoặc không nhận ra SD khi khởi động từ flash. Có /dev/mmcblk0thiết bị nào sau khi bạn khởi động từ flash không? Nó fdisk -l /dev/mmcblk0nói gì

2) Không có hệ thống tệp trên / dev / mmcblk0p1, trước tiên bạn cần tạo một hệ thống tệp ( mkfs ...). Kiểm tra vớifile -s /dev/mmcblk0p1

3) Hệ thống tệp trên / dev / mmcblk0p1 bị hỏng, bạn cần kiểm tra / sửa chữa nó, thử fsck /dev/mmcblk0p1hoặc tạo một cái mới

4) kernel của bạn (khi khởi động từ flash) không có trình điều khiển hệ thống tập tin cần thiết, kiểm tra cat /proc/filesystemsls "/lib/modules/$(uname -r)/kernel/fs/"và xem danh sách có chứa các loại hệ thống tập tin cần thiết. Thông thường, các nhân cũ hơn không hỗ trợ ext4, trong khi HĐH của bạn có thể đã có các công cụ để tạo một hệ thống tệp ext4.

5) Lỗi phần cứng - có thể là thẻ SD, bộ điều khiển, hệ thống dây điện ... nhưng nếu nó hoạt động khi khởi động từ thẻ SD thì đây có lẽ không phải là trường hợp.


Lưu ý rằng các hệ thống tập tin được liệt kê trong /proc/filesystemschỉ là những hệ thống được biên dịch vào kernel. Ví dụ: /proc/filesystemskhông chứa của tôi vfat, nhưng tôi vẫn có thể gắn kết một vfathệ thống vì nó có sẵn dưới dạng một mô-đun.
Graeme

Có vẻ tốt, mặc dù OP có thể chỉ cần xác định loại. Các util-linuxcố gắng gắn kết để xác định hệ thống tập tin thông qua blkidnhững nỗ lực sau đó tất cả mọi thứ trong /etc/filesystemshoặc /proc/filesystem. Tôi nghĩ rằng đây là busyboxgắn kết, vì vậy nó có thể làm ít hơn. Hoặc có thể sẽ bỏ lỡ một hệ thống tập tin flash chuyên gia.
Graeme

2

Đầu tiên kiểm tra các hệ thống tập tin được hỗ trợ trong kernel.

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

Tôi giả sử rằng bạn đang cố gắn thẻ SD tương tự mà bạn đang chạy Linux. Nếu vậy, tôi giả sử, khá hợp lý, rằng nó có hỗ trợ hệ thống tệp gốc trong Linux. Để đảm bảo bạn đã tải trình điều khiển thẻ SD, bạn có thể thử,

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

Bây giờ, hãy thử đọc quyền truy cập vào các phân vùng:

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

Cách khác:

$ sudo fdisk -l /dev/mmcblk

fdisk sẽ cho bạn biết các loại phân vùng là tốt.

Điều này đảm bảo với bạn rằng trình điều khiển thẻ SD có thể truy cập vào thiết bị khối. Bây giờ bạn có thể chạy partedđể in các hệ thống tập tin:

$ 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

Một khi bạn biết FS, gắn kết nó với

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

Bạn có chắc chắn về điều đó không? chia tay có thể phân tích chữ ký cũng như xa như tôi có thể nhớ. fdisk chỉ cần loại các phân vùng.
Kevin

Ok, quyền của bạn, partedkhông cố gắng xác định loại hệ thống tập tin. Bình luận bị xóa.
Graeme

-1

Tôi dường như nhớ đây là lỗi bạn gặp phải khi loại phân vùng bạn đang cố gắn kết không được hỗ trợ.


Nếu bạn biết loại phân vùng là gì, hãy kiểm tra chức năng fsck thích hợp có trong / sbin và các mô-đun thích hợp có trong kernel (/ Proc / mô-đun)
sibaz

tôi không biết loại phân vùng. Có lệnh nào để tìm loại phân vùng không? Nhưng tôi đã thấy / Proc / mô-đun - nó trống rỗng
gpuguy

Nếu bạn đã root thì việc này sẽ dễ dàng hơn rất nhiều, nhưng nếu, như tôi nghĩ là bạn, bạn đang làm điều này trên Android blkid, nếu không, và đó là một môi trường Linux thông thường hơn, lsblkcó lẽ tốt hơn.
mikeerv

Tôi sẽ kiểm tra lsblk vào ngày mai. Nhưng tại sao / Proc / mô-đun trống.
gpuguy

Làm thế nào bạn có thể biết điều đó và vẫn còn cả ngày để gõ 5 chữ cái theo lời nhắc của bạn?
mikeerv

-1

Có thể bạn cần sử dụng (lệnh chia tay) do kích thước phân vùng:

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

Để đảm bảo rằng phân vùng được tạo đúng, sử dụng /sbin/parted /dev/mmcblk0p1 print”

Sau đó, bạn phải định dạng phân vùng đã tạo

/sbin/mkfs -t correct_type /dev/mmcblk0p1

2
Sử dụng partedtrên /dev/mmcblk0p1sẽ tạo bảng phân vùng trên phân vùng của thiết bị đã được phân vùng. Ngoài ra, làm theo các hướng dẫn này sẽ xóa tất cả dữ liệu trên thiết bị .
Graeme
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.