74

Как проверить состояние здоровья USB-накопителя?

Как я узнаю, что USB неисправен или не подлежит ремонту?

6 ответов6

64

Нет способа запросить карту памяти USB для SMART-подобных параметров; Я не знаю ни о каких картах памяти, которые поддерживают это даже через общедоступное проприетарное программное обеспечение. Лучшее, что вы можете сделать, - это проверить, что вы можете успешно читать + писать на все устройство, используя badblocks .

https://en.wikipedia.org/wiki/Badblocks

Вы хотите указать один из тестов записи, который сотрет все данные с флешки; сначала сделайте резервную копию.

Найдите устройство, посмотрев на dmesg после подключения USB-накопителя; вы увидите имя устройства (скорее всего, sd_, т.е. sdc, sdd и т. д.) и информацию о производителе. Убедитесь, что вы используете правильное устройство!

Если флешка отформатирована с допустимой файловой системой, вам, возможно, придется сначала unmount ее.

Пример синтаксиса для USB-накопителя, перечисляемого как /dev /sdz, с выводом информации о ходе выполнения, с тестом на уничтожение данных и журналом ошибок, записанным в usbstick.log:

sudo badblocks -w -s -o usbstick.log /dev/sdz

После этого вам нужно будет перераспределить и переформатировать флешку, если она пройдет; этот тест сотрет все на флешке. Любые сбои указывают на сбой контроллера памяти устройства или на нем закончились запасные блоки для переназначения сбойных блоков. В этом случае ни одна область устройства не может быть доверенной.

19

Через [ubuntu] Ошибка проверки USB Flash Drive, я в конце концов нашел это, что может быть полезно:

Я пришел в блоги Fight Flash Fraud и SOSFakeFlash, которые рекомендуют программное обеспечение H2testw (см. Здесь или здесь) для тестирования флэш-памяти. Я скачал H2testw и обнаружил две проблемы с ним: (1) это только для Windows, и (2) это не с открытым исходным кодом. Тем не менее, его автор был достаточно любезен, чтобы включить текстовый файл, который объясняет, что он делает; эта страница о моей реализации этого алгоритма на GPLv3.
Моя реализация проста и надежна, и я не знаю точно, как F3 сравнивается с H2testw, так как я никогда не запускал H2testw. Я называю свою реализацию F3, что коротко для Fight Flash Fraud или Fight Fake Flash.

Приложение от @pbhj: F3 находится в репозиториях Ubuntu. Он состоит из двух частей: f3write записывает файлы 1 ГБ на устройство, а f3read пытается прочитать их позже. Таким образом проверяются способность и способность писать и эффективно читать данные.

14

Это зависит от режима сбоя, я полагаю. Они дешевы по причине.

Как устройство USB, наблюдение за шиной через диспетчер устройств в Windows или вывод dmesg в Linux сообщит вам, распознается ли устройство как подключенное. Если это не так, то либо контроллер на плате, либо физические соединения нарушены.

Если устройство распознается как подключенное, но не идентифицируется как контроллер диска (и я не знаю, как это могло произойти, но ...), то контроллер выстрелил.

Если он распознается как дисковод, но вы не можете его смонтировать, вы можете восстановить его с помощью fdisk и переписать таблицу разделов, а затем создать другую файловую систему.

Если вы ищете эквивалент SMART, то вы не найдете его. Контроллеры Thumbdrive дешевы. Они являются хранилищем товаров, и не предназначены для того, чтобы иметь нормальные отказоустойчивости и интеллект, как у современных накопителей.

1

Многие сбои либо завершены, либо позволяют одному местоположению поддерживать несколько местоположений. Я написал небольшую программу случайного чтения и записи, которая использует простое число для генератора псевдослучайных чисел, как для шаблонов, так и для адресов. Чтения располагаются позади записей на достаточном количестве страниц, чтобы гарантировать, что я не тестирую оперативный кеш в системе. Он еще не параметризован, просто настроен для устройства 64G в моей системе с оперативной памятью 8G. Не стесняйтесь критиковать, параметризировать, делать это умнее.

Это мощная проверка, которая быстрее, чем выполнение каждого байта снизу вверх, но также является отличным генератором свопинга (выкатывает практически все остальное). Я временно установил swapiness на 1, и он стал медленнее, но более терпимым к другим приложениям. Любые советы о том, как настроиться против свапа, также будут оценены:

$ sudo ksh -c 'echo 1> /proc /sys /vm /swappiness'

$ cat mysrc/test64g.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>

int main( int argc, char **argv ){

        long long int mask = 0xFFFFFFFF8L ;    // 64Gb word
        long long int stag = 8413257 ;  // 8G / 1021
        long long int inc = 1021L ;     // prime < 1024

        long long int w_addr = 0L ;
        long long int r_addr = 0L ;
        long long int w_ct = 0L ;
        long long int r_ct = 0L ;
        long long int w_patt = 0xFEDCBA9876543210L ;
        long long int r_patt = 0xFEDCBA9876543210L ;
        long long int r_buf ;
        int fd, ret ;

        if ( argc < 2
          || argv[1] == NULL
          || 0 > ( fd = open( argv[1], O_RDWR ))){
                printf( "Fatal: Cannot open file $1 for RW.\n" );
                exit( 1 );
        }

        while ( 1 ){
                if ( (off_t)-1 == lseek( fd, w_addr & mask, SEEK_SET )){
                        printf( "Seek to %llX\n", w_addr & mask );
                        perror( "Fatal: Seek failed" );
                        exit( 2 );
                }

                if ( 8 != ( ret = write( fd, (void*)&w_patt, 8 ))){
                        printf( "Seek to %llX\n", w_addr & mask );
                        perror( "Fatal: Write failed" );
                        exit( 3 );
                }

                w_ct++ ;
                w_addr += inc ;
                w_patt += inc ;

                if ( ( w_ct - r_ct ) < stag ){
                        continue ;
                }

                if ( (off_t)-1 == lseek( fd, r_addr & mask, SEEK_SET )){
                        printf( "Seek to %llX\n", r_addr & mask );
                        perror( "Fatal: Seek failed" );
                        exit( 4 );
                }

                if ( 8 != ( ret = read( fd, (void*)&r_buf, 8 ))){
                        printf( "Seek to %llX\n", w_addr & mask );
                        perror( "Fatal: Read failed" );
                        exit( 5 );
                }

                if ( ( ++r_ct & 0XFFFFF ) == 0 ){
                        printf( "Completed %lld writes, %lld reads.\n", w_ct, r_ct );
                }

                if ( r_buf != r_patt ){
                        printf( "Data miscompare on read # %lld at address %llX:\nWas: %llX\nS/B: %llX\n\n", r_ct, r_addr & mask, r_buf, r_patt );
                }

                r_addr += inc ;
                r_patt += inc ;
        }
}
0

На пути к сегодняшнему дню эта тема подняла несколько вопросов.

- Сколько времени это займет (подразумевается обсуждение вопроса о том, чтобы дать ему работать в одночасье).

В настоящее время я тестирую USB 3.0 128G Sandisk с помощью sudo badblocks -w -s -o , он подключен к моей карте USBe 3/USBC PCIe в более старом Athlon 64x2. Итак, USB3 в USB3 на PCIe должен быть довольно быстрым.

Вот моя командная строка консоли на 33% завершения:

Testing with pattern 0xaa: 33.35% done, 49:47 elapsed. (0/0/0 errors)

и снова позже:

Testing with pattern 0xaa: 54.10% done, 1:17:04 elapsed. (0/0/0 errors)

Далее появился этот сегмент:

Reading and comparing: 43.42% done, 2:23:44 elapsed. (0/0/0 errors)

Этот процесс повторяется с оксаа, затем 0x55, 0xff и, наконец, 0x00.

ArchLinux дал безоговорочное утверждение:

For some devices this will take a couple of days to complete.

NB. Тестирование началось около 8:30 вечера, тестирование было завершено до 8:45 следующего дня, для моей ситуации это заняло около 12 часов.

- Разрушительное тестирование - не единственный возможный метод.

Википедия предложила это утверждение:

badblocks -nvs /dev/sdb This would check the drive "sdb" in non-destructive read-write mode and display progress by writing out the block numbers as they are checked.

Моя текущая страница руководства по дистрибутиву подтверждает, что -n не является деструктивным.

-n Use non-destructive read-write mode. By default only a non- destructive read-only test is done.

И наконец, это того не стоит. заявление.

Суммарное утверждение, основанное на положении миллиардов сайтов памяти во флеш-чипе, отказ - это ячейка, которая уже была записана и стерта десятки тысяч раз, а сейчас терпит неудачу. И когда один тест показывает, что ячейка вышла из строя, помните, что каждый добавленный и удаленный файл выполняет эти циклы.

Идея здесь состоит в том, что, когда 1 ячейка выходит из строя, многие другие ячейки также достигают той же точки отказа. Сегодня одна ячейка вышла из строя, но вы обычно используете ее некоторое время дольше, потом еще 3 ячейки выходят из строя, затем еще 24, а затем 183, и, прежде чем вы это узнаете, массив памяти полон плохих мест. Есть только так много клеток, которые могут умереть, прежде чем ваша полезная емкость начнет падать, в конечном итоге быстро падает. Как вы узнаете, что больше клеток выходят из строя? Итак, посты здесь защищают ваши данные, говоря, что если у вас плохая ячейка, вы в значительной степени справились с задачей надежного хранения. Ваше использование может все еще дать вам несколько месяцев.

Это твои данные.

НТН

0

USB-накопители довольно просты, на них не так много проблем! Как правило, если он отображается как диск и его можно отформатировать, он работает. Вы можете попробовать взглянуть на Portable версию CrystalDiskInfo, поскольку это быстрый и легкий инструмент для анализа. Очень немногие USB-накопители сообщают SMART-информацию и тому подобное.

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