Bagaimana cara memeriksa kesehatan fisik USB stick di Linux?


85

Bagaimana cara memeriksa status kesehatan stik USB?

Bagaimana saya tahu bahwa USB rusak tidak dapat diperbaiki, atau diperbaiki?


12
Membuangnya. Waktu yang Anda investasikan lebih mahal daripada membeli yang baru.
mailq

1
Saya harus setuju dengan @mailq. Anda dapat membeli thumb drive 4 GB yang layak untuk $ 2,00 hari ini.
iglvzx

17
@iglvzx Nah pertanyaannya tidak memberi tahu, apakah itu yang murah, atau + 32GB mengenkripsi satu dengan cepat ...
varesa

Jawaban:


69

Tidak ada cara untuk meminta memory stick USB untuk parameter seperti-SMART; Saya tidak mengetahui adanya memory stick yang mendukung melakukannya bahkan melalui perangkat lunak berpemilik yang tersedia untuk umum. Yang terbaik yang dapat Anda lakukan adalah memeriksa apakah Anda berhasil membaca + menulis ke seluruh perangkat menggunakan badblocks.

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

Anda ingin menentukan salah satu tes tulis, yang akan menghapus semua data pada tongkat; buat cadangan dulu.

Temukan perangkat dengan melihat dmesgsetelah mencolokkan stik USB; Anda akan melihat nama perangkat (kemungkinan besar sd_, yaitu sdc, sdd, dll.) dan informasi produsen. Pastikan Anda menggunakan perangkat yang tepat!

Jika stik diformat dengan sistem file yang valid, Anda mungkin harus melakukannya unmountterlebih dahulu.

Contoh sintaks, untuk stik USB yang disebutkan sebagai / dev / sdz, mengeluarkan informasi kemajuan, dengan tes tulis data yang merusak dan log kesalahan yang ditulis ke usbstick.log:

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

Anda perlu melakukan partisi ulang dan memformat ulang tongkat setelahnya, dengan asumsi tongkat itu lewat; tes ini akan menghapus semua yang ada pada tongkat. Setiap kegagalan mengindikasikan kegagalan pengontrol memori perangkat, atau telah kehabisan blok cadangan untuk memetakan kembali blok yang gagal. Dalam hal ini, tidak ada area perangkat yang dapat dipercaya.


21
badblocks mungkin merupakan opsi terbaik. komentar yang mengatakan "tidak sepadan" benar-benar kehilangan beberapa kasus ketika ini bisa sangat dibutuhkan (misalnya, perusahaan mungkin telah membeli flashdrives barang dagangan, dan ingin melihat betapa buruknya mereka scammed ...)
Richlv

2
seperti yang ditunjukkan dalam artikel wikipedia tertaut, ada juga e2fsck -cyang menggunakan badblocksdan secara efektif menyembunyikan badblock dari sistem file, sehingga menghindari penulisan yang rusak. Namun perlu dicatat bahwa, jika disk mendapat badblock baru mungkin rusak dan yang baru akan muncul kemudian, yang berarti hidupnya lebih pendek dan Anda harus mempertimbangkan untuk menggantinya.
igorsantos07

1
Saya sarankan menambahkan flag -v juga melihat kesalahan di windows terminal. (Jika Anda membiarkannya berjalan pada malam hari misalnya. Logfile tidak membantu untuk melihat sekilas betapa buruknya itu.
Tilo

@ Beeeee, haruskah kita menggunakan seluruh perangkat atau hanya beberapa partisi atau tidak masalah? Maksud saya / dev / sdz atau / dev / sdz1?
Tn. P

1
@Pisek Anda harus menggunakan seluruh perangkat, karena itu adalah perangkat gagal, bukan hanya partisi.
Hi-Angel

21

Melalui [ubuntu] Kesalahan Periksa USB Flash Drive , saya akhirnya menemukan ini, yang dapat membantu:

Saya tiba di blog Fight Flash Fraud dan SOSFakeFlash, yang merekomendasikan perangkat lunak H2testw (lihat di sini atau di sini) untuk menguji memori flash. Saya mengunduh H2testw dan menemukan dua masalah: (1) hanya untuk Windows, dan (2) bukan open source. Namun, penulisnya cukup baik untuk memasukkan file teks yang menjelaskan apa yang dilakukannya; halaman ini adalah tentang implementasi GPLv3 saya dari algoritma itu.
Implementasi saya sederhana dan dapat diandalkan, dan saya tidak tahu persis bagaimana F3 dibandingkan dengan H2testw karena saya belum pernah menjalankan H2testw. Saya menyebut implementasi saya F3, yang merupakan kependekan dari Fight Flash Fraud, atau Fight Fake Flash.

Tambahan oleh @pbhj: F3 ada di repo Ubuntu. Ini memiliki dua bagian, f3write menulis file 1GB ke perangkat dan f3membaca upaya untuk membacanya setelah itu. Dengan cara ini, kemampuan dan kemampuan untuk menulis dan membaca data secara efektif diuji.


4
Apakah ada keuntungan bagi F3 badblocks?
Zaz


14

Tergantung pada mode kegagalan, saya kira. Mereka murah karena suatu alasan.

Sebagai perangkat USB, menonton bus melalui manajer perangkat di Windows atau output dari dmesg di Linux akan memberi tahu Anda jika perangkat tersebut bahkan dikenali dicolokkan. Jika tidak, maka baik controller di papan atau koneksi fisik. rusak.

Jika perangkat dikenali dicolokkan, tetapi tidak dapat diidentifikasi sebagai pengontrol disk (dan saya tidak tahu bagaimana itu bisa terjadi, tapi ...) maka pengontrol ditembak.

Jika dikenali sebagai disk drive, tetapi Anda tidak bisa memasangnya, Anda mungkin dapat memperbaikinya melalui fdisk dan menulis ulang tabel partisi, kemudian membuat sistem file lain.

Jika Anda mencari yang setara dengan SMART , maka Anda tidak akan menemukannya. Kontroler Thumbdrive murah. Mereka penyimpanan komoditas, dan tidak dimaksudkan untuk memiliki kegagalan normal dan kecerdasan yang dimiliki drive modern.


2

Sepanjang jalan ke hari ini, utas ini mengangkat beberapa pertanyaan.

- Berapa lama ini berlangsung (tersirat oleh diskusi tentang membiarkannya berjalan dalam semalam).

Saat ini saya sedang menguji menggunakan USB 3.0 128G Sandisk sudo badblocks -w -s -o, itu terhubung ke kartu USB 3 / USBC PCIe saya di Athlon 64x2 yang lebih tua. Jadi, USB3 ke USB3 pada PCIe harus cukup cepat.

Ini adalah baris perintah konsol saya di 33% selesai:

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

dan lagi nanti:

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

Berikutnya adalah segmen ini:

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

Proses ini berulang dengan oxaa, lalu 0x55, 0xff, dan akhirnya 0x00.

ArchLinux memberikan pernyataan wajar tanpa pengecualian:

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

NB: Pengujian dimulai sekitar jam 8.30 malam, pengujian selesai sebelum jam 8.45 pagi hari berikutnya, selesai sekitar 12 jam untuk situasi saya .

- Pengujian destruktif bukan satu-satunya metode yang mungkin.

Wikipedia menawarkan pernyataan ini:

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.

Halaman manual distro saya saat ini menegaskan -n tidak rusak.

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

Dan akhirnya itu tidak layak. pernyataan.

Pernyataan meringkas, berdasarkan situasi miliaran situs memori dalam chip flash, kegagalan adalah sel yang telah ditulis dan dihapus puluhan ribu kali, dan sekarang gagal. Dan ketika satu pengujian menunjukkan sel gagal, ingatlah bahwa setiap file yang Anda tambahkan dan hapus menjalankan siklus itu.

Idenya di sini adalah bahwa ketika 1 sel gagal, lebih banyak sel juga mencapai titik kegagalan yang sama. Satu sel gagal hari ini, tetapi Anda menggunakannya secara normal untuk waktu yang lebih lama, kemudian 3 sel lagi gagal, kemudian 24 lebih banyak gagal, kemudian 183, dan sebelum Anda menyadarinya, susunan memori penuh dengan bintik-bintik buruk. Hanya ada begitu banyak sel yang bisa mati sebelum kapasitas Anda yang dapat digunakan mulai turun, akhirnya jatuh dengan cepat. Bagaimana Anda tahu lebih banyak sel gagal? Jadi, posting di sini menjaga data Anda dengan mengatakan setelah Anda memiliki sel yang buruk, Anda cukup banyak melakukan dalam hal penyimpanan yang dapat dipercaya. Penggunaan Anda mungkin masih memberi Anda beberapa bulan.

Ini data Anda.

HTH


1

Banyak kegagalan yang lengkap atau memungkinkan satu lokasi untuk mendukung banyak lokasi. Saya menulis sebuah program baca tulis acak kecil yang menggunakan bilangan prima untuk pembangkit bilangan pseudo-acak, baik untuk pola maupun alamat. Bacaan terhuyung-huyung di belakang menulis oleh halaman cukup untuk memastikan saya tidak menguji ram cache pada sistem. Itu belum parameter, hanya mengatur untuk perangkat 64G di sistem saya dengan ram 8G. Jangan ragu untuk mengkritik, membuat parameter, membuatnya lebih pintar.

Ini adalah pemeriksaan yang kuat dan lebih cepat daripada melakukan setiap byte dari bawah ke atas, tetapi juga merupakan generator swap yang hebat (memutar hampir semua yang lainnya). Saya menempatkan swapiness pada 1 untuk sementara dan menjadi lebih lambat tetapi lebih dapat ditoleransi untuk aplikasi lain. Setiap tips tentang cara menyetel terhadap swapout juga akan dihargai:

$ 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 ;
        }
}

Menggunakan inc kekuatan 2 seperti 1024 akan memungkinkan pengecekan yang lebih baik atau mati bit alamat tinggi, meskipun hanya memeriksa 8 byte per hop.
David Pickett

ya, ini akan melewatkan kasus bit tinggi mati. juga melakukan membaca dan menulis dalam pass yang sama dapat melewatkan itu,
user313114

0

USB drive sangat sederhana, tidak banyak yang bisa salah pada mereka! Secara umum, jika itu muncul sebagai drive dan Anda dapat memformatnya maka itu berfungsi. Anda dapat mencoba melihat versi Portable dari CrystalDiskInfo karena itu adalah alat analisis ringan yang cepat. Sangat sedikit USB stick melaporkan kembali informasi SMART dan sejenisnya.


1
Untuk referensi, inilah manual Crystal Disk Info dalam bahasa Inggris: crystalmark.info/software/CrystalDiskInfo/manual-en
Matt Simmons
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.