일부 임베디드 하드웨어에 대한 일부 읽기 / 쓰기 코드의 복원력을 테스트해야합니다. 통제 된 연구를 위해 몇 개의 SD 카드를 희생하고 알려진 여러 섹터를 어떻게 파괴 할 수 있습니까?
내가 생각할 수있는 유일한 것은 단일 섹터를 몇 백만 번 덮어 쓰는 것입니다. Linux 불량 블록 스크립트를 만들어 단일 섹터에서 몇 시간 동안 반복적으로 파괴 테스트를 실행할 수 있는지 궁금합니다.
일부 임베디드 하드웨어에 대한 일부 읽기 / 쓰기 코드의 복원력을 테스트해야합니다. 통제 된 연구를 위해 몇 개의 SD 카드를 희생하고 알려진 여러 섹터를 어떻게 파괴 할 수 있습니까?
내가 생각할 수있는 유일한 것은 단일 섹터를 몇 백만 번 덮어 쓰는 것입니다. Linux 불량 블록 스크립트를 만들어 단일 섹터에서 몇 시간 동안 반복적으로 파괴 테스트를 실행할 수 있는지 궁금합니다.
답변:
유용 할 수 있는 대체 방법 .
코드가 Linux에서 실행되는 경우 "결함이있는"논리 장치로 코드를 테스트 할 수 있습니다. dmsetup
I / O 오류를 반환하는 장치를 만들 수 있습니다. error
및 / 또는 flakey
대상을 사용하여 장치를 구축하십시오 . 보낸 사람 man 8 dmsetup
:
error
이 영역으로가는 모든 I / O에 오류가 발생합니다. 구멍이있는 장치를 테스트하거나 만들 때 유용합니다.
flakey
linear
대상 과 유사한 매핑을 생성 하지만 주기적으로 신뢰할 수없는 동작을 나타냅니다. 테스트시 고장난 장치를 시뮬레이션하는 데 유용합니다.
참고 : flakey
대상 사용법은 여기 에 설명되어 있습니다 . 기본 예는 여기 입니다.
내가 아는 한, I / O 오류가 즉시보고되므로 지연, 정지 등을 예상 할 수있는 실제 SD 카드 동작과는 다릅니다. 예비 시험 등.
이 사람은 불량 블록을 표시하는 데 사용되는 SD 카드 내부의 마이크로 컨트롤러를 해킹했습니다 : https://www.bunniestudios.com/blog/?p=3554
동일한 작업을 수행하고 임의로 블록을 결함으로 표시 할 수 있습니다.
오늘 Chaos Computer Congress (30C3)에서 xobs와 저는 일부 SD 카드에 메모리 카드 자체에서 임의의 코드 실행을 허용하는 취약점이 포함되어 있다는 발견을 공개했습니다. 어두운면에서 메모리 카드의 코드 실행은 MITM (man-in-the-middle) 공격 클래스를 가능하게합니다.이 경우 카드는 한 가지 방식으로 작동하지만 실제로는 다른 방식으로 작동합니다. 한편으로는 하드웨어 애호가가 매우 저렴한 유비쿼터스 마이크로 컨트롤러 소스에 액세스 할 수도 있습니다.
.
이러한 알고리즘은 응용 프로그램 또는 OS 수준에서 실행하기에는 너무 복잡하고 장치별로 고유하므로 모든 플래시 메모리 디스크에는 사용자 지정 디스크 추상화 알고리즘을 실행할 수있는 상당히 강력한 마이크로 컨트롤러가 제공됩니다. 소형 microSD 카드조차도 하나 이상의 칩이 아닌 컨트롤러와 하나 이상의 플래시 칩을 포함합니다 (고밀도 카드는 여러 개의 플래시 다이를 쌓을 수 있습니다).
.
임베디드 마이크로 컨트롤러는 일반적으로 크게 수정 된 8051 또는 ARM CPU입니다. 현대적인 구현에서, 마이크로 컨트롤러는 100 MHz 성능 수준에 접근 할 것이며, 여러 개의 하드웨어 가속기가 온다이 (die-on) 상태가 될 것입니다. 놀랍게도 이러한 컨트롤러를 장치에 추가하는 비용은 아마도 $ 0.15- $ 0.30 정도일 것입니다. 특히 같은 사업부에서 플래시 메모리와 컨트롤러를 모두 제조 할 수있는 회사의 경우 더욱 그렇습니다. 각 플래시 메모리 칩을 철저히 테스트하고 특성화하는 것보다 이러한 마이크로 컨트롤러를 추가하는 것이 더 저렴할 수 있습니다. 이는 마이크로 컨트롤러를 포함하더라도 관리 형 플래시 장치가 원시 플래시 칩보다 비트 당 저렴할 수있는 이유를 설명합니다.
.
요점은 특히 타사 컨트롤러의 경우 펌웨어로드 및 업데이트 메커니즘이 사실상 필수적이라는 것입니다. 최종 사용자는 공장에서 모두 발생하기 때문에이 프로세스에 거의 노출되지 않지만 메커니즘이 덜 실제적이지는 않습니다. 중국의 전자 제품 시장을 조사한 결과, 상점 직원이 카드 용량을 "확장"하는 카드에서 펌웨어를 굽는 것을 보았습니다. 즉, 카드 용량이 카드 용량보다 훨씬 크다는 펌웨어를로드합니다 실제 사용 가능한 저장 용량. 판매 시점에서 이것이 가능하다는 사실은 대부분 업데이트 메커니즘이 보안되지 않았 음을 의미합니다.
30C3의 강연에서 Appotech과 AX211 및 AX215 제품과 같은 특정 마이크로 컨트롤러 브랜드를 탐색 한 결과를보고합니다. 컨트롤러가 펌웨어로드 모드로 전환되는 제조업체 예약 명령 (즉, CMD63 다음에 'A', 'P', 'P', 'O')을 통해 전송 된 간단한 "노크"시퀀스를 발견했습니다. 이 시점에서 카드는 다음 512 바이트를 받아 들여 코드로 실행합니다.
대부분의 최신 SD 카드 (또는 eMMC)는 정적 및 동적웨어 레벨링을 사용하기 때문에 일반적으로 작동하지 않습니다. 즉, 지능형 컨트롤러가 쓰기 명령을 해석하여 가장 적게 사용되는 플래시 섹터 중 하나에 매핑합니다.
유일하게 할 수있는 일은 공급 업체에 연락하여 데이터 시트를 요청하는 것입니다. 웨어 레벨링 알고리즘의 상태를 검색하는 방법 (공급 업체별)이있을 수 있습니다. 이를 통해 기본 플래시의 상태 / 사용을 쿼리 할 수 있습니다. 또는 운이 좋지 않을 수도 있고 존재하지 않을 수도 있습니다.
실제로 플래시를 파괴하는 것이 목표라면 대량의 읽기 및 쓰기주기를 실행하고 읽고있는 데이터가 여전히 일관성이 있는지 지속적으로 확인하면됩니다. 예를 들어, 두 개의 큰 파일을 작성하고 체크섬을 저장 한 후 체크섬을 확인하기 위해 파일을 읽고 쓸 수 있습니다. 플래시가 클수록이 과정이 오래 걸립니다.
작동 온도를 높여서 트랜지스터 마모를 증가시킬 수 있습니다. 가열 된 칩 (70-120 ° C)에서 쓰기 소거주기를 사용하십시오. 빨리 마모됩니다.
서문 :이 옵션에는 추가 프로그래밍 및 하드웨어 수정이 필요하지만 호스트에 투명하게 제어 된 읽기가 가능합니다.
SD 카드에는 여러 I / O 옵션이 있지만 SPI를 통해 제어 할 수 있습니다. SD 카드를 가져 와서 마이크로 컨트롤러 (예 : Arduino)에 핀을 부착 할 수 있도록 수정하려면 Arduino가 SD 카드를 모방하고 SD 카드를 읽는 장치에 투명하게 만들 수 있습니다. 마이크로 컨트롤러의 코드는 필요할 때 잘못된 데이터를 의도적으로 반환 할 수 있습니다. 또한 마이크로 컨트롤러에 SD 카드를 배치하면 판독 값이 마이크로 컨트롤러를 통해 SD 카드로 전달되어 기가 바이트의 테스트를 수행 할 수 있습니다.
나는 ebay / aliexpress에 가서 중국에서 찾을 수있는 가장 저렴한 SD 카드를 구입합니다. 이들은 종종 결함이있는 섹터와 함께 제공되거나 소프트웨어가 실제보다 훨씬 더 크게 설정되어 있습니다. 어느 쪽이든 테스트에 사용할 결함이있는 SD 카드가 있어야합니다.
옛날 옛적에, 몇 년 전, 나는 다소 혼란스러운 어머니를 위해 SD 카드에서 졸업 사진과 비디오 세트를 가져와야했습니다. 면밀히 조사한 결과, 카드는 외부 케이스에서 눈에 띄는 균열로 물리적으로 손상을 입 었으며 몇 가지 불량 섹터, 특히 몇 가지 초기 중요 섹터가 있었으며 당시 가장 안정적인 복구 프로그램조차도 카드를 완전히 읽지 못했습니다. . 또한 법의학 데이터 도구는 비용이 많이 들었습니다.
나는 동일한 브랜드 / 크기의 SD 카드를 얻고 자신의 사용자 정의 원시 데이터 덤프 및 복원 유틸리티를 작성하여 나쁜 카드에서 좋은 카드로 데이터를 복사했습니다. 유틸리티가 불량 섹터에 도달 할 때마다 해당 섹터에 대한 모든 0을 쓰기 전에 여러 번 재 시도하고 포기 및 중지하는 대신 실패를 무시하고 다음 섹터로 넘어갑니다. 일부 섹터는 여전히 약 40 %의 읽기 성공률을 가지고 있음을 알았으므로 재 시도를 시도했습니다. 데이터가 새로운 SD 카드에 있으면 이전에 실패한 복구 도구는 데이터 손실 / 손상을 최소화하면서 완벽하게 작동했습니다. 전체적으로 모든 파일의 약 98 %가 복구되었습니다. 이전에 삭제 된 많은 항목도 실제로 삭제 된 항목이 없기 때문에 복구되었습니다. 그저 표시된 것으로 서서히 덮어 씁니다. 약간 지루한 데이터 복구 연습으로 시작한 것은 저의 기억에 남고 흥미로운 개인 소프트웨어 개발 프로젝트 중 하나가되었습니다. 궁금하신 분은 어머니에게 감격했습니다.
여하튼,이 이야기는 SD 카드를 물리적으로 손상시켜 데이터에 여전히 액세스 할 수 있지만 거의 작동하지 않고 읽을 수있는 섹터가있는 데 어려움이 있음을 보여줍니다. SD 카드 플라스틱은 매우 연약한 경향이 있으므로 값싼 플라스틱으로 구부리거나 절단하면 트릭이 발생할 수 있습니다. 귀하의 마일리지가 다를 수 있습니다.
해당 지역의 일부 데이터 복구 장소에서 문의 할 수도 있습니다. 여러 가지 실패 또는 실패한 장치의 데이터 복구를 전문으로하기 때문에 유용한 입력 / 팁이 있어야하며 사전에 훈련 된 SD 카드 (예 : 교육 목적)를 보유하고있을 수도 있습니다.
dd
요즘에는 이와 비슷한 방식으로 작동하도록 매개 변수를 제공 할 수 있다고 기대합니다 . 그래도 확실하지 않습니다.
이 답변은 @Ruslan의 의견에 대한 확장입니다.
가능한 대안 :
이것이 당신의 목적에 맞는지 확실하지는 않지만 실제로 카드를 물리적으로 손상시키는 것으로 충분할 것입니다.
일부 오래된 저용량 SD 카드 (16MB-ish)는 TSOP / TSSOP 스타일 패키지에서 플래시 칩을 사용합니다. SMT 재 작업이 가능한 작업장 (임베디드 작업을 수행하는 경우 해당 기술을 보유하고 있거나 보드 수준 전화 / 노트북 수리를 수행하는 소규모 회사를 확인)은 해당 칩을 분리하여 다시 연결하여 읽을 수 있습니다. 장치 프로그래머와 함께 원시 (ECC 코드 포함).
여전히 다음을 주로 테스트한다는 점에 유의하십시오.
최악의 경우
SD 카드에서 어떤 이유로 든 불규칙한 동작으로 어떻게 작동하는지 확인하려면 인터페이스 라인에 전기 노이즈를 도입하는 것이 가장 좋습니다. 그것은 무의미한 신호의 소스로 (올바른 전기 레벨의).
FAT32 마스터 부트 레코드 영역은 아마도 같은 레벨에 있어야하기 때문에 논리적으로 남용하기 가장 쉽습니다. (아마도 이것은 불량 섹터의 소프트 리 맵핑에 의해 처리되지만 모든 하드웨어에서 구현되는 것은 다소 회의적입니다.) 따라서 sfdisk
루프를 실행 하여 그렇게 할 수 있는지 확인할 수 있습니다.
그러나 소프트웨어의 나쁜 하드웨어를 처리하는 대신 하드웨어 안정성을 향상시키기 위해 할 수있는 모든 일을하도록 간청 할 것입니다. SD 카드가 모든 종류의 이상한 방식으로 실패한다는 문제입니다. 그들은 읽을 수 없게되고, 쓸 수 없게되고, 나쁜 데이터를 제공하고, 작동 중에 시간이 초과되는 등 카드가 실패 할 수있는 모든 방법을 예측하는 것은 매우 어렵습니다.
내가 가장 좋아하는 실패 중 하나 인 "빅 데이터 모드"입니다.
SD 카드는 엄청난 비용 압력을받는 상품 소비자 제품입니다. 부품이 빠르게 변하고 데이터 시트가 나오기 어렵습니다. 모조품은 들어 본 적이 없습니다. 저렴한 스토리지의 경우이기는 것이 어렵지만 SSD는 안정성을 최우선으로 생각하지만 SD 카드의 우선 순위는 속도, 용량 및 비용입니다 (아마 순서대로는 아님).
첫 번째 방어선은 착탈식 SD 카드 대신 유명 제조업체의 실제 데이터 시트와 함께 납땜 가능한 eMMC 부품을 사용하는 것입니다. 그렇습니다. GB 당 비용이 더 많이 들지만 부품은 더 오랜 시간 동안 생산 될 것이며 적어도 당신은 무엇을 얻고 있는지 알고 있습니다. 부품을 아래로 납땜하면 탈착식 카드로 인해 발생할 수있는 잠재적 인 문제 (쓰기 중에 카드가 쇠약 해 지거나 전기 접촉 불량 등)를 피할 수 있습니다.
제품에 이동식 저장 장치가 필요하거나 변경하기에 너무 늦은 경우 "산업용"등급 카드에 추가 비용을 지불하거나 일회용 물체로 취급하십시오. 우리가 (리눅스에서)하는 일은 fsck
부팅시 카드이며,이 사용 사례에서 재 포맷이 가능하므로 오류가보고되면 다시 포맷하십시오. 그런 다음 fsck
다시. 다시 포맷 한 후에도 오류가 계속보고되면 RMA에서 오류를보고 하드웨어를 eMMC를 사용하는 최신 버전으로 교체합니다.
행운을 빕니다!
아마도 이것은 당신이 원하는 방향이 아니지만 내 라디오 또는 랩톱에서 읽는 동안 SD 카드를 제거하는 것이 SD 카드를 약 1/5 또는 1/10 번 보장한다는 것을 알았습니다. 읽기 및 쓰기 작업 중에는 카드의 전원이 제대로 제거되지 않은 것 같습니다. 아래의 Robert Calhoun의 의견을 읽은 후 FAT가 손상 될 수 있다고 믿게되었습니다. 읽기만으로 인해 충돌이 발생하는 이유를 모르겠지만 쓰기 작업이 없어야합니까?
SD 카드가 FAT32 형식 인 경우 2 개의 지방을 16 진수로 편집하고 올바른 16 진수 코드로 섹터를 불량으로 표시 할 수 있습니다. 이 특정 위치에서 불량 섹터를 찾아야하는 소프트웨어를 논리 테스트하려는 경우에는이 방법이 필요합니다. 그것은 SD 카드에도 해를 끼치 지 않으며 다시 포맷하면 정상적인 상태로 돌아갑니다.
--make-bad-sector
플래그 유망 보인다! 그러나 이것이 처음 에이 명령을 실행하는 Linux 시스템에서만 작동하는지 알 수 없습니다. 나는 명령 hdparm --make-bad-sector 20000 /dev/sd#
이 어떻게 든 20000 섹터를 나쁘게 만들고 Linux를 실행하지 않는 내장 하드웨어 장치에서 나쁘게 감지 되기를 바라고 있습니다. 이견있는 사람?
Linux 불량 블록 스크립트를 만들어 단일 섹터에서 몇 시간 동안 반복적으로 파괴 테스트를 실행할 수 있는지 궁금합니다.
SD 카드 내부의웨어 레벨링 코드가 모든 장소에서 논리 블록을 다시 매핑하기 때문에 단일 섹터에서 – 아니요.
그러나 당신은 쉽게 실행할 수있는 badblocks -w
이 원인이 될 때까지 루프에서 일부 표시 불량 블록. 이와 같은 것이 작동해야합니다.
while badblocks -w /dev/xx; do :; done
불량 블록이 감지되지 않으면 badblocks가 0을 반환하고 그렇지 않으면 ≠ 0을 가정한다고 가정합니다 (매뉴얼 페이지는 말하지 않고 소스 코드를 확인하지 않았습니다).
일반적으로 SD / uSD 카드에서는 마모 레벨링을 구현하므로 상당히 어려울 수 있습니다. 유형 (단일 계층 셀, 다중 계층, TLC, 3D-NAND 등)에 따라 섹터 풀을 소진하기에 충분한 쓰기주기가 다중 TB에있을 수 있습니다.
실제로 4 Micron 16GB 칩을 사용하는 4GB, 64GB 및 256GB Pro Duo, SSD 및 썸 드라이브, 64GB K --- s--로 약 3.84TB 지속되었으며 FAT 영역에서 단일 소프트 오류로 실패했습니다. . 256GB를 사용하면 조금 덜 지속되었지만 직접 칩에 액세스하지 않으면 MBR 손상이 발생하기 전에 아마도 5TB를 쓸 수 있었지만 컨트롤러가 USB3 모드에서 제대로 작동하지만 USB2가 리드 백 중에 더 많은 글리치가 있는지 확실하지 않았습니다. 또한 매우 뜨겁습니다. 데이터를 복사 할 때 리더에서 4GB Duo가 실패했습니다. 다시 확신 할 수는 없지만 6 년 정도 사용했을 때 카메라에 "복구 중"메시지가 표시되었습니다. 쓰기 중에 전원 전압이 변경되면 LOT이 더 빨리 실패합니다. 비슷한 증상으로 약 2 년 동안 사용한 후 128GB microSD가 실패했습니다.
X-ray 실험에 대한 관련이없는 메모를 제거했습니다.