2014-06-23 2 views
7

갑자기 전원이 꺼져 내 시스템 (라즈베리 파이)이 종료되었을 때 추적/등록을 원합니다.SD 카드 쓰기 제한 - 데이터 로깅

SD 카드에 10 분 간격으로 하트 비트를 기록하여이를 수행하려고합니다. 따라서 10 분마다 SD에 가서 현재 시간/날짜를 파일에 기록합니다. 장기적으로 SD가 손상 될까요?

쓰기 횟수가 100KB 밖에되지 않는 경우 2 년 내에 불량 블록이 발생합니다. 그러나 그것을 막기위한 회로가 있다는 것을 읽었습니다 - 불량 블록을 예방할 수 있습니까? 여러 블록으로 로그를 배포하는 것이 더 안전합니까?

감사합니다.

+0

SD 카드의 제조업체와 모델에 따라 다르지만 대부분의 최신 카드를 사용하면 문제가 없을 것입니다. –

답변

16

이 질문에 대한 일반적인 대답은 "의존적"입니다. (. 실제 대답은 당신이 이미 가지고있는 것입니다, 파일 시스템 매개 변수가 잘못하지 않은 경우, 당신은이 경우에 큰 마진을) 그것은 다음에 따라 달라집니다

  • SD 카드 타입 (SLC/MLC)
  • SD 카드 컨트롤러 (웨어 레벨링)
  • SD 카드 크기
  • 행운

우리는 플래시 칩을 살펴 경우, 그것은으로 구성되어 파일 시스템 섹터. 섹터는 완전히 지울 수있는 영역입니다 (실제로는 1로만 리셋됩니다). 일반적으로 SD 카드의 경우 128 KiB입니다. 0은 비트 단위로 기록 될 수 있지만, 1을 쓰는 유일한 방법은 섹터를 지우는 것입니다.

섹터 삭제 횟수가 제한됩니다. 지우기 작업은 동일한 섹터에서 수행 될 때마다 더 오래 걸리고 각 셀에 기록 된 값에는 더 많은 불확실성이 있습니다. 카드에 주어진 쓰기 제한은 실제로 단일 섹터에 대한 삭제 횟수입니다.

이 한계를 지나치게 초과하지 않으려면 SD 카드에 을 착용하고을 처리하는 컨트롤러가 있어야합니다. 기본 아이디어는 사용자가 투명하게 카드가 사용 된 섹터를 변경한다는 것입니다. 동일한 메모리 위치를 요청하면 다른 시간에 다른 섹터에 매핑 될 수 있습니다. 기본 아이디어는 카드에 빈 섹터 목록이 있으며, 필요할 때마다 가장 적게 사용 된 카드를 사용한다는 것입니다.

다른 알고리즘도 있습니다. 컨트롤러는 섹터 소거 시간 또는 섹터에서 발생하는 오류를 추적 할 수 있습니다. 불행하게도, 카드 제조업체는 일반적으로 정확한 알고리즘에 대해 너무 많이 얘기하지 않지만, 개요, 참조 : 플래시 칩의 다른 유형을 사용할 수 있습니다

http://en.wikipedia.org/wiki/Wear_leveling

. SLC 칩은 메모리 셀당 1 비트 (0 또는 1) 만 저장하며, MLC 셀은 2 또는 3 비트를 저장합니다. 당연히 MLC 칩은 노화에 더 민감합니다. 3 비트 (8 레벨) 셀은 1000 개 이상의 쓰기를 견딜 수 없습니다. 따라서 신뢰성이 필요한 경우 SLC 카드를 더 높은 가격에도 불구하고 가져 가십시오.

마모 균등화는 카드 전체에 걸쳐 마모를 분산하므로 더 큰 카드는 작은 카드보다 더 많은 섹터 지우기를 견딜 수 있습니다. 원칙적으로 10 000 개의 쓰기 사이클을 가진 4 GiB 카드는 수명 기간 동안 400 TB의 데이터를 전송할 수 있습니다.

그러나 더 복잡한 작업을 수행하기 위해 파일 시스템은 이와 관련이 있습니다.작은 데이터가 디스크에 기록 될 때 많은 다른 일이 발생합니다. 적어도 데이터가 파일에 추가되고 연관된 디렉토리 정보 (파일 크기)가 변경됩니다. 일반적인 파일 시스템에서 이것은 적어도 2 개의 4KB 블록 쓰기를 의미하며, 그 중 하나는 단지 추가 일 수 있습니다 (지우기 필요 없음). 그러나 저널에 쓰기, 블록이 꽉 차는 등 많은 다른 일이 발생할 수 있습니다.

플래시 장치와 함께 사용하도록 조정 된 파일 시스템이 있습니다 (JFFS2가 가장 일반적 임). 그것들은 모두 제가 아는 한 생생한 플래시에 최적화되어 있으며 마모 평준화를 처리하고 비트 또는 옥텟 수준 원자 작업을 사용합니다. SD 카드에 최적화 된 파일 시스템에 대해서는 잘 모릅니다. (아마도 학계에 관심이있는 사람이 카드의 웨어링 시스템을 고려하여 카드를 만들 수 있습니다.) 다행히도 일반적인 파일 시스템을 더 빠르게 호환되도록 조정할 수 있습니다 마모 및 찢어짐)을 파일 시스템 매개 변수를 조정하여 SD 카드에 저장하십시오.


이제 물리적 디스크 상단에이 두 개의 레이어가 있으므로 얼마나 많은 지우기가 수행되었는지 추적하는 것은 거의 불가능합니다. 레이어 중 하나는 매우 복잡하고 (파일 시스템), 다른 레이어는 완전히 투명하지 않습니다.

그래서 대략적인 견적을 내릴 수 있습니다. 작은 글씨로 2 개의 4 KiB 블럭을 평균적으로 무효화합니다. 이렇게 10 분마다 기록하면 160 분마다 128 KiB 지우기 섹터가 소모됩니다. 카드가 8 GiB 카드 인 경우 약 64k 섹터가 있으므로 20 년마다 한 번씩 카드가 사라집니다. 카드가 1000 회 쓰기 사이클을 지속한다면, 그것은 20,000 년 동안 좋을 것입니다 ...

위의 계산은 완벽한 마모 균등화와 매우 효율적인 파일 시스템을 가정합니다. 그러나 안전 계수가 1 000이면 충분합니다.

물론 이것은 매우 쉽게 손상 될 수 있습니다. 가장 쉬운 방법 중 하나는 noatime 속성을 사용하여 디스크를 마운트하는 것을 잊는 것입니다. 그런 다음 파일 시스템이 파일 액세스 시간을 업데이트하므로 파일에 액세스 할 때마다 (심지어 읽기까지) 쓰기가 발생할 수 있습니다. 또는 OS가 가상 메모리를 카드로 스와핑하고 있습니다.

마지막으로 중요한 것은 행운입니다. 현대 SD 카드는 다른 원인으로 인해 죽는 불행한 경향이 있습니다. 꽤 잘 알려진 제조사의 레몬 수는 그리 작지 않습니다. 카드를 죽이면 반드시 마모 한도 때문이 아닙니다. 카드가 마모 된 경우에도 읽을 수 있습니다. 완전히 죽으면 다른 곳에서 죽었습니다 (정전기, 작은 골절 등).

+0

유익한 답변을 작성해 주셔서 감사합니다. – jsejcksn