จะตรวจสอบสถานะสุขภาพของอุปกรณ์ USB ได้อย่างไร?
ฉันจะรู้ได้อย่างไรว่า USB นั้นเสียเกินกว่าจะซ่อมหรือซ่อมได้
จะตรวจสอบสถานะสุขภาพของอุปกรณ์ USB ได้อย่างไร?
ฉันจะรู้ได้อย่างไรว่า USB นั้นเสียเกินกว่าจะซ่อมหรือซ่อมได้
คำตอบ:
ไม่มีวิธีสอบถามหน่วยความจำ USB สำหรับพารามิเตอร์ที่คล้ายสมาร์ท ฉันไม่ทราบว่ามีหน่วยความจำแท่งใดที่สนับสนุนการทำเช่นนี้แม้ผ่านซอฟต์แวร์ที่เป็นกรรมสิทธิ์ของสาธารณชน วิธีที่ดีที่สุดที่คุณสามารถทำได้คือตรวจสอบว่าคุณสามารถอ่าน + เขียนไปยังอุปกรณ์ทั้งหมด badblocks
ได้สำเร็จ
https://en.wikipedia.org/wiki/Badblocks
คุณต้องการระบุหนึ่งในการทดสอบการเขียนซึ่งจะล้างข้อมูลทั้งหมดที่ติด; ทำการสำรองข้อมูลก่อน
ค้นหาอุปกรณ์โดยดูdmesg
หลังจากเสียบปลั๊ก USB; คุณจะเห็นชื่ออุปกรณ์ (น่าจะเป็น sd_, เช่น sdc, sdd, ฯลฯ ) และข้อมูลผู้ผลิต ตรวจสอบให้แน่ใจว่าคุณใช้อุปกรณ์ที่เหมาะสม!
หากไม้ถูกฟอร์แมทด้วยระบบไฟล์ที่ถูกต้องคุณอาจต้องใช้unmount
มันก่อน
ตัวอย่างไวยากรณ์สำหรับแท่ง USB ที่ระบุเป็น / dev / sdz แสดงผลข้อมูลความคืบหน้าพร้อมการทดสอบการเขียนข้อมูลแบบทำลายข้อมูลและบันทึกข้อผิดพลาดที่เขียนไปยัง usbstick.log:
sudo badblocks -w -s -o usbstick.log /dev/sdz
คุณจะต้องแบ่งพาร์ติชั่นและฟอร์แมตใหม่หลังจากนั้น การทดสอบนี้จะเช็ดทุกอย่างที่ติด ความล้มเหลวใด ๆ บ่งบอกถึงความล้มเหลวของตัวควบคุมหน่วยความจำของอุปกรณ์หรือมีบล็อกสำรองว่างเปล่าเพื่อทำการแมปบล็อกที่ล้มเหลวอีกครั้ง ในกรณีนั้นพื้นที่ของอุปกรณ์ไม่สามารถเชื่อถือได้
e2fsck -c
ใช้badblocks
และซ่อน badblocks เหล่านั้นจากระบบไฟล์อย่างมีประสิทธิภาพดังนั้นจึงหลีกเลี่ยงการเขียนที่เสียหาย ควรสังเกตว่าหากดิสก์มีแบดบล๊อคใหม่อาจได้รับความเสียหายและอาจจัดใหม่ในภายหลังซึ่งหมายความว่าอายุการใช้งานสั้นลงและคุณควรพิจารณาแทนที่มัน
จากข้อผิดพลาด [ubuntu] ตรวจสอบ USB Flash Driveฉันพบสิ่งนี้ในที่สุดซึ่งอาจเป็นประโยชน์:
ฉันมาที่บล็อก Fight Flash Fraud และ SOSFakeFlash ซึ่งแนะนำซอฟต์แวร์ H2testw (ดูที่นี่หรือที่นี่) เพื่อทดสอบความทรงจำแฟลช ฉันดาวน์โหลด H2testw และพบปัญหาสองประการ: (1) สำหรับ Windows เท่านั้นและ (2) ไม่ใช่โอเพนซอร์ส อย่างไรก็ตามผู้เขียนก็ใจดีพอที่จะรวมไฟล์ข้อความที่อธิบายสิ่งที่มันทำ; หน้านี้เกี่ยวกับการนำ GPLv3 ไปใช้ของอัลกอริทึมนั้น
การใช้งานของฉันนั้นง่ายและเชื่อถือได้และฉันก็ไม่รู้เหมือนกันว่า F3 เปรียบเทียบกับ H2testw อย่างไรตั้งแต่ฉันไม่เคยใช้ H2testw ฉันเรียกว่าการติดตั้งใช้งานของฉัน F3 สิ่งที่สั้นสำหรับ Fight Flash Fraud หรือ Fight Fake Flash
ภาคผนวกโดย @pbhj: F3 อยู่ใน repos ของ Ubuntu มีสองส่วนคือ f3write เขียนไฟล์ 1GB ไปยังอุปกรณ์และพยายามอ่านไฟล์ f3 หลังจากนั้น วิธีนี้ความจุและความสามารถในการเขียนและอ่านข้อมูลอย่างมีประสิทธิภาพได้รับการทดสอบ
badblocks
?
มันขึ้นอยู่กับโหมดความล้มเหลวฉันคิดว่า พวกเขาราคาถูกด้วยเหตุผล
ในฐานะอุปกรณ์ USB การดูบัสผ่านตัวจัดการอุปกรณ์ใน Windows หรือเอาต์พุตของ dmesg ใน Linux จะบอกคุณว่าอุปกรณ์ดังกล่าวได้รับการยอมรับว่าเสียบอยู่หรือไม่ถ้าไม่ใช่ให้ใช้คอนโทรลเลอร์บนบอร์ดหรือการเชื่อมต่อทางกายภาพ ถูกทำลาย
หากอุปกรณ์ได้รับการยอมรับว่าเสียบอยู่ แต่ไม่ได้รับการระบุว่าเป็นตัวควบคุมดิสก์ (และฉันไม่รู้ว่าจะเกิดอะไรขึ้น แต่ ... ) จากนั้นตัวควบคุมจะถูกยิง
หากได้รับการยอมรับว่าเป็นดิสก์ไดรฟ์ แต่คุณไม่สามารถต่อเชื่อมได้คุณอาจสามารถซ่อมแซมผ่าน fdisk และเขียนตารางพาร์ติชันใหม่จากนั้นสร้างระบบไฟล์อื่น
หากคุณกำลังมองหาเทียบเท่าของสมาร์ทแล้วคุณจะไม่พบมัน ตัวควบคุม Thumbdrive ราคาถูก พวกเขาเป็นที่เก็บสินค้าและไม่ได้หมายความว่าจะมีร้านกาแฟและสติปัญญาที่ทันสมัย
หัวข้อนี้ทำให้เกิดคำถามขึ้นมา
- ใช้เวลานานเท่าไร (โดยนัยจากการอภิปรายว่าปล่อยให้ทำงานข้ามคืน)
ขณะนี้ฉันทดสอบ USB 3.0 128G Sandisk โดยใช้sudo badblocks -w -s -o
มันเชื่อมต่อกับการ์ด USB 3 / USBC PCIe ของฉันใน Athlon 64x2 รุ่นเก่า ดังนั้น USB3 ใน USB3 บน PCIe น่าจะเร็วมาก
นี่คือบรรทัดคำสั่งคอนโซลของฉันที่เสร็จสมบูรณ์ 33%:
Testing with pattern 0xaa: 33.35% done, 49:47 elapsed. (0/0/0 errors)
และอีกครั้งในภายหลัง:
Testing with pattern 0xaa: 54.10% done, 1:17:04 elapsed. (0/0/0 errors)
ถัดมากลุ่มนี้:
Reading and comparing: 43.42% done, 2:23:44 elapsed. (0/0/0 errors)
กระบวนการนี้ซ้ำกับ oxaa จากนั้น 0x55, 0xff และสุดท้าย 0x00
ArchLinux ให้คำสั่งอย่างไม่มีเงื่อนไข:
For some devices this will take a couple of days to complete.
หมายเหตุ: การทดสอบเริ่มต้นประมาณ 20:30 ทดสอบได้เสร็จสิ้นก่อน 08:45 วันถัดไปเสร็จสิ้นในเวลาประมาณ12 ชั่วโมงสำหรับสถานการณ์ของฉัน
- การทดสอบแบบทำลายไม่ได้เป็นวิธีเดียวที่ทำได้
Wikipedia เสนอข้อความนี้:
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.
หน้า man distro ปัจจุบันของฉันยืนยัน -n ว่าไม่ทำลาย
-n Use non-destructive read-write mode. By default only a non-
destructive read-only test is done.
และในที่สุด มันก็ไม่คุ้มค่า คำให้การ.
คำแถลงสรุปตามสถานการณ์ของหน่วยความจำหลายพันล้านไซต์ในชิปแฟลชความล้มเหลวคือเซลล์ที่ถูกเขียนและลบไปแล้วนับหมื่นครั้งและตอนนี้ล้มเหลว และเมื่อการทดสอบหนึ่งครั้งแสดงให้เห็นว่าเซลล์ล้มเหลวโปรดจำไว้ว่าแต่ละไฟล์ที่คุณเพิ่มและลบถูกเรียกใช้รอบนั้น
แนวคิดนี้คือเมื่อ 1 เซลล์ล้มเหลวเซลล์อื่น ๆ อีกมากมายก็มาถึงจุดล้มเหลวเดียวกัน เซลล์หนึ่งล้มเหลวในวันนี้ แต่คุณใช้งานได้ตามปกติเป็นเวลานานกว่านั้นอีก 3 เซลล์จะล้มเหลวและอีก 24 เซลล์ล้มเหลวจากนั้น 183 เซลล์และก่อนที่คุณจะรู้ว่าหน่วยความจำนั้นเต็มไปด้วยจุดที่ไม่ดี มีเซลล์จำนวนมากเท่านั้นที่สามารถตายก่อนที่ความสามารถในการใช้งานของคุณจะเริ่มลดลงในที่สุดก็ร่วงลงอย่างรวดเร็ว คุณจะรู้ได้อย่างไรว่ามีเซลล์จำนวนมากล้มเหลว ดังนั้นการโพสต์ที่นี่กำลังปกป้องข้อมูลของคุณโดยบอกว่าเมื่อคุณมีเซลล์ที่ไม่ดีคุณจะได้รับการจัดเก็บที่น่าเชื่อถือ การใช้งานของคุณอาจยังให้คุณสองสามเดือน
มันเป็นข้อมูลของคุณ
HTH
ความล้มเหลวหลายอย่างเสร็จสมบูรณ์หรืออนุญาตให้หนึ่งตำแหน่งรองรับหลายตำแหน่ง ฉันเขียนโปรแกรมอ่านเขียนแบบสุ่มเล็ก ๆ ที่ใช้หมายเลขเฉพาะสำหรับตัวสร้างตัวเลขแบบหลอกเทียมสำหรับทั้งรูปแบบและที่อยู่ การอ่านถูกส่ายไปหลังการเขียนโดยเพจที่เพียงพอเพื่อให้แน่ใจว่าฉันไม่ได้ทดสอบแคช RAM บนระบบ ยังไม่ได้กำหนดพารามิเตอร์เพียงตั้งค่าสำหรับอุปกรณ์ 64G ในระบบของฉันด้วย RAM 8G อย่าลังเลที่จะวิพากษ์วิจารณ์ทำให้เป็นพารามิเตอร์ทำให้มันฉลาดขึ้น
นี่คือการตรวจสอบที่มีประสิทธิภาพและเร็วกว่าการทำทุก ๆ ไบต์ไปด้านบน แต่ก็เป็นตัวสร้าง swap ที่ยอดเยี่ยม ฉันใส่ swapiness ที่ 1 ชั่วคราวและมันก็ช้าลง แต่ก็ทนได้มากกว่าแอพอื่น ๆ เคล็ดลับเกี่ยวกับวิธีการปรับเทียบกับการแลกเปลี่ยนจะได้รับการชื่นชม:
$ 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 ;
}
}
ไดรฟ์ USB นั้นค่อนข้างพื้นฐาน แต่ก็มีไม่มากที่จะผิดพลาดได้! โดยทั่วไปถ้ามันปรากฏเป็นไดรฟ์และคุณสามารถฟอร์แมตมันก็จะทำงาน คุณสามารถลองดูCrystalDiskInfo เวอร์ชันพกพาซึ่งเป็นเครื่องมือวิเคราะห์น้ำหนักเบาอย่างรวดเร็ว แท่ง USB น้อยมากที่รายงานข้อมูลสมาร์ทและสิ่งที่คล้ายกัน