Jak sprawdzić stan zdrowia pamięci USB?
Skąd mam wiedzieć, że USB jest uszkodzony nie do naprawienia lub naprawy?
Jak sprawdzić stan zdrowia pamięci USB?
Skąd mam wiedzieć, że USB jest uszkodzony nie do naprawienia lub naprawy?
Odpowiedzi:
Nie ma możliwości zapytania karty pamięci USB o parametry podobne do SMART; Nie znam żadnych kart pamięci, które by to wspierały, nawet za pośrednictwem publicznie dostępnego zastrzeżonego oprogramowania. Najlepsze, co możesz zrobić, to sprawdzić, czy możesz pomyślnie czytać i zapisywać na całym urządzeniu za pomocą badblocks
.
https://en.wikipedia.org/wiki/Badblocks
Chcesz określić jeden z testów zapisu, który usunie wszystkie dane z pamięci; najpierw wykonaj kopię zapasową.
Znajdź urządzenie, patrząc dmesg
po podłączeniu pamięci USB; zobaczysz nazwę urządzenia (najprawdopodobniej sd_, tj. sdc, sdd itp.) oraz informacje o producencie. Upewnij się, że używasz odpowiedniego urządzenia!
Jeśli pamięć sformatowana jest przy użyciu prawidłowego systemu plików, być może trzeba unmount
go najpierw.
Przykładowa składnia dla pamięci USB wyliczonej jako / dev / sdz, wysyłająca informacje o postępie, z niszczącym dane testem zapisu i dziennikiem błędów zapisanym na usbstick.log:
sudo badblocks -w -s -o usbstick.log /dev/sdz
Musisz później podzielić na partycje i sformatować patyk, zakładając, że mija; ten test wyczyści wszystko na patyku. Wszelkie awarie wskazują na awarię kontrolera pamięci urządzenia lub zabrakło mu zapasowych bloków do ponownego mapowania uszkodzonych bloków. W takim przypadku nie można ufać żadnemu obszarowi urządzenia.
e2fsck -c
taki, który wykorzystuje badblocks
i skutecznie ukrywa te złe blokady przed systemem plików, unikając w ten sposób uszkodzonych zapisów. Należy jednak zauważyć, że jeśli dysk ma nowe uszkodzone bloki, prawdopodobnie ulega uszkodzeniu, a nowe mogą pojawić się później, co oznacza, że jego żywotność ulega skróceniu i należy rozważyć jego wymianę.
Za pomocą [ubuntu] Error Check USB Flash Drive , w końcu znalazłem to, co może być pomocne:
Doszedłem do blogów Fight Flash Fraud i SOSFakeFlash, które polecają oprogramowanie H2testw (patrz tutaj lub tutaj) do testowania pamięci flash. Pobrałem H2testw i znalazłem z nim dwa problemy: (1) dotyczy tylko systemu Windows i (2) nie jest oprogramowaniem typu open source. Jednak jego autor był na tyle uprzejmy, aby dołączyć plik tekstowy, który wyjaśnia, co robi; ta strona dotyczy mojej implementacji tego algorytmu w GPLv3.
Moja implementacja jest prosta i niezawodna i nie wiem dokładnie, jak F3 wypada w porównaniu do H2testw, ponieważ nigdy nie korzystałem z H2testw. Nazywam swoją implementację F3, skrót od Fight Flash Fraud lub Fight Fake Flash.
Dodatek autorstwa @pbhj: F3 znajduje się w repozytoriach Ubuntu. Składa się z dwóch części, f3write zapisuje 1 GB plików na urządzeniu, a f3read próbuje je później odczytać. W ten sposób testowana jest zdolność i zdolność do zapisu i skutecznego odczytu danych.
badblocks
?
To chyba zależy od trybu awarii. Są tanie z jakiegoś powodu.
Jako urządzenie USB oglądanie magistrali za pomocą menedżera urządzeń w systemie Windows lub danych wyjściowych z dmesg w systemie Linux pokaże, czy urządzenie jest nawet rozpoznawane jako podłączone. Jeśli tak nie jest, to kontroler na pokładzie lub połączenia fizyczne są zepsute.
Jeśli urządzenie zostanie rozpoznane jako podłączone, ale nie zostanie zidentyfikowane jako kontroler dysku (i nie wiem, jak to się mogło stać, ale ...), wówczas kontroler zostanie zastrzelony.
Jeśli zostanie rozpoznany jako dysk, ale nie można go zamontować, być może będzie można go naprawić za pomocą programu fdisk i przepisać tablicę partycji, a następnie utworzyć inny system plików.
Jeśli szukasz odpowiednika SMART , nie znajdziesz go. Kontrolery Thumbdrive są tanie. Są to magazyny towarów i nie mają normalnych awarii i inteligencji, jakie mają współczesne dyski.
W drodze do dzisiaj ten wątek wywołał kilka pytań.
- Jak długo to potrwa (sugerowane przez dyskusję dotyczącą umożliwienia działania przez noc).
Obecnie testuję Sandisk USB 3.0 128G za pomocą sudo badblocks -w -s -o
, jest on podłączony do mojej karty USB 3 / USBC PCIe w starszym Athlonie 64x2. Tak więc USB3 do USB3 na PCIe powinien być dość szybki.
Oto moja linia poleceń konsoli przy ukończeniu 33%:
Testing with pattern 0xaa: 33.35% done, 49:47 elapsed. (0/0/0 errors)
i znowu później:
Testing with pattern 0xaa: 54.10% done, 1:17:04 elapsed. (0/0/0 errors)
Następnie przyszedł ten segment:
Reading and comparing: 43.42% done, 2:23:44 elapsed. (0/0/0 errors)
Ten proces powtarza się z oxaa, następnie 0x55, 0xff, a na koniec 0x00.
ArchLinux wydał niekwalifikowane oświadczenie:
For some devices this will take a couple of days to complete.
Uwaga: Testy rozpoczęto około 20:30, testy zakończono przed 8:45 następnego dnia, w mojej sytuacji za około 12 godzin .
- Testy niszczące nie są jedyną możliwą metodą.
Wikipedia przedstawiła to oświadczenie:
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.
Moja aktualna strona podręcznika dystrybucji potwierdza, że -n nie jest destrukcyjne.
-n Use non-destructive read-write mode. By default only a non-
destructive read-only test is done.
I wreszcie, że nie jest tego warte. komunikat.
Podsumowujące stwierdzenie, oparte na sytuacji miliardów miejsc pamięci w układzie flash, awaria to komórka, która została już napisana i usunięta dziesiątki tysięcy razy, a teraz zawodzi. A gdy jeden test wykaże, że komórka uległa awarii, pamiętaj, że każdy dodany i usunięty plik uruchamia te cykle.
Chodzi o to, że gdy jedna komórka ulegnie awarii, znacznie więcej komórek osiąga ten sam punkt awarii. Jedna komórka zawiodła dzisiaj, ale używasz jej normalnie przez chwilę dłużej, następnie 3 kolejne komórki zawodzą, następnie 24 kolejne zawodzą, a następnie 183, a zanim się zorientujesz, tablica pamięci jest pełna złych miejsc. Jest tylko tyle komórek, które mogą umrzeć, zanim twoja użyteczna pojemność zacznie spadać, ostatecznie spadając gwałtownie. Skąd będziesz wiedzieć, że więcej komórek zawodzi? Tak więc posty tutaj chronią twoje dane, mówiąc, że gdy masz złą komórkę, jesteś prawie gotowy pod względem wiarygodnego przechowywania. Twoje użycie może jeszcze dać ci kilka miesięcy.
To twoje dane.
HTH
Wiele awarii jest kompletnych lub pozwala jednej lokalizacji na obsługę wielu lokalizacji. Napisałem mały losowy program do odczytu, który używa liczby pierwszej dla generatora liczb pseudolosowych, zarówno dla wzorów, jak i adresów. Odczyty są przesunięte w czasie za zapisami o wystarczającą liczbę stron, aby upewnić się, że nie testuję pamięci podręcznej pamięci RAM w systemie. Nie jest jeszcze sparametryzowany, wystarczy skonfigurować urządzenie 64G w moim systemie z ram 8G. Możesz krytykować, parametryzować, uczynić go mądrzejszym.
Jest to potężne sprawdzanie i szybsze niż wykonywanie każdego bajtu od dołu do góry, ale jest także doskonałym generatorem zamiany (zrzuca prawie wszystko inne). Tymczasowo ustawiłem zamianę na 1 i stało się to wolniejsze, ale bardziej tolerowane przez inne aplikacje. Będziemy wdzięczni za wszelkie wskazówki, jak dostroić się do zamiany:
$ 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 ;
}
}
Dyski USB są dość szczątkowe, nie ma w nich nic złego! Ogólnie rzecz biorąc, jeśli pokazuje się jako dysk i można go sformatować, to działa. Możesz spróbować przyjrzeć się przenośnej wersji CrystalDiskInfo, ponieważ jest to szybkie i lekkie narzędzie do analizy. Jednak bardzo niewiele pamięci USB przekazuje informacje SMART i tym podobne.