Tôi đã mua thẻ SD 64 GB từ eBay. Nó hoạt động tốt khi tôi ghi hình ảnh Arch Linux ARM vào nó và sử dụng nó để khởi động Raspberry Pi của tôi.
Tuy nhiên, khi tôi cố gắng tạo một phân vùng ext4 duy nhất trên đó để sử dụng tất cả dung lượng của thẻ, đã xảy ra lỗi. mkfs.ext4
luôn luôn kết thúc một cách vui vẻ; tuy nhiên, phân vùng không thể được chỉnh sửa mount
, luôn luôn xuất hiện lỗi và dmesg
hiển thị các thông báo kernel bao gồm Cannot find journal
. Điều này đã được chứng minh là trường hợp trên ít nhất hai nền tảng: Arch Linux ARM và Ubuntu 13.04.
Mặt khác, tôi có thể tạo và gắn kết phân vùng FAT32 mà không gặp lỗi (kiểm tra dung lượng đầy đủ chưa được thực hiện).
Tôi nghe nói rằng một số kẻ xấu có thể thay đổi giao diện thẻ SD để báo cáo dung lượng sai cho HĐH (tức là thẻ thực sự chỉ có 2 GB nhưng nó tự báo cáo là 64 GB) để bán thẻ với giá tốt hơn.
Tôi biết rằng các công cụ như badblocks
tồn tại đối với tôi để kiểm tra thẻ SD xem có bị chặn không. Có thể badblocks
phát hiện vấn đề như thế này? Nếu không, những giải pháp khác tồn tại cho tôi để kiểm tra thẻ?
Tôi lý tưởng muốn biết liệu tôi có bị lừa hay không; nếu kết quả cho thấy tôi vừa nhận được một mặt hàng xấu, tôi chỉ có thể quay lại với người bán, thay vì báo cáo với eBay rằng ai đó đã cố lừa dối tôi.
CẬP NHẬT
hoạt động và tin nhắn:
~$ sudo mkfs.ext4 /dev/sde1
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
4096000 inodes, 16383996 blocks
819199 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
500 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
~$ dmesg | tail
...
[4199.749118]...
~$ sudo mount /dev/sde1 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sde1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
~$ dmesg | tail
...
[ 4199.749118]...
[ 4460.857603] JBD2: no valid journal superblock found
[ 4460.857618] EXT4-fs (sde1): error loading journal
CẬP NHẬT
Tôi đã chạy badblocks /dev/sde
nhưng nó báo không có lỗi. Điều đó có nghĩa là các nguyên nhân còn lại là:
Xe SD là tốt nhưng vì một số lý do
mke2fs
hoặcmount
nhân có lỗi gây ra vấn đề.Tôi đã bị lừa theo cách
badblocks
không thể phát hiện ra thất bại. Điều này là hợp lý bởi vì tôi nghĩbadblocks
chỉ đang thực hiện một số bài kiểm tra viết-đọc tại chỗ. Tuy nhiên, kẻ lừa đảo có thể làm cho quyền truy cập vào các khu vực bên ngoài liên kết trở lại một số khối gửi đến. Trong trường hợp này, kiểm tra ghi-đọc tại chỗ không thể phát hiện vấn đề.
Nếu không có ứng dụng nào có thể thực hiện bài kiểm tra phù hợp, tôi nghĩ tôi có thể thử viết một chương trình C đơn giản để kiểm tra nó.
dmesg
hiển thị các thông báo kernel và tôi chắc chắn rằng nó xuất hiện cùng lúc với các lỗi vì tôi đã làm điều đó trước và sau và so sánh chúng. Tôi không kiểm tra syslog
vì tôi tin dmesg
sẽ hiển thị các tin nhắn.