언제든지 전원이 차단될 수 있는 상황에서도 SD카드를 안전하게 사용하세요

언제든지 전원이 차단될 수 있는 상황에서도 SD카드를 안전하게 사용하세요

우리는 OS 및 애플리케이션용 소형 내부 NAND 장치(250-500Meg)와 데이터용 8Gb SDHC SD 카드가 있는 SD 카드를 갖춘 소형 임베디드 Linux 시스템(2.6.35-ish)을 개발 중입니다.

언제든지 장치의 전원 공급이 차단될 수 있습니다.

시스템은 SD 카드에 데이터를 저장해야 합니다. 이 데이터는 매우 중요합니다. 시스템의 전체 목적입니다. 이러한 시스템은 일반적으로 원격 위치의 모든 네트워크에서 완전히 연결이 끊어지고 4~8주마다 slimenet을 통해 데이터를 검색합니다.

현재는 SD 카드에 VFAT를 추가하기만 하면 됩니다. 이는 주로 첫 번째 테스트 고객이 Win7 노트북에 데이터를 수동으로 쉽게 복사할 수 있도록 하기 위한 것입니다.

하지만 이제 잘못된 시간에 정전이 발생하여 데이터가 손실되는 것은 시간문제일 뿐이라는 걱정이 듭니다.

데이터 손실을 방지하기 위해 이러한 시스템을 구성하는 가장 좋은 방법은 무엇입니까? JFFS2는 내가 원하는 데이터 작성 방식처럼 들리지만(성능 요구 사항은 전혀 높지 않음), block2mtd 등을 사용하는 것은 꽤 투박하게 들립니다. 또한 카드 마모 레벨링이 어떻게 상호 작용할지 잘 모르겠습니다.

가장 좋은 접근 방식은 무엇입니까?

편집하다

이제 파일 시스템 VFAT를 그대로 두고 한 번에 하루 크기의 파일을 할당하고 0xFF로 패딩하여 전원 주기 오류의 위험을 크게 제한하는 것을 고려하고 있습니다. 그런 다음 미리 생성된 블록에 레코드를 추가하고 SD 카드가 0xFF 영역에 삭제/마모 수준을 기록할 만큼 어리석지 않기를 바랍니다.

noatime을 사용할 수 있지만 수정된 시간 필드 쓰기를 방지하는 동등한 VFAT nomtime이 있습니까? 새로운 날의 파일이 생성될 때까지 메타데이터 업데이트를 방지할 수 있는 방법이 필요합니다.

편집 2

Electronics Stack Exchange의 누군가가 NAND에도 ECC 데이터가 있으므로 삭제 필요성을 방지할 수 있는 방법이 없다고 상기시켜 주었습니다.

그렇다면 이 경우 block2mtd를 통한 JFFS2가 적절한가요?

편집 3

생각했던 것보다 더 나쁩니다. 내가 가지고 있는 SD 카드는 디스크에 똑같은 내용을 쓰더라도 데이터 블록을 지웁니다. 지우기 블록은 64KB로 완전히 지연된 쓰기에는 너무 큽니다. 최대 128KB의 데이터를 NAND 플래시(쓰기 동작을 제어할 수 있음)에 로그 형식으로 저장한 다음 128KB 블록을 SD 카드의 VFAT 파티션에 있는 128KB 정렬 파일에 씁니다(다른 SD 카드에 128KB가 있는 경우). 블록 삭제).

답변1

따라서 이 문제를 해결하는 방법은 '언제든지 정전이 일어날 수 있다'는 문제를 해결하는 것이다. 1분이라도 배터리를 보충할 수 없나요?

아니면 두 개의 SD 카드를 사용할 수도 있습니다. 한 카드에 데이터를 쓰고, 동기화하고, 다른 카드에 씁니다. 각 데이터 블록에는 체크섬과 블록 번호가 필요하지만 매우 불행한 정전이 발생한 경우에도 카드 중 하나가 정확해야 합니다.

귀하의 기본 질문은 SD 카드의 마모 평준화입니다. 제가 아는 한 카드 공급업체에 따라 다릅니다(일괄 처리라도 언제든지 변경할 수 있습니다). 정전을 제대로 처리하지 못할 수도 있습니다. 그것이 무엇을 하느냐에 따라 이는 단지 쓰고 있는 블록을 손상시키는 것 이상의 의미를 가질 수도 있습니다.

  1. 카드가 작다고 가정해 보겠습니다. 즉 3(플래시) 블록입니다. 블록 1은 2~3회 이상의 쓰기를 받았습니다. 물리적 블록을 숫자로 부르고 논리적 블록 A,B,C를 문자로 부르겠습니다. 이제 A=1, B=2, C=3입니다.
  2. 블록 A에 쓰기를 실행합니다. SD 카드는 아하! 여기서는 마모 레벨링이 필요합니다. 그렇지 않으면 블록 1이 2와 3보다 먼저 마모됩니다. 블록 1과 2를 교환하기로 결정합니다.
  3. 블록 1을 RAM 위치 i(시스템 RAM이 아닌 SD 카드)로 읽습니다. 변경하려는 부분이 업데이트됩니다.
  4. 블록 2를 RAM 위치 ii로 읽습니다.
  5. 블록 1을 지웁니다.
  6. RAM 위치 ii를 블록 1에 씁니다.
  7. 매핑 테이블을 B=1로 업데이트합니다.
  8. 블록 2를 지웁니다.
  9. RAM 위치 i를 블록 2에 씁니다.
  10. A=2를 나타내도록 매핑 테이블을 업데이트합니다.

물론 "매핑 테이블 업데이트"가 항상 간단한 것은 아닙니다. 5-10은 순서가 다를 수 있습니다(모두 완료되면 문제가 되지 않습니다. 물론 쓰기 전에 삭제가 이루어져야 합니다). 그러나 정전이 발생하면 (예상대로) A뿐만 아니라 B도 손상될 수 있습니다. 또는 지도 업데이트 중에 정전이 발생하면 어떤 종류의 피해가 발생할 수 있는지 누가 알겠습니까?

답변2

Electronics.stackexchange.com에서도 비슷한 내용이 논의됩니다.예상치 못한 정전으로부터 SD 카드를 보호하는 방법은 무엇입니까?

유효한 부차적인 답변직렬 연결소프트웨어 솔루션을 사용하는 것은 하드웨어를 살펴보는 것입니다. (ESE에도 이에 대한 질문이 있지만 지금은 찾을 수 없습니다. 엄밀히 말하면 SD 카드에 관한 것이 아니라 장치의 전원 공급 중단 및 감지 및 작동 방법에 관한 것입니다. 그 위에) .

간단히 말해서, 배터리 전원이 없을 수도 있지만 전원 공급 장치에는 전원을 원활하게 하기 위한 꽤 큰 커패시터가 있습니다. 기본적으로 전기는 그냥 사라지는 것이 아닙니다. 전압은 점차 감소합니다. 전압이 특정 지점 아래로 떨어지면 내장 시스템에 RESET 신호를 보내는 저전압 보호 IC/회로가 있을 수 있습니다. PC 마더보드에도 이러한 기능이 있으며 PSU의 "POWEROK" 신호에 응답합니다. 즉, 전원이 끊기면 전압이 안전 수준 아래로 떨어지기 전에 컴퓨터가 몇 밀리초 동안 강제로 정지됩니다. 이 시간 동안 SD 카드와 같은 주변 장치의 전원은 계속 켜져 있지만 컴퓨터에서는 더 이상 트랜잭션이 없습니다.

SD 카드에는 웨어 레벨링을 포함하여 보류 중인 트랜잭션을 완료하는 데 충분한 시간이 있을 수 있습니다.앞으로그 힘이 나갔습니다. 충분히 큰 커패시터를 사용하거나 SD 카드 근처에 커패시터를 사용하여 전원 공급 장치를 개선하면 이를 보장하는 데 도움이 될 수 있지만 언제든지 플랫폼을 있는 그대로 실험할 수 있습니다. 충분히 오랫동안 전력을 유지할 가능성이 높습니다.

문제의 하드웨어 측면이 문제가 아닌 경우 순수한 소프트웨어 측면만 해결하면 됩니다.드 로버트중복성을 위해 두 개의 카드를 사용하는 아이디어는 나쁘지 않으며 VFAT와 같은 표준 파일 시스템을 사용하면 카드의 웨어 레벨링 알고리즘이 엉망이 될 위험이 줄어듭니다.

어느 쪽이든 그렇게 많은 문제가 발생하지는 않을 것입니다. 카드의 블록이 100회 쓰기를 견딜 수 있다고 가정하고(보수적으로 생각하되 고품질 카드를 얻으려고 노력하십시오!) 8GB 카드를 사용하면 첫 번째 블록이 실패하면 800GB를 쓰게 ​​됩니다(물론 통계적으로 말하면). .

답변3

예상치 못한 정전으로 인해 SD, ext2 루트 파일 시스템이 손상되는 문제가 발생했습니다. 먼저, 읽기 전용 루트 마운트로 시스템을 실행하고 있습니다. 쓰기 가능한 저장소가 필요하지만(데이터 레코드가 없음) 두 번째 파티션을 쓰기 가능하게 만듭니다. 예상치 못한 정전이 발생할 경우 FS의 손상을 최소화하기 위해 이를 ext3 파티션으로 설정했습니다. 하지만 이렇게 하면 카드에 대한 물리적 쓰기 횟수가 최소 두 배 이상 발생하게 됩니다. 이 조합(그러나 두 번째 파티션이 데이터 로거에 비해 자주 쓰지 않는다는 점은 인정합니다)은 문제 없이 실행되는 것 같습니다. 지금까지. (시스템을 전문시설에 설치한지 약 30개월)

답변4

정전이 발생할 수 있는 환경에서는 데이터 보안 및 전반적인 데이터 보안과 관련하여 고려해야 할 추가 사항이 있습니다.

MLC 셀은 저장용으로 사용되지 않으며, SLC만이 충분한 데이터 보유 시간을 가지고 있습니다. 그러면 해당 SLC 카드에 스마트 펌웨어가 있을 수 있으며 일부는 어떤 상태에서도 정전으로 인해 손상되지 않습니다. 측정값을 사용하여 정전을 식별하고 마지막 블록이 완전히 기록되었는지 확인합니다.

이 카드는 MLC 장치보다 가격이 더 비싸고 약간 느립니다. swissbit과 같은 제공업체의 카드를 확인하세요.

관련 정보