Linux'ta bir USB belleğin fiziksel sağlığı nasıl kontrol edilir?


85

Bir USB çubuğunun sağlık durumu nasıl kontrol edilir?

Bir USB'nin onarılamayacak veya arızalanabileceğini nasıl bilebilirim?


12
Onu uzağa fırlat. Yatırım yaptığınız zaman yenisini almaktan daha pahalıdır.
mailq

1
@Mailq ile aynı fikirdeyim. Bugünlerde 2,00 $ karşılığında 4 GB'lık iyi bir sürücü satın alabilirsiniz.
iglvzx

17
@iglvzx Peki, soru ucuz bir tane mi, yoksa hızlı bir tane şifreleyen bazı + 32Gb ise ...
varesa

Yanıtlar:


69

SMART benzeri parametreler için bir USB bellek çubuğunu sorgulamanın bir yolu yoktur; Herkese açık tescilli yazılımlar aracılığıyla bile bunu destekleyen herhangi bir bellek çubuğunun farkında değilim. Yapabileceğiniz en iyi şey, kullanarak tüm cihaza başarıyla okuyup + yazabildiğinizi kontrol etmektir badblocks.

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

Çubuktaki tüm verileri silecek yazma testlerinden birini belirlemek istiyorsunuz; ilk önce bir yedekleme yapın.

dmesgUSB çubuğunu taktıktan sonra bakarak cihazı bulun ; Bir cihaz adı (büyük olasılıkla sd_, yani sdc, sdd, vb.) ve üretici bilgilerini göreceksiniz. Doğru cihazı kullandığınızdan emin olun!

Çubuk geçerli bir dosya sistemiyle biçimlendirilmişse, önce bunu kullanmanız gerekebilir unmount.

/ Dev / sdz olarak numaralandırılmış bir USB çubuğu için, ilerleme bilgisinin çıktısını alan, veri-yıkıcı yazma testi ve usbstick.log'a yazılan hata günlüğü ile örnek sözdizimi:

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

Sopa geçtikten sonra yeniden bölümlendirmeniz ve daha sonra yeniden biçimlendirmeniz gerekir; Bu test çubuktaki her şeyi silecektir. Herhangi bir arıza, cihazın hafıza kontrol ünitesinde bir arıza olduğunu veya başarısız blokları yeniden eşleştirmek için yedek blokların tükendiğini gösterir. Bu durumda, cihazın hiçbir bölgesine güvenilemez.


21
badblocks muhtemelen en iyi seçenektir. "worth it" Bu çok (örneğin, bir şirket mal flashdrives satın almış olabilir ve onlar kandırdı ne kadar hasar görmek istiyorum ...) gerekli olabilir tamamen özledim birkaç vaka say yorumlar
Richlv

2
bağlantılı wikipedia makalesinde işaret edildiği gibi , dosya sisteminde bu kötü engelleri e2fsck -ckullanan badblocksve etkili bir şekilde saklayan, böylece bozuk yazı yazmaktan kaçınan bir de var. Bununla birlikte, eğer disk yeni badblock'lar alırsa muhtemelen zarar göreceği ve yenilerinin daha sonra ortaya çıkabileceği, ömrünün kısaldığı ve değiştirmeyi düşünmeniz gerektiği unutulmamalıdır.
igorsantos07

1
-V bayrağını eklemeyi öneriyorum, hatayı terminal pencerelerinde görebiliyorum. (örneğin gece boyunca çalışmasına izin verirseniz. Günlük dosyası, ne kadar kötü olduğunu hızlı bir şekilde görmek için o kadar da yardımcı olmaz.
Tilo

@BeeDee, tüm cihazı mı kullanmalıyız yoksa sadece bazı bölümleri mi kullanmalıyız? / Dev / sdz veya / dev / sdz1 demek?
Bay P,

1
@Pisek tüm aygıtı kullanmanız gerekir, çünkü aygıt yalnızca bir bölüm değil, aygıtın arızalanmasıdır.
Hi-Angel,

21

Via [ubuntu] Hata Kontrol USB Flash Drive , sonunda yararlı olabilecek şekilde, bu bulundu:

Flash hafızalarını test etmek için H2testw yazılımını (buraya veya buraya bakın) tavsiye eden Fight Flash Fraud ve SOSFakeFlash bloglarına geldim. H2testw'i indirdim ve onunla iki konu buldum: (1) yalnızca Windows için ve (2) açık kaynak değil. Ancak, yazarı ne yaptığını açıklayan bir metin dosyası içerecek kadar kibardı; bu sayfa bu algoritmanın GPLv3 uygulaması ile ilgili.
Uygulamam basit ve güvenilirdir ve F3'ü H2testw ile nasıl karşılaştırdığımı tam olarak bilmiyorum çünkü hiç H2testw kullanmıyorum. Uygulama F3'ü, Fight Flash Dolandırıcılığı veya Fight Fake Flash için kısa olanı diyorum.

@Pbhj tarafından Zeyilname: F3 Ubuntu depolarında. İki bölümü vardır, f3write cihaza 1GB dosya yazar ve daha sonra bunları okumaya çalışır. Bu şekilde veri yazma ve etkin biçimde okuma kapasitesi ve kabiliyeti test edilir.


4
F3'e göre herhangi bir avantajı var mı badblocks?
Zaz


14

Sanırım başarısızlık moduna bağlı. Bir sebepten ucuzlar.

Bir USB aygıtı olarak, otobüsü Windows'ta aygıt yöneticisi veya Linux'ta dmesg çıktısı üzerinden izlemek, aygıtın fişe takılı olduğunu bile kabul edip etmediğini size söyleyecektir. kırıldı.

Aygıtın fişe takılı olduğu kabul edilir ancak disk denetleyicisi olarak tanımlanmazsa (ve bunun nasıl olacağını bilmiyorum, ancak…) denetleyici vurulur.

Bir disk sürücüsü olarak tanınıyorsa, ancak bunu bağlayamıyorsanız, fdisk aracılığıyla onarabilir ve bölüm tablosunu yeniden yazabilir ve ardından başka bir dosya sistemi oluşturabilirsiniz.

SMART’ın eşdeğerini arıyorsanız , bulamazsınız. Thumbdrive kontrolörleri ucuzdur. Bunlar emtia depolarıdır ve modern sürücülerin sahip olduğu normal arızalara ve zekaya sahip olmaları amaçlanmamıştır.


2

Bugüne kadar bu konu bazı sorular ortaya attı.

- Bu ne kadar sürecek (gece boyunca çalışmasına izin verilmesi tartışması ile belirtilecektir).

Şu anda bir USB 3.0 128G Sandisk kullanarak test ediyorum sudo badblocks -w -s -o, USB 3 / USBC PCIe kartımı eski bir Athlon 64x2'de bağlı. Bu nedenle, PCIe'deki USB3'ün USB3'e oldukça hızlı olması gerekir.

İşte benim konsol komut satırı% 33 tamamlandığında:

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

ve sonra tekrar:

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

Sonra bu segment geldi:

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

Bu işlem oxaa, sonra 0x55, 0xff ve nihayet 0x00 ile tekrarlanır.

ArchLinux niteliksiz bir ifade verdi:

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

Not: Test sabah 8:30 civarında başlamış, ertesi gün sabah saat 8: 45'ten önce ve durumum için yaklaşık 12 saat içinde tamamlanmış .

- Yıkıcı test mümkün olan tek yöntem değildir.

Wikipedia bu ifadeyi teklif etti:

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.

Geçerli dağıtım sayfam, -n'nin tahribatsız olduğunu onaylar.

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

Ve sonunda buna değmez. Beyan.

Bir flaş çipindeki milyarlarca bellek sitesinin durumuna dayanan bir özet, başarısızlık, on binlerce kez önceden yazılmış ve silinmiş ve şimdi başarısız olan bir hücredir. Bir test bir hücrenin başarısız olduğunu gösterdiğinde, eklediğiniz ve sildiğiniz her dosyanın bu döngüleri çalıştırdığını unutmayın.

Buradaki fikir, 1 hücre başarısız olduğunda, daha fazla hücrenin de aynı başarısızlık noktasına ulaştığıdır. Bugün bir hücre başarısız oldu, ancak bir süre daha normalde kullanıyorsunuz, sonra 3 hücre daha başarısız oluyor, sonra 24 tane daha başarısız oluyor, sonra 183 ve bunu öğrenmeden önce, bellek dizisi kötü noktalarla dolu. Kullanılabilir kapasiteniz düşmeden, sonra hızla düşmeden ölen çok fazla hücre var. Daha fazla hücrenin başarısız olduğunu nasıl bileceksiniz? Yani, buradaki gönderiler, kötü bir hücreniz olduğunda, güvenilir depolama konusunda oldukça başarılı olduğunuzu söyleyerek verilerinizi koruyor. Kullanımınız hala birkaç ay sürebilir.

Bu senin verinin.

HTH


1

Birçok hata tamamlanmış veya bir konumun birden fazla konumu desteklemesine izin vermiştir. Hem kalıplar hem de adresler için sözde rastgele sayı üreteci için asal sayı kullanan küçük bir rasgele yazma okuma programı yazdım. Sistemdeki ram önbelleğini test etmediğimden emin olmak için okuma yazma işleminin arkasında yeterince sayfa kalıyor. Henüz parametrelendirilmedi, sadece sistemimde 8G ram olan 64G cihazı için ayarlandı. Eleştirmekten, parametreleştirmekten, daha akıllı hale getirmekten çekinmeyin.

Bu güçlü bir kontrol ve her byte'ı yukarıdan aşağıya çekmekten daha hızlı, ancak aynı zamanda harika bir takas jeneratörüdür (hemen hemen diğer her şeyi çıkarır). Değişkenliği geçici olarak 1'e koydum ve diğer uygulamalar için daha yavaş ama daha tolere edilebilir hale geldi. Takas yerine nasıl ayar yapılacağına dair herhangi bir ipucu da takdir edilecektir:

$ sudo ksh -c 'yankı 1> / proc / sys / vm / değiş tokuş'

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

1024 gibi 2'lik bir güç kullanmak, sekme başına yalnızca 8 baytı kontrol etmesine rağmen daha iyi kontrol veya ölü yüksek adres bitlerine izin verir.
David Pickett

evet, bu ölü yüksek bit durumunu özleyecektir. Ayrıca okur ve aynı geçişte yazar bunu özledim,
user313114

0

USB sürücüler oldukça basit, üzerlerinde yanlış gidebilecek pek bir şey yok! Genel olarak, eğer bir sürücü olarak görünürse ve onu biçimlendirebilirseniz çalışır. CrystalDiskInfo’nın Taşınabilir sürümüne bir göz atmayı deneyebilirsiniz, çünkü hızlı bir analiz aracı. Çok az sayıda USB çubuğu SMART bilgisi ve benzerlerini geri bildirir.


1
Başvuru için, burada İngilizce Kristal Disk Bilgisi kılavuzu: crystalmark.info/software/CrystalDiskInfo/manual-en
Matt Simmons
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.