견고한 IoT Linux 장치를 구성하기 위한 모범 사례는 무엇입니까? 오버레이 파일 시스템을 사용해야 합니까?

견고한 IoT Linux 장치를 구성하기 위한 모범 사례는 무엇입니까? 오버레이 파일 시스템을 사용해야 합니까?

과거에 우리 회사는 IoT 애플리케이션에 Raspberry Pi를 사용했습니다. 문제는 SD 카드가 마모되어 손상될 수 있다는 것입니다.

이제 Debian을 실행하는 eMMC 스토리지가 포함된 Compulab SBC를 주문했습니다.

그렇다면 내구성이 뛰어난 임베디드 IoT 장치를 구성하기 위한 모범 사례는 무엇입니까?

내가 말할 것:

  • eMMC 스토리지가 있는 SBC를 선택하세요
  • 저널링 파일 시스템이 있는지 확인하십시오( has_journalEXT4에서 활성화됨).
  • 스토리지 마모를 방지하기 위해 RAM에 로그 쓰기(에서 /etc/systemd/journald.conf Storage=volatile)
  • fsck시작 시 실행되는지 확인하세요 (마지막 /etc/fstab필드는 1 또는 2로 설정됨).
  • 스와핑을 비활성화해야 합니다(실행- free>총 스왑이 0이어야 함).

더 이상 제안이 있으십니까?

파일 시스템 덮어쓰기

Raspbian에는 "raspi-config"->"성능 옵션"->"파일 시스템 재정의"에 옵션이 있습니다. Compulab에게 이 옵션도 사용하도록 권장하는지 물었지만 그들은 이미 파일 시스템 로그만큼 강력하다고 생각하며 fsck는 실행됩니다. 시작에. 오버레이 파일 시스템을 사용하여 장치를 여러 번 재부팅하여 장치를 비활성화하고 나중에 업데이트하려고 할 때 다시 활성화하는 추가 복잡성을 감수할 가치가 있는 저장소에 대한 쓰기를 방지하고 있습니까?

답변1

나는 저장 장치 내구성에 대해 어느 정도 익숙하기 때문에 귀하의 첫 번째 질문에 답하려고 노력할 것입니다.

시스템의 스토리지 사용량에 액세스하지 않고 이를 개선하기 위한 조치를 취하지 않으면 SD와 eMMC 모두 NAND를 사용하므로 SD에서 eMMC로 전환해도 상황이 개선되지 않을 수 있습니다.

스토리지에 기록되는 데이터의 양을 추정했나요? 다음을 사용하여 사용 사례를 평가하세요. [자세한 내용은 [1] 참조]

total bytes written throughout device life = (device capacity in bytes) * (max program/erase cycles) / (write amplification factor)

예를 들어

  • 하루에 0.5GiB를 씁니다.
  • 귀하의 장비는 5년 동안 작동할 것으로 예상됩니다.
  • 데이터를 쓰고 있는 파티션은 총 4GiB입니다. (저장 용량은 이보다 크지만 다른 파티션은 읽기 전용입니다.)
  • MLC(다중 레벨 셀) NAND의 경우 최대 프로그램/삭제 주기는 3000입니다.

이는 쓰기 증폭 요소를 제공합니다.

4 * 3000 / (0.5 * 365 * 5) = ~13

쓰기 증폭이란 무엇입니까?

SD 또는 eMMC의 NAND는 NAND 페이지에 기록됩니다. 호스트에서 1KiB(2개의 512바이트 섹터)를 쓰거나 수정하지만 NAND 페이지는 16KiB라고 가정합니다. 따라서 eMMC 컨트롤러는 전체 NAND 페이지를 씁니다. 지우기를 생각하면 상황이 더 복잡해집니다. NAND는 NAND 블록에서 지워지고, NAND 블록은 많은 NAND 페이지로 구성되기 때문입니다.

그렇다면 장비의 수명을 연장하려면 어떻게 해야 할까요?

위의 방정식으로부터 다음을 얻을 수 있습니다.

  • 장비 용량 늘리기(단, 비용이 증가함)
  • 프로그램/삭제 주기 개선: SLC를 선택하거나 데이터 쓰기 파티션을 MLC에서 pSLC로 변환합니다(그러나 이렇게 하면 용량이 줄어듭니다).
  • NAND 페이지 정렬을 수행하고, 호스트에서 NAND 페이지 크기(또는 다중) 쓰기를 수행하고(eMMC EXT_CSD[265] 최적 쓰기 크기 참조), eMMC 캐싱 활성화 등을 수행하도록 애플리케이션을 개선하여 쓰기 증폭을 줄입니다.

너는 어떤 다른 일을 할 수 있니

mmc-utils(https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git) 또는 sysfs를 실행하고 예기치 않은 오류가 발생하기 전에 필요한 조치를 취하세요.

  1. eMMC 확장 CSD 레지스터는 다음을 제공합니다.
  • SLC 및 MLC 모듈의 서비스 수명을 10% 단위로 예측합니다.

(0x01 = 0-10% 장치 수명이 종료됨, 0x02 = 10-20%, .., 0x0B = 수명이 종료됨)

타입 B(MLC): EXT_CSD[268], 타입 A(SLC): EXT_CSD[269]

  • 불량 블록 교체에 사용된 예비 블록 상태

(0x01: 정상, 0x02: 경고: 블록 사용률 80%, 0x03: 긴급: 블록 사용률 90%)

EOL 이전 정보: EXT_CSD[267]

  • 공급업체는 EXT_CSD[301:270]에 독점 상태 보고서를 제공할 수 있습니다(그러나 지금까지 여기서는 모두 0만 보았습니다).

예를 들어

mmc-utils:
# mmc extcsd read /dev/mmcblk0
:
eMMC Life Time Estimation A [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A]: 0x01
eMMC Life Time Estimation B [EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B]: 0x00
eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01
:

sysfs:
# cat /sys/block/mmcblk0/device/life_time    
0x00 0x01
# cat /sys/block/mmcblk0/device/pre_eol_info 
0x01
  1. 공급업체는 mmc 일반 명령 CMD56(mmc-utils 사용,mmc gen_cmd 읽기 <장치> [arg])

좋은 설명은 아래를 참조하세요.

[1]https://www.kingston.com/en/embedded/emmc-embedded-flash "eMMC 수명주기 추정, 검증 및 모니터링"

관련 정보