-1

Я использую карты microSD в продукте, и у меня были некоторые сбои из-за плохих секторов. У меня все еще есть больше SD-карт из той же партии, и я хотел посмотреть, смогу ли я проверить их на разрушение (то есть до истощения сектора) и измерить, сколько всего данных было записано на карту до этого.

Как я могу сделать это?

Спасибо

1 ответ1

1

Одним из простых методов будет использование безопасного инструмента удаления диска. Эти инструменты записывают последовательность данных в каждое место на диске. Это будет проверять все сектора диска. Вы можете запускать эти инструменты итеративно, чтобы убедиться, что диск очень чистый. Эта очистка израсходует жизнь SD-карты. Если вы отследите количество проходов до сбоя карты, вы будете знать, сколько данных вы записали на диск. Тем не менее, это лучший вариант для накопителя, поскольку записи распределяются по всему диску.

Худшим случаем будет запись снова и снова в один и тот же сектор, пока не произойдет сбой. Это приведет к тому, что наименьшее количество данных будет записано до того, как карта начнет выходить из строя. Если вы должны были написать один файл и удалить его, а затем записать его снова и снова, это должно привести к преждевременному выходу из строя карты с наименьшим количеством записанных данных. Это предполагает, что карта не является умной и не перераспределяет сектора во флэш-памяти, как это делает SSD.

Оба вышеперечисленных могут быть выполнены с помощью команды dd в Linux или на Linux live CD.

Предполагая, что устройство было /dev /sdx, должно работать следующее.

i=0
while :
do
  dd if=/dev/urandom of=/dev/sdx bs=1024 count=1000
  if [ $? != 0 ];then break;fi
  let i=i+1
  echo $i
done

Это не идеально, но это примерно так, как вы делаете, не кодируя свои собственные. Он будет записывать 1 МБ случайных данных на диск для каждой итерации. Когда dd начинает выдавать ошибку, он завершается, и вы узнаете, сколько итераций прошло до того, как произошел сбой. Большой недостаток в том, что данные случайные. Если биты такие же, как были раньше, они могут быть записаны не во флэш-памяти и поэтому не могут быть использованы. При условии идеального распределения результат будет удваивать фактическое количество записей, необходимых для сбоя.

Более совершенное решение будет включать итерацию между нулями и единицами или использование чередующихся шахматных досок. Без устройства /dev /one в Linux это требует более сложного решения, чем, я думаю, здесь оправдано.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .