라즈베리처럼 정전 후 리눅스가 재부팅되지 않는 이유

라즈베리처럼 정전 후 리눅스가 재부팅되지 않는 이유

저는 Raspberry Pi 3b+를 작업 중이며 Raspberry를 산업화하고 싶습니다(저를 판단하지 마십시오. 이 사람은 제 고객입니다).

저는 두 개의 파티션(/boot 및 /)이 있는 SD 카드를 사용합니다.

가장 큰 걱정은 정전으로 인해 SD 카드가 손상될 것이라는 점입니다.

이 문제를 해결하기 위해 내 SD 카드는 읽기 전용입니다.

내 질문

정전으로부터 내 SD 카드를 보호하는 방법을 알고 있습니다(...희망합니다).

그런데 정전 후 왜 SD 카드가 손상되는지 이해할 수 없습니다.

왜 그런지 설명해 주실 수 있나요?

답변1

참고할 사항:

SD 카드를 쓰기 방지하면 전체 시스템이 부팅되지 않을 수 있습니다. 일부 파일은 임시/동적이므로 운영 체제(또는 운영 체제 내의 프로그램)가 실행되는 동안 작성되어야 합니다. 물론 이러한 임시 파일을 저장하기 위해 RAM에 가짜 디스크 드라이브를 만드는 등의 해결 방법이 있습니다(모두 임시 파일이므로 정전으로 인해 RAM이 사라져도 문제가 없습니다). 최신 Linux 커널은 이미 이 작업이나 이와 유사한 작업을 수행하고 있습니다. /run 및 /sys 디렉터리는 RAM에 생성되며 실제로 물리적 드라이브에 기록되지 않습니다. /dev의 일부 파일/디렉토리와 같은 다른 것들은 필요에 따라 생성됩니다.

어떻게, 왜 손상이 발생했는지... SD카드의 읽기/쓰기 속도는 CPU나 RAM의 속도에 비해 매우 느린 점 양해 부탁드립니다. CPU가 초당 수십억 개의 명령을 실행하고 RAM이 비슷한 방식으로 메모리 위치에 액세스하면 모든 것이 정상입니다. 하지만 SD 카드를 읽고 써야 한다면 어떻게 될까요? 초당 수천 개의 메모리 위치만 읽고 쓸 수 있습니다.

OS가 읽기/쓰기가 완료되기를 기다리는 모든 것을 중지하는 것을 원하지 않습니다. 로드하는 데 1분이 걸리는 웹 페이지를 로드한다고 상상해 보십시오. 하지만 로딩하는 동안에는 완료될 때까지 기다려야 합니다! 커피를 마실 수도 없고, 다른 웹페이지로 전환할 수도 없고, 참을성이 없어서 로딩을 멈추라고 말할 수도 없습니다.

따라서 OS가 수행하는 작업은 일부 데이터를 RAM에 캐시하여 SD에서 데이터를 다시 읽기 위해 계속 기다릴 필요가 없도록 하는 것입니다. SD 카드에 쓸 때도 이 작업을 수행합니다. 데이터를 실제로 SD 카드에 쓰는 대신 RAM에 저장하고 나중에 CPU/OS 사용량이 적을 때 실제로 SD 카드에 쓰도록 예약합니다. 돌아가서 원하는 대로 응답하는 등 다른 일을 하세요.

이 데이터가 RAM에만 존재하지만 전원이 꺼지면 손상이 발생합니다. RAM을 최신 상태로 유지할 수 없으므로 캐시된 데이터를 SD 카드에 쓸 수 없습니다. 그것은 사라진다. 따라서 SD 카드의 데이터는 이제 최신이 아닙니다. RAM에 데이터가 없습니다. 때로는 운이 좋아서 문제가 되지 않습니다. 손실된 데이터는 중요하지 않으며 다시 생성될 수 있습니다. 때로는 손실된 데이터가 중요하여 손상을 일으키는 경우도 있습니다.

작은 변화라도 큰 문제를 일으킬 수 있습니다. 파일이 1바이트만 커지면 운영 체제는 디스크 데이터를 업데이트해야 합니다. 즉, 파일에 추가된 바이트와 파일 크기를 운영 체제에 알려주는 디스크의 데이터입니다. 파일이 이제 1바이트 더 커졌다는 것을 알기 위해 업데이트해야 합니다. 하지만 이 정보는 RAM에도 캐시되어 나중에 SD 카드에 기록될 예정입니다.

새 크기가 기록되기 전에 정전이 발생하면 SD 카드는 파일이 여전히 이전 크기라고 "생각"합니다. 새로운 작별 인사는 완전히 사라졌습니다 - 부패.

대부분의 운영 체제는 위험을 최소화하기 위한 조치를 취하지만 위험을 완전히 제거할 수는 없습니다. SD 카드의 쓰기 방지 기능도 완벽하지는 않습니다. SD 카드는 시간이 지나면서 저장된 데이터가 더 이상 유지되지 않을 때까지 성능이 저하됩니다.

EMP(전자기 펄스)도 유사합니다. 이는 전기 장비의 단락 및 소손을 유발할 수 있습니다. 따라서 SD 카드가 충분히 강한 전자기 펄스에 노출되어도 삭제될 수 있습니다. 등.

답변2

이는 SD 카드에만 국한되지 않습니다.

모든 범용 운영 체제와 마찬가지로 Linux는 파일 시스템 버퍼 캐시를 사용합니다. 프로세스가 파일에 쓰면 수정된 파일 데이터와 메타데이터가 버퍼 캐시에 저장됩니다. 메타데이터를 저장 미디어에 쓰는 동안 정전이 발생하면 메타데이터가 부분적으로만 기록될 수 있습니다. 이로 인해 SD 카드의 파일 시스템 구조가 일관되지 않게 됩니다. 이를 종종 "손상된" 파일 시스템이라고 합니다.

관련 정보