it-swarm.com.de

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

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

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

76
valpa

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 badblocks erfolgreich auf dem gesamten Gerät lesen und schreiben können.

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 nach dem Einstecken des USB-Sticks auf dmesg schauen. 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 ihn möglicherweise zuerst unmount.

Beispielsyntax für einen USB-Stick mit der Aufzählung/dev/sdz, der Fortschrittsinformationen ausgibt und ein datenschädigendes Test- und Fehlerprotokoll in 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 fehlgeschlagene Blöcke neu zuzuordnen. In diesem Fall kann keinem Bereich des Geräts vertraut werden.

66
Brett Dikeman

Über [ubuntu] Fehler beim Überprüfen des USB-Flash-Laufwerks 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.

19
sdaau

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 S.M.A.R.T. 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.

14
Matt Simmons

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 leistungsfähige 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 ;
        }
}
1
David Pickett

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

- Wie lange wird das 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. Er ist mit meiner USB 3/USBC PCIe-Karte in einem älteren Athlon 64x2 verbunden. USB3 in USB3 auf PCIe sollte also recht 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 war vor 20:45 Uhr am nächsten Tag abgeschlossen und dauerte ungefähr 12 Stunden für meine Situation .

- Zerstörende 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 das es ist es nicht wert. 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 geschrieben 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 sterben können, bevor Ihre nutzbare Kapazität zu sinken beginnt und schließlich schnell sinkt. Woher wissen Sie, dass mehr Zellen ausfallen? Also, Beiträge hier schützen Ihre Daten, indem sie sagen, sobald Sie eine schlechte Zelle haben, sind Sie ziemlich fertig in Bezug auf vertrauenswürdige Speicherung. Ihre Nutzung kann noch einige Monate dauern.

Es sind deine Daten.

HTH

0
Lee Dunbar

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 anzusehen, da dies ein schnelles, leichtes Analysetool ist. Sehr wenige USB-Sticks geben jedoch S.M.A.R.T.-Informationen und dergleichen zurück.

0
SimonJGreen