ฉันจะทำลายส่วนที่เสียหายโดยใช้การ์ด SD ได้อย่างไร


142

ฉันต้องการทดสอบความยืดหยุ่นของโค้ดอ่าน / เขียนสำหรับฮาร์ดแวร์ฝังตัวบางตัว ฉันจะเสียสละการ์ด SD สักสองสามตัวและแบ่งภาคการเรียนรู้ที่หลากหลายเพื่อการศึกษาที่ควบคุมได้อย่างไร

สิ่งเดียวที่ฉันคิดได้คือเขียนทับเซกเตอร์สักสองสามล้านครั้ง ฉันสงสัยว่าสามารถสร้างสคริปต์ Linux badblocks เพื่อทดสอบการทำลายล้างในภาคส่วนเดียวซ้ำหลาย ๆ ชั่วโมงได้หรือไม่


20
คุณสามารถเปลี่ยนไดรเวอร์ SD ระดับต่ำเพื่อแกล้งทำเป็นว่ามีบล็อกที่ไม่ดีหรือไม่นั้นเป็นปัญหาหรือไม่

3
@ Markyisri ฉันไม่คิดว่าคนขับสามารถเข้าถึงได้มาก ไม่ว่าเราจะใช้ไดรเวอร์ใดเป็นพิเศษขั้นพื้นฐานเพื่อเพิ่มการจัดสรรหน่วยความจำให้สูงสุดกับเฟิร์มแวร์ที่เหลือ นอกจากนี้ถ้าเป็นไปได้มันอาจจะเกินความสามารถของฉัน
Gabe Krause

3
คุณสามารถสร้างอีมูเลเตอร์ SD การ์ดได้หรือไม่? ไม่ใช่โครงการที่ง่ายที่สุด
user20574

11
เมื่อถึงเป้าหมายคุณสามารถซื้อการ์ด SD มือสองได้ด้วยเงินเพียงเล็กน้อยและคุณอาจได้รับการ์ดที่เสียหรือใส่ "มองหา ... " ประกาศเพื่อหาการ์ดที่ผิดพลาดโดยเฉพาะ หรือค้นหา eBay เพื่อหาบัตรชำรุด จากนั้นคุณทดสอบการ์ดและคุณจะรู้ตำแหน่งของพื้นที่ที่มีข้อบกพร่อง
FarO

28
ถามช่างภาพมืออาชีพ พวกเขาจะมีการ์ด SD กองร่างแน่นอน
เจ ...

คำตอบ:


168

วิธีการทางเลือกที่อาจเป็นประโยชน์

หากรหัสของคุณทำงานภายใต้ Linux คุณอาจทดสอบด้วยอุปกรณ์ตรรกะ "ผิดพลาด" dmsetupสามารถสร้างอุปกรณ์ที่ส่งคืนข้อผิดพลาด I / O เพียงสร้างอุปกรณ์ของคุณโดยใช้errorและ / หรือflakeyกำหนดเป้าหมาย จากman 8 dmsetup:

error
ข้อผิดพลาดของ I / O ที่ไปยังพื้นที่นี้ มีประโยชน์สำหรับการทดสอบหรือการสร้างอุปกรณ์ที่มีรูในตัว

flakey
สร้างการแมปที่คล้ายกับlinearเป้าหมาย แต่แสดงพฤติกรรมที่ไม่น่าเชื่อถือเป็นระยะ มีประโยชน์สำหรับการจำลองอุปกรณ์ที่ล้มเหลวเมื่อทำการทดสอบ

หมายเหตุ: flakeyการใช้งานเป้าหมายเป็นเอกสารที่นี่ ตัวอย่างพื้นฐานที่นี่

เท่าที่ฉันทราบข้อผิดพลาด I / O จะถูกรายงานทันทีดังนั้นนี่จึงแตกต่างจากพฤติกรรมการ์ด SD จริงที่คุณสามารถคาดหวังความล่าช้าการหยุดชะงัก ฯลฯ อย่างไรก็ตามฉันคิดว่าวิธีนี้อาจมีประโยชน์ในบางกรณีอย่างน้อยก็ทำงานได้รวดเร็ว ทดสอบเบื้องต้นหรือดังนั้น


34
ฉันขอขอบคุณที่คิดนอกกรอบ! เรากำลังเชื่อมต่อกับระดับบล็อกกับ SD ผ่านชิป Atmel 80MHz และไม่มีระบบปฏิบัติการจริง
Gabe Krause

1
@GabeKrause ซึ่งในกรณีนี้ความได้เปรียบของคำตอบนี้ขึ้นอยู่กับความคล้ายคลึงของ API อุปกรณ์บล็อก Linux ที่อาจคล้ายกับ API ของไดรเวอร์อุปกรณ์ฝังตัวของคุณ
Qsigma

1
dmsetupคำสั่งสำหรับการตั้งค่าerrorอุปกรณ์ที่มักจะกลับข้อผิดพลาดในการอ่าน: stackoverflow.com/questions/1870696/…
Peter Cordes

1
ฉันเห็นด้วยว่านี่ฟังดูเหมือนทางออกที่ดีกว่า ก่อนอื่นคุณสามารถทำซ้ำผ่านฮาร์ดแวร์ใด ๆ และคุณยังสามารถจำลองโหมดข้อผิดพลาดต่างๆ ตัวอย่างเช่นฉันมีแฟลชไดรฟ์ USB 16GB ที่ใช้งานได้ดี หลังจากผ่านไประยะหนึ่งถึงแม้ว่าจะมีบางพื้นที่บนมันเริ่มส่งคืนข้อมูลที่ผิด ไม่มีข้อผิดพลาด FS ทุกชนิด คุณอ่านไฟล์ แต่เนื้อหาแตกต่างกัน บางภาคไม่แน่นอนอย่างเห็นได้ชัด แต่อุปกรณ์บางอย่างจะทำงานไม่เป็นที่รู้จักล่วงหน้า
akostadinov

76

คนนี้แฮ็คไมโครคอนโทรลเลอร์ภายในการ์ด SD ที่ใช้ทำเครื่องหมายบล็อกที่ไม่ดี: https://www.bunniestudios.com/blog/?p=3554

คุณอาจสามารถทำสิ่งเดียวกันและทำเครื่องหมายบล็อกโดยพลการเป็นความผิดพลาดได้

วันนี้ที่งาน Chaos Computer Congress (30C3), xobs และฉันได้เปิดเผยการค้นพบว่าการ์ด SD บางตัวมีช่องโหว่ที่อนุญาตให้ใช้รหัสโดยอำเภอใจ - บนการ์ดหน่วยความจำเอง ในด้านมืดการใช้รหัสในการ์ดหน่วยความจำทำให้เกิดการโจมตีระดับ MITM (man-in-the-the-middle) ซึ่งดูเหมือนว่าการ์ดจะทำงานแบบเดียว แต่จริงๆแล้วมันทำอย่างอื่น ในแง่ของแสงมันยังช่วยให้ผู้ที่ชื่นชอบฮาร์ดแวร์สามารถเข้าถึงไมโครคอนโทรลเลอร์ที่มีราคาถูกและแพร่หลายมาก

.

อัลกอริธึมเหล่านี้ซับซ้อนเกินไปและเฉพาะอุปกรณ์ที่จะเรียกใช้ในระดับแอปพลิเคชันหรือระบบปฏิบัติการดังนั้นจึงปรากฎว่าดิสก์หน่วยความจำแฟลชทุกอันมาพร้อมกับไมโครคอนโทรลเลอร์ที่ทรงพลังพอสมควรในการรันอัลกอริทึมนามธรรม แม้แต่การ์ด microSD แบบจิ๋วไม่ได้มีเพียงหนึ่งอย่าง แต่มีอย่างน้อยสองชิป - ตัวควบคุมและอย่างน้อยหนึ่งชิปแฟลช (การ์ดความหนาแน่นสูงจะซ้อนแฟลชหลาย ๆ อัน)

.

โดยทั่วไปแล้วไมโครคอนโทรลเลอร์แบบฝังตัวจะถูกดัดแปลงอย่างหนัก 8051 หรือซีพียู ARM ในการใช้งานที่ทันสมัยไมโครคอนโทรลเลอร์จะเข้าใกล้ระดับประสิทธิภาพ 100 MHz และยังมีตัวเร่งฮาร์ดแวร์หลายตัว น่าแปลกที่ค่าใช้จ่ายในการเพิ่มตัวควบคุมเหล่านี้ไปยังอุปกรณ์นั้นอยู่ที่ประมาณ $ 0.15 - $ 0.30 โดยเฉพาะอย่างยิ่งสำหรับ บริษัท ที่สามารถสร้างทั้งหน่วยความจำแฟลชและตัวควบคุมภายในหน่วยธุรกิจเดียวกัน อาจจะมีราคาถูกกว่าในการเพิ่มไมโครคอนโทรลเลอร์เหล่านี้มากกว่าที่จะทดสอบและกำหนดลักษณะของชิปหน่วยความจำแฟลชแต่ละตัวอย่างละเอียดซึ่งอธิบายว่าทำไมอุปกรณ์แฟลชที่มีการจัดการอาจมีราคาถูกกว่าบิตแฟลชชิปที่มีการจัดการต่อบิต

.

crux คือกลไกการโหลดและอัปเดตเฟิร์มแวร์เป็นสิ่งจำเป็นอย่างยิ่งโดยเฉพาะอย่างยิ่งสำหรับผู้ควบคุมบุคคลที่สาม ผู้ใช้ปลายทางไม่ค่อยได้สัมผัสกับกระบวนการนี้เนื่องจากมันเกิดขึ้นในโรงงาน แต่สิ่งนี้ไม่ได้ทำให้กลไกมีความเป็นจริงน้อยลง ในการสำรวจตลาดอิเล็กทรอนิกส์ในประเทศจีนของฉันฉันได้เห็นผู้ดูแลร้านเขียนเฟิร์มแวร์บนการ์ดที่ "ขยาย" ความจุของการ์ด - กล่าวอีกนัยหนึ่งพวกเขาโหลดเฟิร์มแวร์ที่รายงานความจุของการ์ดนั้นใหญ่กว่า ที่เก็บข้อมูลจริงที่มีอยู่ ความจริงที่ว่าสิ่งนี้เป็นไปได้ ณ จุดขายหมายความว่าเป็นไปได้มากที่สุดว่ากลไกการอัพเดตจะไม่ปลอดภัย

ในการพูดคุยของเราที่ 30C3 เรารายงานการค้นพบของเราในการสำรวจแบรนด์ไมโครคอนโทรลเลอร์โดยเฉพาะคือ Appotech และ AX211 และ AX215 เราค้นพบลำดับ“ การเคาะ” อย่างง่าย ๆ ที่ส่งผ่านคำสั่งที่ผู้ผลิตสงวนไว้ (เช่น CMD63 ตามด้วย 'A', 'P', 'P', 'O') ที่จะปล่อยคอนโทรลเลอร์ลงในโหมดการโหลดเฟิร์มแวร์ ณ จุดนี้การ์ดจะยอมรับ 512 ไบต์ถัดไปและเรียกใช้เป็นรหัส


10
จากคำตอบทั้งหมดคำตอบนี้น่าจะใกล้เคียงกับสิ่งที่ OP ต้องการจริงๆ
Cort Ammon

11
นั่นคือการอ่านที่ยอดเยี่ยม!
Gabe Krause

@Twisty คัดลอกบางส่วนที่เกี่ยวข้อง
FarO

2
ลงไปในโพรงกระต่ายสู่โลกของสถาปัตยกรรม SD card ที่ฉันไป
Tejas Kale

38

สิ่งนี้มักใช้ไม่ได้เพราะการ์ด SD (หรือ eMMC) ส่วนใหญ่ใช้การปรับระดับการสึกหรอและไดนามิกซึ่งหมายความว่าคอนโทรลเลอร์อัจฉริยะตีความคำสั่งการเขียนของคุณและแมปไปยังส่วนแฟลชที่ใช้น้อยที่สุด

สิ่งเดียวที่คุณทำได้คือพยายามติดต่อซัพพลายเออร์ของคุณและขอแผ่นข้อมูลของพวกเขา อาจมีบางวิธี (เฉพาะผู้ขาย) เพื่อเรียกคืนสถานะของอัลกอริทึมการปรับระดับการสึกหรอ นี่อาจทำให้คุณสามารถสอบถามสถานะ / การใช้แฟลชพื้นฐานได้ หรือคุณอาจจะโชคร้ายและสิ่งนี้อาจไม่มีอยู่

หากเป้าหมายของคุณคือการทำลายแฟลชจริงๆสิ่งที่คุณทำได้คือเรียกใช้การอ่านและการเขียนจำนวนมากและตรวจสอบอย่างต่อเนื่องว่าข้อมูลที่คุณกำลังอ่านกลับมานั้นยังคงสอดคล้องกัน เช่นสร้างไฟล์ขนาดใหญ่สองไฟล์จัดเก็บเช็คซัมและอ่าน / เขียนเพื่อตรวจสอบเช็คซัม ยิ่งแฟลชมีขนาดใหญ่ขึ้นกระบวนการนี้จะใช้เวลานานขึ้น


2
สิ่งนี้จะยังคงใช้งานไม่ได้หากการ์ด SD เต็มไปด้วยข้อมูลอย่างสมบูรณ์ดังนั้นจึงไม่สามารถทำการแมปอีกมาก ฉันไม่คิดว่าพวกเขามีภาคซ่อนเร้นมากมาย
Ruslan

2
@ Ruslan อุปกรณ์ไม่จำเป็นต้องรู้ว่าส่วนใดที่เต็มไปด้วยอะไร เพียงแค่ต้องรู้เนื้อหาของภาคที่จะส่งมอบตามคำขอและภาคที่จะเขียนตามคำขอ และอาจมีเลเยอร์ abstraction บางส่วนที่ทำให้มันใช้หน่วยความจำทางกายภาพอื่น ๆ เพื่อเป็นตัวแทนภาคเหล่านั้นตามอัลกอริทึมที่ไม่เปิดเผย ... - และ "เต็ม" หมายถึงเฉพาะ "เกณฑ์สำหรับบล็อกที่กรอกได้ cuncurrently"
Alexander Kosubek

6
@Ruslan: แม้ว่าอุปกรณ์ทั้งหมดจะมีข้อมูลอยู่ แต่ระดับการสึกหรอก็ยังคงมีประสิทธิภาพ: ตัวอย่างเช่นหากภาค A ถูกเขียนครั้งเดียวและส่วน B ถูกเขียน 1,000 ครั้งดังนั้นเมื่อมีการเขียนอีกครั้ง เซกเตอร์ B การ์ดสามารถแลกเปลี่ยนข้อมูลสำหรับสองเซ็กเตอร์ดังนั้นเซกเตอร์ A จะมีข้อมูลของเซกเตอร์ B (และมีแนวโน้มที่จะถูกเขียนทับมากขึ้นหลายครั้ง - แต่ก็ไม่เป็นไรเพราะมันสด) และเซกเตอร์ B จะประกอบด้วยข้อมูลของเซกเตอร์ A หวังว่าจะไม่เปลี่ยนแปลงมากนัก) เห็นได้ชัดว่าอุปกรณ์ยังต้องจัดเก็บแผนที่ของภาคที่ได้รับการจัดเก็บที่
psmears

2
@GabeKrause ใช่นั่นคือธรรมชาติของสัตว์ร้าย ในระดับต่ำสุดที่คุณมีชิป nand หรือแฟลช (ทุกวันนี้ใช้ nand) และมีคอนโทรลเลอร์อัจฉริยะอยู่ด้านหน้าชิป nand ซึ่งสิ้นสุดบัส (เช่น usb สำหรับ usb stick หรือ mmc สำหรับการ์ด sd ) และชิปนี้มีหน้าที่รับผิดชอบในการทำแผนที่ / การปรับระดับการสวมใส่ ฯลฯ มันย่อแสงแฟลชออกไปจากคุณ หากคุณต้องการใช้ nand บน Linux แบบฝังนี่คือสิ่งที่ ubifs จะทำเพื่อคุณ
amo-ej1

2
การ์ด SD มีไมโครคอนโทรลเลอร์ที่ใช้ "แฟลชแปลเลเยอร์" - การร้องขอบล็อกถูกแปลโดยไมโครคอนโทรลเลอร์นี้ไปยังคำสั่ง NAND แบบดิบ การ์ด SD บางตัวมีคำสั่งที่ซ่อนอยู่เพื่อเปลี่ยน / อัปเดตเฟิร์มแวร์ MCU และยังมีความพยายามด้านวิศวกรรมย้อนกลับ อุปกรณ์จัดเก็บข้อมูลแฟลชส่วนใหญ่นอกเหนือจาก NAND แบบดิบ (ซึ่งอาจปรากฏในบางกรณีเช่นเราเตอร์ที่บ้านจำนวนมาก) อาจเป็น "overprovisioned" - หมายถึงการ์ด SD ขนาด 1GB ของคุณอาจมีบางอย่างเช่นพื้นที่ว่าง NAND แบบดิบ 1024MB + 128MB และเซกเตอร์ประหยัดสำหรับหน้าแฟลชที่ไม่ดี
LawrenceC

32

คุณสามารถเพิ่มการสึกหรอของทรานซิสเตอร์ได้โดยการเพิ่มอุณหภูมิการทำงาน ใช้วงจรการเขียนลบบนชิปที่ให้ความร้อน (70-120 ° C) มันจะสึกหรอเร็วขึ้น


18
อุณหภูมิในการเก็บที่มากเกินไปก็เป็นอันตรายเช่นกันดังนั้นจึงเป็นไปได้มากขึ้นที่จะ "ปรุง" ชิปที่อุณหภูมิ 120 องศาเซลเซียส (หรือมากกว่านั้น) ในบางครั้งจากนั้นตรวจสอบหาข้อบกพร่อง
Dmitry Grigoryev

2
แรงดันไฟฟ้าเกินเล็กน้อยที่แหล่งจ่ายไปยังการ์ดอาจเป็นไปได้และจะต้องทำการทดสอบเช่นเดียวกัน
Chris H

Undervoltage อาจทำให้เกิดข้อบกพร่องประเภทต่าง ๆ เช่นการล็อคตัวควบคุม
user20574

18

คำนำ: ตัวเลือกนี้ต้องการการเขียนโปรแกรมเพิ่มเติมและการปรับเปลี่ยนฮาร์ดแวร์ แต่จะช่วยให้การควบคุมการอ่านเป็นไปได้อย่างโปร่งใสมากที่สุดกับโฮสต์

การ์ด SD มีตัวเลือก I / O หลายตัว แต่สามารถควบคุมได้ผ่าน SPI หากคุณต้องใช้การ์ด SD และปรับเปลี่ยนเพื่อให้คุณสามารถติดหมุดกับไมโครคอนโทรลเลอร์ (เช่น Arduino) คุณอาจมี Arduino เลียนแบบการ์ด SD และโปร่งใสกับอุปกรณ์ที่อ่านการ์ด SD รหัสของคุณบนไมโครคอนโทรลเลอร์สามารถส่งคืนข้อมูลที่ไม่ดีได้ตามต้องการ นอกจากนี้คุณสามารถใส่การ์ด SD ลงในไมโครคอนโทรลเลอร์เพื่อให้ผู้อ่านสามารถส่งผ่านไมโครคอนโทรลเลอร์ไปยังการ์ด SD เพื่อทดสอบกิกะไบต์


3
อุปกรณ์ความเร็วสูงส่วนใหญ่ (รวมถึงเครื่องอ่านการ์ดพีซี) จะปฏิเสธที่จะทำงานกับการ์ดที่ไม่รองรับ SD สี่บิต
Dmitry Grigoryev

1
OP กล่าวว่ามันเป็นระบบฝังตัวที่จะใช้การ์ดซึ่งจะทำให้มีแนวโน้มที่จะสนับสนุน SPI สำหรับการ์ด SD
Eric Johnson

3
ตัวแปรในการทำงานนี้ แต่ทำงานหนักกว่าคือการหาการ์ด SD ที่คุณสามารถreflash เฟิร์มแวร์ได้
Peter Taylor

2
มันน่าสนใจมาก! ระบบฝังตัวของเรากำลังทำงาน I / O ผ่าน SPI ฉันไม่แน่ใจว่าฉันมีแบนด์วิดท์เพื่อแก้ไขฮาร์ดแวร์ของเราเพื่อให้ได้ผลเช่นนี้หรือไม่
Gabe Krause

2
การได้รับการศึกษาเกี่ยวกับการปรับระดับการสวมใส่แบบไดนามิกนั้นทำให้ฉันเชื่อว่าการสร้างการ์ด SD "ที่ไม่ดี" ที่มีเซกเตอร์ที่รู้จักเป็นกลยุทธ์นั้นยากกว่า (หรือเป็นไปไม่ได้) ที่ยากกว่าที่ฉันคาดไว้เมื่อตั้งคำถาม ในขณะที่เกินขอบเขตความสามารถของฉันในขณะนี้ดูเหมือนจะเป็นวิธีที่ควบคุมได้และมีแนวโน้มมากที่สุดตามด้วย @Olafm การปรับแต่งฮาร์ดแวร์ระดับกลางเพื่อดักจับและ "ข้อมูลเสียหาย" ที่ตำแหน่งส่วนใด ๆ ที่กำหนดไว้ล่วงหน้าระหว่างการถ่ายโอนข้อมูลดูเหมือนว่าเป็นวิธีที่ดี
Gabe Krause

15

ฉันจะไปที่ ebay / aliexpress และซื้อการ์ด SD ที่ถูกที่สุดที่ฉันสามารถหาได้จากประเทศจีนอันที่ "ดีเกินจริง" พวกเขามักจะมาพร้อมกับภาคที่ผิดพลาดหรืออยู่ในชุดซอฟต์แวร์ที่จะมีขนาดใหญ่กว่าที่พวกเขาเป็นจริง ไม่ว่าจะด้วยวิธีใดคุณควรท้ายด้วยการ์ด SD ที่ผิดพลาดเพื่อใช้ในการทดสอบ


วิธีการที่น่าสนใจ แต่คุณจะเขียนไปยังพื้นที่ที่ไม่ดีเพื่อทดสอบผลกระทบของบล็อกที่ไม่ดีในรหัสที่เก็บไว้ได้อย่างไร
fixer1234

@ fixer1234 ฉันมีการ์ด SD หนึ่งในนั้นที่บอกว่าเป็น 32GB แต่จริงๆแล้วมีเพียง 128MB ฉันใส่มันลงในกล้องและสามารถถ่ายรูปเกิน 128MB ได้ แต่มีเพียงภาพถ่ายแรกเท่านั้นที่สามารถอ่านได้ ส่วนที่เหลืออยู่ในรายการ แต่ถูกอ่านกลับมาเป็นปกติ เดาว่าเป็นวิธีที่พวกเขาต้องการให้คุณสังเกตเห็นปัญหากับการ์ดก่อนเมื่อมันสายเกินไปที่จะบ่น ...
GuzZzt

11

กาลครั้งหนึ่งนานมาแล้วหลายปีที่ผ่านมาฉันได้รับค่าจ้างเพื่อรับชุดรูปถ่ายและวิดีโอที่สำเร็จการศึกษาจากการ์ด SD สำหรับคุณแม่ที่ค่อนข้างหวาดผวา เมื่อตรวจสอบอย่างใกล้ชิดการ์ดดังกล่าวได้รับความเสียหายทางร่างกายโดยมีรอยแตกที่มองเห็นได้ในกรณีด้านนอกและมีเซกเตอร์เสียหลายตัวโดยเฉพาะอย่างยิ่งในช่วงต้น ๆ และเป็นช่วงวิกฤตที่สำคัญซึ่งทำให้โปรแกรมกู้คืนข้อมูลที่เชื่อถือได้มากที่สุด . นอกจากนี้เครื่องมือข้อมูลนิติเวชกลับมาแล้วค่าใช้จ่ายโชค

ฉันได้รับการ์ด SD / แบรนด์ขนาดเท่ากันและเขียนการถ่ายโอนข้อมูลดิบที่กำหนดเองของฉันเองและเรียกคืนยูทิลิตีเพื่อคัดลอกข้อมูลจากการ์ดที่ไม่ดีไปยังการ์ดที่ดี ทุกครั้งที่ยูทิลิตี้ตีเซกเตอร์เสียมันจะลองใหม่หลายครั้งก่อนที่จะเขียนเลขศูนย์ทั้งหมดสำหรับเซกเตอร์นั้นและแทนที่จะเลิกและหยุดไม่สนใจความล้มเหลวและย้ายไปยังเซกเตอร์ถัดไป ความพยายามครั้งใหม่เกิดขึ้นเนื่องจากฉันสังเกตเห็นว่าบางภาคส่วนยังมีอัตราความสำเร็จในการอ่านประมาณ 40% เมื่อข้อมูลอยู่ในการ์ด SD ใหม่เครื่องมือการกู้คืนที่ล้มเหลวก่อนที่จะทำงานได้อย่างไม่มีที่ติด้วยการสูญหายของข้อมูลน้อยที่สุด / เกิดความเสียหาย โดยรวมแล้วประมาณ 98% ของไฟล์ทั้งหมดถูกกู้คืน จำนวนของไอเท็มที่ถูกลบไปก่อนหน้านี้ก็ถูกกู้คืนเพราะไม่มีอะไรถูกลบจริง ๆ - เพียงแค่ทำเครื่องหมายเช่นนี้และเขียนทับช้าๆ สิ่งที่เริ่มจากการออกกำลังกายเพื่อกู้คืนข้อมูลที่น่าเบื่อเล็กน้อยกลายเป็นหนึ่งในโครงการพัฒนาซอฟต์แวร์ส่วนบุคคลที่น่าจดจำและน่าสนใจของฉัน ในกรณีที่คุณสงสัยแม่ก็ตื่นเต้น

เรื่องราวนี้จะแสดงให้เห็นว่าเป็นไปได้ที่จะเกิดความเสียหายทางกายภาพกับการ์ด SD ซึ่งข้อมูลยังคงสามารถเข้าถึงได้ แต่มีภาคที่ทำงานได้แทบจะไม่และสิ่งใดก็ตามที่พยายามอ่านจากปัญหาดังกล่าว พลาสติกการ์ด SD มีแนวโน้มที่จะบอบบางได้ดังนั้นการดัดงอหรือตัดเป็นชิ้นเล็ก ๆ ราคาถูกอาจเป็นกลอุบาย ไมล์สะสมของคุณอาจแตกต่างกันไป

คุณสามารถถามสถานที่การกู้คืนข้อมูลในพื้นที่ของคุณ เนื่องจากพวกเขามีความเชี่ยวชาญในการกู้คืนข้อมูลจากอุปกรณ์ที่ล้มเหลวหรือล้มเหลวต่างๆพวกเขาควรมีอินพุต / คำแนะนำที่เป็นประโยชน์และอาจมีการ์ด SD ที่เตรียมไว้ล่วงหน้า (เช่นเพื่อการฝึกอบรม) ที่คุณสามารถขอรับได้


2
คุณเปิดตัวยูทิลิตี้นั้นออนไลน์หรือไม่? นั่นจะเป็นการดีที่จะเพิ่มในคลังแสงของฉัน
Ploni

1
ณ จุดนี้มันอาจจะไม่ทำงานอย่างถูกต้องเนื่องจากการเดินขบวนของความคืบหน้าของเทคโนโลยี (อาจไม่ได้รวบรวม) และการเรียกระบบระดับต่ำที่ฉันใช้ นอกจากนี้ยังมีอุปกรณ์โอเพนซอร์สทางนิติวิทยาศาสตร์ / เครื่องมือการโคลนแบบไดรฟ์แบบโอเพ่นซอร์สที่ฉันควรใช้ก่อนพยายามดึงซอฟต์แวร์เก่าออกจากลูกเหม็น
CubicleSoft

ฉันคาดหวังว่าคุณอาจให้พารามิเตอร์บางอย่างเพื่อddให้มันทำงานในลักษณะเดียวกันนี้ทุกวันนี้ ฉันไม่แน่ใจ
wizzwizz4

@ wizzwizz4 ดูที่ ddrescue
hildred

"นอกจากนี้เครื่องมือข้อมูลทางนิติเวชกลับมีค่าใช้จ่ายมหาศาล" ฉันค่อนข้างแน่ใจว่าพวกเขายังคงทำ
jpmc26

5

คำตอบนี้เป็นการขยายความคิดเห็นของ @Ruslan

  1. เติม SD card ของคุณสูงสุดประมาณ 99.9%
  2. เขียนเนื้อหาที่เหลืออีก 0.1% อย่างต่อเนื่อง (เขียน A -delete-write B-delete - เขียน A ... )
  3. ทดสอบ (เป็นระยะ) ว่าคุณหักการ์ดหรือไม่

ทางเลือกที่เป็นไปได้:

ไม่แน่ใจว่าสิ่งนี้ใช้งานได้ตามวัตถุประสงค์ของคุณหรือไม่ แต่บางทีมันอาจพอเพียงที่จะทำให้การ์ดของคุณเสียหายซึ่งอาจเร็วกว่ามาก


6
การเติมการ์ดถึง 99% จะไม่ช่วยได้เนื่องจากวัตถุประสงค์ทั้งหมดของการปรับระดับการสึกหรอคือการป้องกันความเสียหายก่อนกำหนดประเภทนี้อย่างแน่นอน ความเสียหายทางกายภาพของการ์ดจะส่งผลให้การ์ดไม่สามารถเริ่มต้นได้อีกต่อไป
Dmitry Grigoryev

2
@DmitryGrigoryev วิธีจะสวม leveling จะมีการช่วยเหลือมาก (อุปสรรคในกรณีนี้) เว้นแต่บัตรมีมากหน่วยความจำมากกว่ากำลังการผลิตอย่างเป็นทางการของตนหรือไม่
ispiro

12
@ispiro ตัวอย่างเช่นในครั้งถัดไปที่เซกเตอร์ที่มีจำนวนการเขียนสูงถูกเขียนทับเนื้อหาของมันอาจถูกสลับกับเซกเตอร์ที่มีจำนวนการเขียนต่ำ
Dmitry Grigoryev

1
@DmitryGrigoryev ถ้าฉันตีความคำตอบนี้อย่างถูกต้องควรมีการ์ด SD ที่ไม่สวม lvling: electronics.stackexchange.com/a/27626/16104
Dennis Jaheruddin

1
@DennisJaheruddin ใช่การ์ดรุ่นเก่าไม่ทำอย่างนั้น ด้วยการ์ดเหล่านี้ก็เพียงพอที่จะสร้าง / ลบไฟล์ว่างเปล่าซ้ำ ๆ จนกระทั่งเซกเตอร์ในตารางการจัดสรรหมด
Dmitry Grigoryev

3

คุณสามารถลองแนะนำแหล่งจ่ายไฟที่ไม่เสถียรหรือการส่งสัญญาณแรงดันไฟฟ้าที่สูงขึ้น

ความผิดปกติทั่วไปสำหรับตระกูลของอุปกรณ์ที่ฉันรู้ว่ามีความสัมพันธ์กันอย่างรุนแรงระหว่างความเสียหายของการ์ด SD และหน้าสัมผัสแบตเตอรี่ที่ไม่ต่อเนื่อง


3

การ์ด SD ความจุต่ำ (16MB-ish) รุ่นเก่าบางรุ่นใช้ชิปแฟลชในแพ็คเกจสไตล์ TSOP / TSSOP การประชุมเชิงปฏิบัติการที่มีความสามารถในการทำงานซ้ำ SMT (ถ้าคุณกำลังทำงานแบบฝังคุณอาจมีทักษะในบ้านมิฉะนั้นตรวจสอบ บริษัท เล็ก ๆ ที่ทำโทรศัพท์ระดับแล็ปท็อป / ซ่อมแล็ปท็อป) สามารถแยกและแนบชิปนั้นเพื่อให้สามารถอ่านและเขียนได้ raw (รวมถึงรหัส ECC) ด้วยโปรแกรมเมอร์อุปกรณ์

ยังโปรดระวังว่าคุณจะทำการทดสอบเป็นหลัก:

  • วิธีที่อุปกรณ์ของคุณจะจัดการกับความผิดปกติของจังหวะเวลา / hiccups ที่แนะนำโดยการแก้ไขข้อผิดพลาดภายใน

และในกรณีที่เลวร้ายที่สุด

  • วิธีที่อุปกรณ์ของคุณจัดการกับการ์ด SD ที่ล้มเหลวในระยะสุดท้าย

หากคุณต้องการตรวจสอบว่ามันทำงานอย่างไรกับพฤติกรรมที่ผิดปกติไม่ว่าจะด้วยเหตุผลใดก็ตามจากการ์ด SD มันอาจเป็นการดีที่สุดที่จะแนะนำสัญญาณรบกวนทางไฟฟ้าให้กับส่วนต่อประสาน (เช่นโดยใส่สวิตช์บัส FET ในระหว่างนั้น มันเป็นแหล่งกำเนิดของสัญญาณไร้สาระ (ของระดับไฟฟ้าที่เหมาะสมแม้ว่า)


ความล้มเหลวของการ์ด SD ไม่สามารถสร้าง "สัญญาณรบกวนทางไฟฟ้า" ได้ แต่จะส่งคืนรหัสข้อผิดพลาดสำหรับการเขียน
Dmitry Grigoryev

2

เกี่ยวข้องกับคำตอบของ OlafM แต่แตกต่างกัน: คุณสามารถตั้งโปรแกรมไมโครคอนโทรลเลอร์ของคุณเองเพื่อพูดโปรโตคอล SD การ์ดแล้วเลียนแบบพฤติกรรมที่คุณต้องการ


1

FAT32 Master Boot Record พื้นที่น่าจะเป็นที่น่ารังเกียจที่สุดเนื่องจากในระดับตรรกะมันจะต้องอยู่ในสถานที่เดียวกันเสมอ (บางทีนี่อาจถูกจัดการโดยการรีมูฟแบบอ่อนของเซกเตอร์ที่ไม่ดี แต่ฉันค่อนข้างสงสัยว่าสิ่งนี้ถูกนำไปใช้กับฮาร์ดแวร์ทั้งหมด) ดังนั้นคุณสามารถทำงานsfdiskเป็นวงและดูว่าคุณสามารถทำลายมันได้ไหม

แต่ฉันจะขอให้คุณทำทุกอย่างเท่าที่ทำได้เพื่อปรับปรุงความน่าเชื่อถือของฮาร์ดแวร์แทนที่จะพยายามจัดการกับฮาร์ดแวร์ที่ไม่ดีในซอฟต์แวร์ ปัญหาคือการ์ด SD ล้มเหลวในรูปแบบแปลก ๆ ทุกชนิด พวกเขากลายเป็นอ่านไม่ได้พวกเขากลายเป็นไม่สามารถเขียนได้ให้ข้อมูลที่ไม่ดีพวกเขาหมดเวลาในระหว่างการดำเนินงาน ฯลฯ พยายามที่จะทำนายทุกวิธีที่การ์ดสามารถล้มเหลวเป็นเรื่องยากมาก

นี่เป็นหนึ่งในความล้มเหลวที่ฉันโปรดปราน "โหมดข้อมูลขนาดใหญ่":

sd ใหญ่ปลอมข้อมูลขนาดใหญ่

การ์ด SD เป็นสินค้าอุปโภคบริโภคที่มีแรงกดดันด้านต้นทุนอย่างมาก ชิ้นส่วนเปลี่ยนแปลงอย่างรวดเร็วและเอกสารข้อมูลสินค้าหายาก ผลิตภัณฑ์ลอกเลียนแบบไม่เคยได้ยินมาก่อน สำหรับการจัดเก็บข้อมูลราคาถูกนั้นเป็นเรื่องยากที่จะเอาชนะ แต่ในขณะที่ SSD ให้ความสำคัญกับความน่าเชื่อถือลำดับความสำคัญสำหรับการ์ด SD คือความเร็วความจุและค่าใช้จ่าย (อาจไม่อยู่ในลำดับนั้น)

แนวป้องกันแรกของคุณคือการใช้ชิ้นส่วน eMMC แบบบัดกรีได้พร้อมแผ่นข้อมูลจริงจากผู้ผลิตที่มีชื่อเสียงแทนการ์ด SD แบบถอดได้ ใช่มันมีราคาต่อ GB มากขึ้น แต่ชิ้นส่วนจะอยู่ในช่วงการผลิตนานขึ้นและอย่างน้อยคุณก็รู้ว่าคุณได้อะไรบ้าง การบัดกรีส่วนลงยังหลีกเลี่ยงโฮสต์ทั้งหมดของปัญหาที่อาจเกิดขึ้น (การ์ดที่ถูกดึงออกระหว่างการเขียนการสัมผัสทางไฟฟ้าที่ไม่ดี ฯลฯ ) ด้วยการ์ดแบบถอดได้

หากผลิตภัณฑ์ของคุณต้องการที่เก็บข้อมูลแบบถอดได้หรือมันสายเกินไปที่จะเปลี่ยนแปลงสิ่งใดก็ตามให้พิจารณาใช้เงินพิเศษสำหรับการ์ดเกรด "อุตสาหกรรม" หรือใช้เป็นวัตถุที่ใช้แล้วทิ้ง สิ่งที่เราทำ (ภายใต้ linux) คือfsckการ์ดที่บู๊ตและทำการฟอร์แมตใหม่หากมีการรายงานข้อผิดพลาดเนื่องจากการฟอร์แมตเป็นที่ยอมรับในกรณีการใช้งานนี้ จากนั้นเราfsckก็อีกครั้ง หากยังคงรายงานข้อผิดพลาดหลังจากทำการฟอร์แมตใหม่เราจะ RMA และแทนที่ฮาร์ดแวร์ด้วยชุดตัวเลือกใหม่ที่ใช้ eMMC

โชคดี!


ฉันยกนิ้วให้คุณ ฉันใช้การ์ด SD จำนวนมากและล้มเหลวหนึ่งครั้งสองครั้งต่อปี ฉันไม่เคยคิดมาก แต่ในประสบการณ์ของฉันเองบัตรที่ล้มเหลวของฉันแสดงอาการของ FAT ที่ล้มเหลวก่อนที่พวกเขาจะไร้ค่า ฉันคิดว่าคุณกำลังไปที่บางสิ่งบางอย่างที่นี่ :) ดังนั้นเพียงแค่การสร้างและลบไฟล์ควรใช้ heck จาก FAT
jwzumwalt

1

บางทีนี่อาจไม่ใช่ทิศทางที่คุณต้องการ แต่ฉันพบว่าการถอดการ์ด SD ของฉันในขณะที่วิทยุหรือแล็ปท็อปของฉันกำลังอ่านจากนั้นรับประกันว่าการ์ด SD ที่ชำรุดประมาณ 1/5 หรือ 1/10 ครั้ง ดูเหมือนว่าการ์ดไม่สามารถดึงพลังงานออกได้ดีระหว่างการอ่าน หลังจากอ่านความคิดเห็นของ Robert Calhoun ด้านล่างมันทำให้ฉันเชื่อว่ามันอาจเป็นอันตรายต่อ FAT แม้ว่าฉันจะไม่รู้ว่าทำไมการอ่านเพียงแค่ทำให้เกิดความผิดพลาด - ไม่ควรมีการเขียนใด ๆ เกิดขึ้น?


สิ่งนี้อาจสร้างความเสียหายให้กับ FS แต่ไม่แน่ใจว่าจริง ๆ แล้วมันจะสร้างเซกเตอร์ที่ไม่ดี
akostadinov

ฉันสามารถบอกคุณได้ว่าการ์ดล่มและต้องฟอร์แมตใหม่ ฉันทำมาหลายครั้งแล้วโดยใช้การ์ด SD เป็น Raspberry Pie แล็ปท็อปและอุปกรณ์ในบ้านของฉัน
jwzumwalt

2
ต้องฟอร์แมต! = ทำให้เกิดความเสียหายต่อภาค ระบบไฟล์ใช่ ภาคอาจจะ
wizzwizz4

1

หากการ์ด sd ของคุณอยู่ในรูปแบบ FAT32 คุณสามารถแก้ไข hex ไขมัน 2 ตัวและทำเครื่องหมายเซกเตอร์เสียด้วยรหัสฐานสิบหกที่ถูกต้อง นี่เป็นเพียงเคล็ดลับถ้าคุณต้องการทดสอบตรรกะซอฟต์แวร์ที่ควรจะหาเซกเตอร์เสียในสถานที่นี้โดยเฉพาะ มันจะไม่เป็นอันตรายต่อการ์ด sd ของคุณเช่นกันฟอร์แมตจะนำมันกลับสู่สภาพปกติ


1
ยินดีต้อนรับสู่ Super User! ดูเหมือนว่าวิธีการที่น่าสนใจ - คุณอาจอธิบายวิธีการแก้ไข hex โดยเฉพาะได้ไหม ขอบคุณ
Ben N

ฉันคิดว่าคำสั่ง Linux hdparm จะทำเคล็ดลับ: มันจะช่วยให้คุณสามารถบันทึกภาคส่วนที่คุณสามารถแก้ไขในภายหลังและจากนั้นเขียนกลับไปที่การ์ดของคุณ คุณต้องค้นหาเอกสารเกี่ยวกับ vfat และ man hdparm ว่า ขออภัยฉันไม่มีที่ไหนใกล้กับคอมพิวเตอร์ที่ใช้ windows
Emile De Favas

--make-bad-sectorธงดูแนวโน้ม! อย่างไรก็ตามฉันไม่สามารถบอกได้ว่าสิ่งนี้จะใช้ได้เฉพาะในระบบ linux ที่เรียกใช้คำสั่งนี้ในตอนแรก ฉันหวังว่าคำสั่งhdparm --make-bad-sector 20000 /dev/sd#จะทำให้เซ็กเตอร์ 20000 เสียและถูกตรวจพบว่าไม่ดีบนอุปกรณ์ฮาร์ดแวร์ในตัวที่ไม่ได้ใช้งานลินุกซ์ ความคิดใด ๆ
Gabe Krause

0

ฉันสงสัยว่าสามารถสร้างสคริปต์ Linux badblocks เพื่อทดสอบการทำลายล้างในภาคส่วนเดียวซ้ำหลาย ๆ ชั่วโมงได้หรือไม่

ในภาคส่วนเดียวไม่ใช่เพราะรหัสระดับการสึกหรอภายในการ์ด SD จะทำการแมปบล็อกแบบลอจิคัลทั่วสถานที่

แต่คุณสามารถทำงานbadblocks -wในวงจนทำให้เกิดบางบล็อกที่ดีที่จะปรากฏ สิ่งนี้ควรใช้งานได้:

while badblocks -w /dev/xx; do :; done

สมมติว่า badblocks คืนค่า 0 หากตรวจไม่พบบล็อกที่ไม่ดีและ otherwise 0 เป็นอย่างอื่น (หน้า man ไม่พูดและฉันไม่ได้ตรวจสอบซอร์สโค้ด)


-1

โดยปกติแล้วการ์ด SD / uSD จะใช้การปรับระดับการสวมใส่ซึ่งอาจเป็นเรื่องยาก ขึ้นอยู่กับประเภท (เซลล์ชั้นเดียว, มัลติเลเยอร์, ​​TLC, 3D-NAND และอื่น ๆ ) รอบการเขียนที่จำเป็นในการแยกมันออกมามากพอที่จะหมดส่วนของเซกเตอร์อาจอยู่ในวัณโรคหลายตัว

จริง ๆ แล้วฉันทดสอบสิ่งนี้ด้วย 4GB, 64GB และ 256GB Pro Duo, SSD และ thumbdrive, 64GB K --- โดยใช้ชิป 4 Micron 16GB กินเวลาประมาณ 3.84TB ก่อนที่มันจะล้มเหลวด้วยข้อผิดพลาดที่อ่อนนุ่มเพียงครั้งเดียวในพื้นที่ FAT . 256GB ที่ใช้กินเวลาน้อยลงเล็กน้อย แต่คาดว่าจะไม่มีการเข้าถึงชิพโดยตรงมันอาจจะเขียนได้ 5TB ก่อนที่จะได้รับความเสียหาย MBR ในที่สุด แต่ก็ไม่ชัดเจนถ้าคอนโทรลเลอร์ทำให้มันทำงานอย่างสมบูรณ์ในโหมด USB3 แต่ USB2 มีข้อบกพร่องมากขึ้นระหว่างการอ่าน และมันก็ร้อนมาก 4GB Duo ล้มเหลวในเครื่องอ่านเมื่อทำการคัดลอกข้อมูลอีกครั้งไม่สามารถมั่นใจได้ แต่อาจเท่ากับ 6 ปีของการใช้งานและกล้องก็แสดงข้อความ "กู้คืน" แรงดันไฟฟ้าของแหล่งจ่ายไฟที่แตกต่างกันโดยบังเอิญระหว่างการเขียนจะทำให้การทำงานล้มเหลวเร็วขึ้นมาก 128GB microSD ของฉันล้มเหลวหลังจากใช้งานด้วยอาการคล้ายกันประมาณ 2 ปี

ลบหมายเหตุที่ไม่เกี่ยวข้องออกเกี่ยวกับการทดลอง X-ray


1
มีหลายคำตอบที่ช่วยทำลายอธิการบดีที่เฉพาะเจาะจงอยู่แล้ว คำแนะนำของคุณเกี่ยวกับการทำลายแบบสุ่มไม่ได้ให้อะไรพิเศษ
MátéJuhász
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.