I purchased a 64 GB SD card from eBay. It works fine when I burn an Arch Linux ARM image to it and use it to boot up my Raspberry Pi.
However, when I try to create a single ext4 partition on it to use all capacity of the card, errors occur.
mkfs.ext4 always finishes happily; however, the partition cannot be
mounted, always throwing an error and
dmesg shows kernel messages includes
Cannot find journal. This has proved to be the case on at least two platforms: Arch Linux ARM and Ubuntu 13.04.
On the other hand, I can create and mount a FAT32 partition without error (a full capacity check has not been done).
I heard that some bad guys can change the SD card interface to report a wrong capacity to the OS (i.e. the card is really only 2 GB but it reports itself as a 64 GB) in order to sell the card at a better price.
I know that tools like
badblocks exist for me to check the SD card for bad blocks. Can
badblocks detect problems like this? If not, what other solutions exist for me to test the card?
I'd ideally like to know whether I was cheated or not; if the result shows I just received a bad item, I can return to the seller only, rather report to eBay that somebody tried to cheat me.
operations and messages:
~$ 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
I have run
badblocks /dev/sde but it reports no error. That means the remain causes are:
The SD car is good but for some reason
mountor the kernel have a bug that causes the problem.
I was cheated in a way that
badblocksthat cannot detect the defeat. This is plausible because I think
badblocksis just doing some in-place write-read test. However, the cheater can make the access to outbound areas link back to some inbound block. In this case a in-place write-read check is not able to detect the problem.
If there is no application can do the proper test, I think I can try to write a simple C program to test it.