On Friday 08 July 2011 00:37:35 AJ ONeal wrote:
Confirmed: the combination of a linaro-2.6.39 kernel with a transcend 8gb card results in flakey boots. linaro-2.6.39 kernel is affected transcend cards are affected oe-2.6.36 kernel is not affected sandisk 8gb cards are not affected (67 megabytes smaller) I zero'd a card, but instead of only zeros, I also wrote the sector number in each 512-byte block.
I changed the kernel to print out the 512 bytes it read as the mbr to the screen.
When the card didn't boot fully the printk showed all zeros except for a sector number about 100mb into the card.
How weird! Hardware? Kernel?
My guess is that it's the card's fault. There are a lot of cards that are simply not going to work with a Linux file system. In my experience, the Sandisk cards tend to have controllers that cope with proper file systems, while Kingston never do.
Transcend doesn't make their own cards, they buy stuff from everybody, so you can be lucky or not.
Anyway, today my sandisk cards arrived and all 10 of them worked flawlessly. I ordered another 50 and hope to see the same results.
Ok. Can you be more specific which cards worked for you and which had problems? Please list the contents of /sys/block/mmcblk0/device/*, in particular the *id and date fields.
We are still doing more analysis what the specific requirements are given a particular file system, but I have a good understanding of what the problems with many of the cards are. If you haven't seen my articles, please have a look at https://lwn.net/Articles/428584/ and https://wiki.linaro.org/WorkingGroups/Kernel/Projects/FlashCardSurvey
If you send me a specimen of each cards you're interested in, I'll gladly do my analysis, or I can teach you how to do it yourself. It does take a bit of experience because there are so many different ways in which the drives can be screwed up.
If you want a very simple test to see if a card is any good before you buy a lot of them, I recommend running (Warning: overwrites data on the card)
flashbench --open-au --erasesize=$[4*1024*1024] --blocksize=4096 --open-au-nr=5 --random /dev/mmcblk0
This will print performance ratings for random write accesses to the card on five different erase blocks (assuming 4 MB erase block size). A card that can handle this should look like
4MiB 9.03M/s 2MiB 6.17M/s 1MiB 6.24M/s 512KiB 4.06M/s 256KiB 4.54M/s 128KiB 3.8M/s 64KiB 6.47M/s 32KiB 5.79M/s 16KiB 2.72M/s 8KiB 1.33M/s
while a card that cannot handle this look more like
4MiB 8.81M/s 2MiB 5.43M/s 1MiB 3.81M/s 512KiB 2.27M/s 256KiB 1.34M/s 128KiB 860K/s 64KiB 481K/s 32KiB 229K/s 16KiB 117K/s 8KiB 57K/s
If the last row is above 1MB/s, the card is fine, if it is below 100K/s, don't even think about using it. The explanation for this behavior is in the lwn.net article.
Arnd