예기치 않은 전원 손실로 Linux 설치가 손상 될 수 있습니까?


22

Raspberry Pi, Beagle Board / Bone 또는 olimex와 같은 Linux 임베디드 보드 (Debian 실행)에서 응용 프로그램을 개발 중입니다. 보드는 전기가 예기치 않게 차단되는 환경 (PSU 등을 배치하기가 너무 복잡함)에서 작동하며 매일 몇 번 발생합니다. 예기치 않은 정전으로 인해 Linux 운영 체제에서 충돌 / 문제가 발생하는지 궁금합니다. 내가 걱정해야 할 것이 있다면, 예기치 않은 정전으로 인한 OS 손상을 방지하기 위해 무엇을 제안 하시겠습니까?

추신. 응용 프로그램은 일부 데이터를 저장 매체 (SD 카드)에 기록해야합니다. 읽기 전용으로 마운트하는 것이 적합하지 않다고 생각합니다.


1
많이 수정하는 파일 시스템에서 ext2 (ext3 이상 사용)를 피하십시오. 대부분 괜찮습니다.
LawrenceC

SD 카드를 지정하는 데 매우 주의 하지 않으면 예기치 않게 전원을 차단해도 카드 가 아무 것도 보증하지 않습니다. 이 카드는웨어 레벨링 작업 중에있을 수 있으며, 예상치 못한 예기치 않은 손상이 발생하여 다른 파티션에있을 수도 있습니다!
derobert

정확히 어떻게 해야할지 모르겠지만 주요 응용 프로그램을 트랜잭션 기반으로 만드는 것을 고려할 수 있습니다. 이렇게하면 현재 파일과 백업을 가질 수 있습니다. 트랜잭션을 현재 파일에 적용하고 실패하면 백업에서 현재 파일을 복원하고 트랜잭션을 다시 적용 할 수 있습니다. 심볼릭 링크를 사용하거나 파일 이름을 바꾸어 현재와 백업을 전환하면 복사 할 때보 다 오류 발생 가능성이 훨씬 낮아질 수 있습니다. 업데이트가 성공하면 현재 파일이 백업이되고 백업이 현재가됩니다.
Joe

계속되는. 이것은 거의 작동합니다. 새로운 현재 파일에는 트랜잭션을 두 번 처리 해야하는 트랜잭션이 적용되어야하므로 더 좋은 방법이 있다고 확신합니다. 어쨌든 전체 파일이 큰 경우 전체 파일을 복사하는 것보다 훨씬 빠르고 안전 할 수 있습니다.
Joe

답변:


14

예기치 않은 전원 차단으로 인해 파일 시스템 데이터가 손상 될 수 있습니다. 예를 들어 프로세스가 파일 쓰기를 시작했지만 아직 파일 쓰기가 완료되지 않은 경우 파일의 절반 만 기록 될 수 있습니다. 이제 커널 업그레이드의 절반이되었을 때 정전이 발생한다고 상상해보십시오.

l0b0이 작성한 것처럼 저널링 파일 시스템을 사용하면 실제로 수행 한 작업을 추적 할 수 있으므로 도움이됩니다. l0b0가 연결하는 위키 피 디아 정보 이외에, 당신은에 관심이있을 수 있습니다 /unix/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure 아니라 .

프로그래머는 분명히 파일 쓰기를 처리하는 방법을 신중하게 고려해야하므로 파일이 원자 프로세스가됩니다 (즉, 완전히 수행되거나 전혀 수행되지 않지만 결코 반으로 끝나지 않음). 상당히 복잡한 문제입니다.


10
파일 손상을 방지하기위한 코드의 일반적인 프로세스는 file.name을 직접 수정하는 대신 완전히 새로운 파일 file.name.newversion을 작성한 다음 delete / rename 명령을 사용하여 이전 버전을 새로운. 각 단계에서 중단을 복구하려면 정리 코드를 추가해야합니다. 그러나이 방법은 항상 파일의 좋은 복사본을 디스크에 남겨 둡니다. 이는 거대한 단일 파일을 제대로 업데이트하지 않거나 단일 파일을 자주 변경하기 때문에 설계에 영향을 줄 수 있습니다.
Dan Neely 2016 년

11

OS 손상 가능성을 최소화하려면 SD 카드에 별도의 "시스템"및 "데이터"파티션을 두는 것이 가장 좋습니다. 이렇게하면 "시스템"파티션을 읽기 전용으로 마운트하고 "데이터"파티션에서 탄력성이 높은 FS를 사용할 수 있습니다.

또한 대부분의 보드는 전력 요구 사항이 매우 낮아 배터리 백업이 가능합니다. Raspberry Pi 용 "LiPo rider"보드는 기본 UPS로 사용하여 전력 손실시 깨끗하게 종료 할 수 있습니다.


5

이것은에 달려 있습니다

  1. 당신이 사용하고 있는지 저널링 파일 시스템
  2. 애플리케이션이 중단 된 처리를 얼마나 잘 처리 할 수 ​​있는지

예를 들어 파일을 처리하고 결과가 계산 될 때 (입력 라인 당 하나의 출력 라인) 다른 파일에 결과를 기록하는 응용 프로그램을 고려하십시오. 처리 중에 전원이 차단되고 재시작 후 동일한 응용 프로그램이 실행되면 입력 파일의 시작 부분부터 처리를 다시 시작할 수 없으며 출력 파일에 중복 정보가 포함됩니다.

가상의 복잡한 시스템에 대해 명확한 것을 말하기는 매우 어려울 수 있지만 가장 안정적인 Linux 소프트웨어는 충돌을 아주 잘 처리 할 수있는 것 같습니다.


1

특정 파일 시스템을 언급 한 사람이 없기 때문에 최신 파일 시스템 (ext3, ext4, ntfs)은 저널링 으로 인해 이전 파일 시스템 (ext2, ext, fat32)보다 훨씬 더 충돌을 처리 할 수 ​​있습니다 .

하드 드라이브가 충돌 하지 않고 거짓말을 하지 않는다고 가정하면 완전한 정전이 파일 시스템을 손상시키지 않아야합니다. 기록중인 개별 파일이 여전히 손상 될 수 있으므로 정전이 발생했을 때 OS를 업데이트하는 도중에 있으면 OS를 중단시킬 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.