저는 약간의 조사를 해본 결과 데이터 손실을 방지하기 위해 SD 카드와 microSD 카드가 읽기 전용으로 전환되는 SD 카드 수명 종료 동작에 대해 들었습니다(무엇이라고 해야 할지 잘 모르겠습니다). 처음 들었을 때 정말 영리한 것 같다고 생각했어요. 이제는 잘 모르겠습니다.
몇 가지 배경 정보: 저는 쓰기 방지 모드로 들어가기 전에 2년 동안 라즈베리 파이를 많이 사용하는 microSD를 가지고 있었습니다. 나는 dd를 사용하여 전체 OS와 파일 시스템을 교체 카드로 옮겼습니다. 사용한 지 며칠 만에 이 카드도 쓰기 금지되어 있다는 것을 깨달았습니다. 나는 두 번째 백업 카드가 거의 즉시 똑같은 일을 하기 전까지는 운이 좋지 않다고 생각했습니다.
이것이 나를 괴롭혔기 때문에 그 이후로 나는 라즈베리를 가만히 두었습니다. 하지만 SD 카드가 어떻게 스스로 쓰기 방지 기능을 알고 있는지 궁금해지기 시작했습니다. 쓰기 주기 수를 유지하고 dd를 사용하여 전체 디스크의 이미지를 만들었다면 SD 카드가 오래되었다고 생각하도록 속여서 손상되었을 수 있습니다. 하지만 임종 행동의 구현을 어디에서도 찾을 수 없습니다. 어떻게 작동하는지 아는 사람 있나요? 실행 취소하고 싶지만 쓰기 방지가 매우 낮은 수준에서 구현된 것 같습니다. sudo를 사용하여 /dev/sdX에 액세스할 수도 없습니다.
내 말이 맞고 그것이 일종의 쓰기 주기 집계를 유지한다면 이는 약간 실망스러운 일입니다. 이는 SD 카드가 실제로 사망한 것이 아니라는 의미입니다. 이는 단지 예방 조치일 뿐입니다. 이것도 좋지만, 정기적으로 백업을 하고 있으니 죽을 때까지 사용해 보고 싶습니다.
저의 장황한 배경을 가지고 임종 행동이 어떻게 구현되는지 아는 사람이 있습니까? 그리고 우발적인 행동의 유발을 취소할 수 있는 방법이 있습니까?
답변1
대부분의 제조업체는 최상의 기대 수명 시나리오와 최악의 기대 수명 시나리오를 결정하는 것을 불가능하게 만드는 웨어 레벨링 메커니즘을 게시하지 않습니다(아마도 그 지식을 바탕으로 그러한 카드를 즉시 파괴할 수 있기 때문일 것입니다).
SanDisk는 꽤 오래 전에도 몇 가지 통찰력을 제공했습니다(https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf). 이는 변경되거나 개선되었을 수 있지만 기본 사항은 여전히 적용되어야 합니다.
각 메모리 칩은 블록으로 구분됩니다. 블록은 섹터로 구성된 메모리 셀의 배열입니다. (...) 쓰기 또는 읽기 작업의 최소 단위는 페이지(또는 섹터)입니다. 삭제 작업의 최소 단위는 블록입니다. 물리적 블록은 논리적으로 영역으로 그룹화됩니다. (...) 웨어 레벨링은 영역 내에서 수행됩니다. 현재 펌웨어는 카드 용량 전체에 걸쳐 마모를 분산시키지 않습니다. 각 영역에는 플래시 카드의 논리적 용량을 충족하기 위해 할당된 것보다 약 3%의 추가 "예비 블록"이 있습니다. 이 블록 그룹을 일반적으로 "Erase Pool"이라고 합니다.
마모가 카드 위에 퍼져 있어도 원리는 동일합니다.
카드는 블록의 수명이 다했음을 감지하면 쓰기 작업에 사용할 수 있는 블록에서 해당 블록을 제거합니다. 결과적으로 삭제 풀의 크기가 줄어듭니다. 이는 호스트에서 볼 수 있는 카드 용량에 영향을 주지 않습니다. 마모로 인해 쓰기 작업에 사용할 수 있는 블록 풀이 소진되면 카드의 쓰기 작업 수명이 다하게 됩니다.
카드 용량이 줄어들지 않고 소비자 카드의 웨어 레벨링이 저장된 데이터(SSD에서와 같이)를 다시 쓰지 않기 때문에 일부 쓰기 작업으로 인해 카드가 빨리 마모될 수 있습니다. 한 가지 유형은 전체 블록을 써야 하는 섹터에만 쓰는 것입니다. 운영 체제에 따라 카드의 블록 크기보다 훨씬 낮은 dd
기본 블록 크기를 사용할 수 있으므로 쓰기가 크게 증폭될 수 있습니다. 512
예: SD 카드의 블록 크기가 16kB이고 한 섹터가 512바이트인 경우 이 경우 마모량은 최대 31배까지 증가할 수 있습니다! 이것이 두 번째 카드가 일찍 실패한 이유일 수 있습니다.
마모 정보는 sdcard 하드웨어의 일부이므로 복사되지 않으며 따라서 이 정보는 일반적인 방법으로 읽거나 복원할 수 없습니다. SD 카드 컨트롤러 자체가 이를 방지하므로 쓰기 방지에도 동일하게 적용됩니다. 따라서 아니요, 하드웨어(SD 카드의 기계적 스위치) 또는 소프트웨어(읽기 전용 장착) 쓰기 보호에 대해 이야기하지 않는 경우 이 프로세스는 되돌릴 수 없습니다.
답변2
카드에는 웨어 레벨링에 사용할 추가 공간이 있어야 하지만, 가지고 있는 카드는 멍청하고 여분의 블록이 없으며 모든 블록에 기록했기 때문에 읽기 전용으로 전환되는 것처럼 들립니다. 운전. 를 사용하는 대신 파일을 복사 dd
하거나 ext[234] 파일 시스템을 복사하는 데 을 사용하면 e2image -ar
디스크에서 사용되지 않은 모든 블록에 불필요하게 쓰는 것을 방지할 수 있어 도움이 될 수 있습니다.