Wie überprüfe ich den physischen Zustand eines USB-Sticks unter Linux?

85

Wie überprüfe ich den Gesundheitszustand eines USB-Sticks?

Woher weiß ich, dass ein USB-Stick irreparabel oder reparabel ist?

valpa
quelle
12
Wirf es weg. Ihre investierte Zeit ist teurer als der Kauf einer neuen.
mailq
1
Ich muss @mailq zustimmen. Sie können in diesen Tagen für 2,00 US-Dollar ein anständiges 4-GB-USB-Stick kaufen.
Iglvzx
17
@iglvzx Nun, die Frage sagt nicht, ob es eine billige ist, oder einige + 32Gb schnell verschlüsseln ...
Varesa

Antworten:

69

Es gibt keine Möglichkeit, einen USB-Speicherstick nach SMART-ähnlichen Parametern abzufragen. Mir sind keine Memory Sticks bekannt, die dies auch über öffentlich verfügbare proprietäre Software unterstützen. Das Beste, was Sie tun können, ist zu überprüfen, ob Sie mit erfolgreich auf dem gesamten Gerät lesen und schreiben können badblocks.

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

Sie möchten einen der Schreibtests angeben, bei dem alle Daten auf dem Stick gelöscht werden. erst ein Backup machen.

Suchen Sie das Gerät, indem Sie dmesgnach dem Einstecken des USB-Sticks nachsehen. Sie sehen einen Gerätenamen (höchstwahrscheinlich sd_, dh sdc, sdd usw.) und Herstellerinformationen. Stellen Sie sicher, dass Sie das richtige Gerät verwenden!

Wenn der Stick mit einem gültigen Dateisystem formatiert ist, müssen Sie es möglicherweise unmountzuerst.

Beispielsyntax für einen USB-Stick mit der Aufzählung / dev / sdz, der Fortschrittsinformationen ausgibt und einen datenschädigenden Schreibtest und ein Fehlerprotokoll in die Datei usbstick.log schreibt:

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

Sie müssen den Stick danach neu partitionieren und formatieren, sofern er erfolgreich ist. Dieser Test wird alles auf dem Stick abwischen. Alle Fehler weisen auf einen Fehler des Speichercontrollers des Geräts hin, oder es sind keine freien Blöcke mehr vorhanden, um die fehlgeschlagenen Blöcke neu zuzuordnen. In diesem Fall kann keinem Bereich des Geräts vertraut werden.

Brett Dikeman
quelle
21
Badblocks ist wahrscheinlich die beste Option. In den Kommentaren, in denen "es nicht wert" steht, werden einige Fälle komplett übersehen, in denen dies dringend erforderlich sein kann (beispielsweise hat ein Unternehmen möglicherweise Waren-Flash-Laufwerke gekauft und möchte sehen, wie schwer sie betrogen wurden ...)
Richlv
2
Wie im verlinkten Wikipedia-Artikel erwähnt, werden diese Badblocks auch vom Dateisystem e2fsck -cverwendet badblocksund effektiv ausgeblendet, um beschädigte Schreibvorgänge zu vermeiden. Es sollte jedoch beachtet werden, dass die Festplatte, wenn sie neue Badblocks hat, wahrscheinlich beschädigt wird und später neue eintreffen können.
igorsantos07
1
Ich schlage vor, das Flag -v hinzuzufügen, um den Fehler auch in den Terminalfenstern zu sehen. (Wenn Sie es zum Beispiel über Nacht laufen lassen. Die Protokolldatei ist nicht so hilfreich für eine schnelle Ansicht, wie schlimm es ist.
Tilo
@BeeDee, sollten wir das ganze Gerät oder nur eine Partition verwenden oder spielt es keine Rolle? Ich meine / dev / sdz oder / dev / sdz1?
Mr. P
1
@Pisek Sie sollten das gesamte Gerät verwenden, da das Gerät ausfällt und nicht nur eine Partition.
Hallo-Engel
21

Über [ubuntu] Error Check USB Flash Drive fand ich schließlich Folgendes, was hilfreich sein könnte:

Ich kam zu den Blogs Fight Flash Fraud und SOSFakeFlash, die die Software H2testw (siehe hier oder hier) empfehlen, um Flash-Speicher zu testen. Ich habe H2testw heruntergeladen und dabei zwei Probleme festgestellt: (1) es ist nur für Windows und (2) es ist kein Open Source. Der Autor war jedoch so freundlich, eine Textdatei beizufügen, die erklärt, was sie tut. Diese Seite handelt von meiner GPLv3-Implementierung dieses Algorithmus.
Meine Implementierung ist einfach und zuverlässig, und ich weiß nicht genau, wie F3 mit H2testw verglichen wird, da ich H2testw noch nie ausgeführt habe. Ich nenne meine Implementierung F3, was für Fight Flash Fraud oder Fight Fake Flash steht.

Nachtrag von @pbhj: F3 ist in den Ubuntu-Repos. Es besteht aus zwei Teilen: f3write schreibt 1-GB-Dateien auf das Gerät und f3read versucht, sie anschließend zu lesen. Auf diese Weise werden Kapazität und Fähigkeit zum Schreiben und effektiven Lesen von Daten getestet.

sdaau
quelle
4
Gibt es einen Vorteil gegenüber F3 badblocks?
Zaz
14

Es kommt auf den Fehlermodus an, nehme ich an. Sie sind aus einem bestimmten Grund billig.

Wenn Sie als USB-Gerät den Bus über den Geräte-Manager in Windows oder die Ausgabe von dmesg in Linux überwachen, werden Sie darüber informiert, ob das Gerät überhaupt als angeschlossen erkannt wurde. Ist dies nicht der Fall, müssen Sie entweder den Controller an Bord oder die physischen Verbindungen überprüfen sind kaputt.

Wenn das Gerät als angeschlossen erkannt wird, aber nicht als Festplattencontroller identifiziert wird (und ich weiß nicht, wie das passieren könnte, aber ...), wird der Controller abgeschossen.

Wenn es als Laufwerk erkannt wird, Sie es jedoch nicht mounten können, können Sie es möglicherweise über fdisk reparieren, die Partitionstabelle neu schreiben und dann ein anderes Dateisystem erstellen.

Wenn Sie nach dem Äquivalent von SMART suchen , werden Sie es nicht finden. Thumbdrive-Controller sind billig. Sie sind Warenlager und sollen nicht die normalen Failafes und Intelligenz haben, die moderne Laufwerke haben.

Matt Simmons
quelle
2

Auf dem Weg bis heute hat dieser Thread einige Fragen aufgeworfen.

- Wie lange wird dies dauern (impliziert durch die Diskussion, es über Nacht laufen zu lassen).

Ich teste derzeit einen USB 3.0 128G Sandisk mit sudo badblocks -w -s -o, der an meine USB 3 / USBC PCIe-Karte in einem älteren Athlon 64x2 angeschlossen ist. USB3 in USB3 auf PCIe sollte also ziemlich schnell sein.

Hier ist meine Konsolenbefehlszeile bei 33% Abschluss:

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

und später nochmal:

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

Als nächstes kam dieses Segment:

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

Dieser Vorgang wiederholt sich mit oxaa, dann mit 0x55, 0xff und schließlich mit 0x00.

ArchLinux gab eine uneingeschränkte Erklärung ab:

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

NB: Der Test wurde gegen 20:30 Uhr gestartet. Der Test wurde vor 8:45 Uhr am nächsten Tag abgeschlossen. Für meine Situation dauerte der Test ungefähr 12 Stunden .

- Zerstörungsfreie Prüfung ist nicht die einzige mögliche Methode.

Wikipedia hat diese Aussage angeboten:

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.

Meine aktuelle Distributions-Manpage bestätigt, dass -n nicht destruktiv ist.

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

Und schließlich, dass es sich nicht lohnt. Aussage.

Bei einer zusammenfassenden Aussage, die auf der Situation von Milliarden von Speicherplätzen in einem Flash-Chip basiert, handelt es sich um eine Zelle, die bereits zehntausende Male beschrieben und gelöscht wurde und jetzt ausfällt. Und wenn ein Test zeigt, dass eine Zelle ausgefallen ist, denken Sie daran, dass jede von Ihnen hinzugefügte und gelöschte Datei diese Zyklen durchläuft.

Die Idee hier ist, dass, wenn eine Zelle ausfällt, viel mehr Zellen den gleichen Fehlerpunkt erreichen. Eine Zelle ist heute ausgefallen, aber Sie verwenden sie normalerweise eine Weile länger, dann fallen 3 weitere Zellen aus, dann fallen 24 weitere aus, dann 183, und bevor Sie es wissen, ist das Speicherarray mit schlechten Stellen übersät. Es gibt nur so viele Zellen, die absterben können, bevor Ihre nutzbare Kapazität zu sinken beginnt und schließlich schnell sinkt. Woher wissen Sie, dass mehr Zellen ausfallen? Daher schützen Posts hier Ihre Daten, indem sie sagen, sobald Sie eine fehlerhafte Zelle haben, sind Sie im Hinblick auf eine vertrauenswürdige Speicherung ziemlich fertig. Ihre Nutzung kann noch einige Monate dauern.

Es sind deine Daten.

HTH

Lee Dunbar
quelle
1

Viele Fehler sind entweder vollständig oder ermöglichen, dass ein Standort mehrere Standorte unterstützt. Ich habe ein kleines Zufallsschreib-Leseprogramm geschrieben, das eine Primzahl für einen Pseudozufallszahlengenerator verwendet, sowohl für Muster als auch für Adressen. Die Lesevorgänge sind hinter den Schreibvorgängen um genügend Seiten versetzt, um sicherzustellen, dass ich den RAM-Cache auf dem System nicht teste. Es ist noch nicht parametriert, nur für ein 64G-Gerät auf meinem System mit 8G-RAM eingerichtet. Sie können jederzeit kritisieren, parametrisieren und intelligenter gestalten.

Dies ist eine leistungsstarke Prüfung und schneller als jedes Byte von unten nach oben, aber auch ein großartiger Swap-Generator (bringt fast alles andere raus). Ich habe swapiness vorübergehend auf 1 gesetzt und es wurde langsamer, aber für andere Apps erträglicher. Tipps, wie Sie gegen Auslagerungen vorgehen können, sind ebenfalls willkommen:

$ 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 ;
        }
}
David Pickett
quelle
Die Verwendung einer Inc mit einer Potenz von 2 wie 1024 würde eine bessere Überprüfung von Bits mit hoher oder toter Adresse ermöglichen, obwohl nur 8 Bytes pro Hop überprüft werden.
David Pickett
Ja, dies wird den Fall von toten Höhen verpassen. Auch das Lesen und Schreiben im selben Durchgang kann
fehlschlagen
0

USB-Sticks sind ziemlich rudimentär, da kann nicht viel schief gehen! Wenn es als Laufwerk angezeigt wird und Sie es formatieren können, funktioniert es im Allgemeinen. Sie können versuchen, sich die Portable-Version von CrystalDiskInfo anzuschauen, da es sich um ein schnelles, kompaktes Analysetool handelt. Nur sehr wenige USB-Sticks geben SMART-Informationen und ähnliches zurück.

SimonJGreen
quelle
1
Als Referenz finden Sie hier das Crystal Disk Info-Handbuch in englischer Sprache: crystalmark.info/software/CrystalDiskInfo/manual-de
Matt Simmons