Недавно прочитал в одном журнале, что ушлые китайцы часто подделывают SD-карты. То есть контроллер сообщает компьютеру, что объём карты, например, 64 гигабайта. На эту карту действительно можно записать 64 гигабайта, но корректно считаются только первые 8, а вместо остального будет мусор, т. к. флэш-памяти на карточке всего 8, а всё остальное пишется в /dev/null.
Недавно я купил карточку на AliExpress и решил проверить, не подделана ли она. В той же статье была ссылка на некое Приложение® for Windows®, которое тестировало карту. Под Linux такого приложения, естественно, нет, но зато его можно быстро собрать на коленке из подручных материалов, что я и сделал.
Контрольный запуск показал, что карта настоящая. Обрадованный этим фактом, я заказал у того же продавца две карточки объёмом побольше, но когда они приехали из Поднебесной, скриптик всё равно запустил. И вот тут-то он себя и окупил, т. к. обе карты оказались поддельными...
Китайцам - жирный минус в карму, а скрипт, если кому нужен, - под катом.
#!/bin/bash
if [[ ! -d ${1} ]]
then
echo "Usage: sdtest DIRECTORY [tmpdir]"
exit 1
fi
echo "Preparing test file..."
if [[ -d ${2} ]]
then
tempfile=`mktemp -p "${2}"`
else
tempfile=`mktemp`
fi
dd if=/dev/urandom of=${tempfile} bs=1048576 count=512
echo ...done
CS=`md5sum -b ${tempfile} | cut -f 1 -d " "`
echo MD5 = ${CS}
nf=0
if [[ ${1:(-1)} != "/" ]]; then dir=${1}/; else dir=${1}; fi
while true
do
znf=000000${nf}
fn=${znf:(-6)}
/usr/bin/time -f "${fn} %e" cp ${tempfile} ${dir}${fn}
if [[ $? -ne 0 ]]; then break; fi
echo ${CS} *${fn} >>${dir}md5sum.txt
nf=$((nf+1))
done
rm -f ${tempfile}
pushd $1
md5sum -c md5sum.txt
popd