2009-05-11 4 views
0

나와 내 동료가 임베디드 장비에서 깨진 파일을 복구하는 메커니즘을 구현하려고합니다.깨진 파일을 복구하는 전략은 무엇입니까?

이것은 특정 상황에서 발생할 수 있습니다. 사용자는 파일을 쓰는 동안 배터리를 제거합니다.

Orz, 그러나 지금 우리는 단지 하나 개의 아이디어가 :

  • 만들기 중복 백업 파일을, 그리고 위험한 파일 I/O를가 제대로 완료되지 않은 경우 다시 복사합니다.

이것은 바보 같은 일로, 백업 파일도 손상된 것처럼, 우리는 방금 죽었습니다.

이것에 대한 제안이나 좋은 기사가 있으십니까?

미리 감사드립니다.

답변

0

OS 등에 따라 다르지만 대부분의 경우 임시 파일 이름으로 복사하고 마지막 마지막 단계로 파일 이름을 바꿉니다.

이것은 Opertunity of Potential S **** p의 (WOOPS) Window가 이름 변경이 일어나는 간격으로 제한된다는 것을 의미합니다.

OS가 멋진 디렉토리 구조를 지원하고 지능적으로 파일을 배치하면 새 파일을 임시 디렉토리에 복사하고 디렉토리 이름을 변경하여 WOOPS가 "저장 대상 이름 바꾸기" 및 "온도를 대상으로 변경".

OS가 소프트 링크 디렉토리를 지원하면 "ln -s target temp"를 사용할 수 있습니다. 소프트 링크를 대체하는 대부분의 OS는 작동하지 않거나 어수선한 중간 상태없이 작동하지 않는 "원자 적"작업입니다.

이러한 모든 옵션은 파일 시스템에 완전한 이전 및 새 복사본을 보관하기에 충분한 저장소가 있는지에 달려 있습니다.

+0

죄송합니다, 두 번째 옵션을 이해하지 못합니다 : 디렉터리 이름 바꾸기. 첫 번째 옵션과 비교할 때 찬성은 무엇입니까? 간격이 첫 번째 것보다 긴 것 같습니다. – tingyu

+0

두 번째 옵션은 하나 또는 두 개의 디렉토리에서 변경 될 가능성이있는 파일을 그룹화하는 전략입니다. 파일보다 디렉토리가 적기 때문에이 작업이 더 빠를 것입니다. –

1

데이터베이스 로깅 및 데이터베이스 저널 파일을 읽으십시오.

데이터베이스 (예 : Oracle)는 매우 강력한 파일 쓰기 기능을 제공합니다. 오라클을 실제로 사용하지 마십시오. 그들의 디자인 패턴을 사용하십시오. 디자인 패턴은 이와 유사합니다. 실제 제품을 사용하지 않고 이러한 아이디어를 빌릴 수 있습니다.

  1. 거래 (즉, 삽입)는 업데이트 할 블록을 가져옵니다. 보통 이것은 메모리 캐시에 있고 그렇지 않은 경우 디스크에서 메모리 캐시로 읽습니다.

  2. "이미지 이전"(또는 롤백 세그먼트) 복사가 작성하려고하는 블록으로 이루어집니다.

  3. 캐시 복사본을 변경하고 업무 일지 항목을 쓰고 DB 쓰기를 큐에 넣습니다.

  4. 변경 사항을 커밋하면 다른 트랜잭션에서 캐시 변경 사항을 볼 수 있습니다.

  5. 어느 시점에서 DB 작성자는 DB 파일 변경을 마무리합니다.

저널은 간단한 원형 큐 파일입니다. 레코드는 구조가 거의없는 변경 기록 일뿐입니다. 여러 장치에서 복제 할 수 있습니다.

DB 파일은 더 복잡한 구조입니다. 그들은 "트랜잭션 번호"를 가지고 있습니다 - 전체 트랜잭션의 간단한 연속 카운트. 이것은 제어 파일에 기록 될뿐만 아니라 블록으로 인코딩됩니다 (두 가지 다른 방법).

양호한 DBA는 제어 파일이 장치간에 복제되도록 보장합니다.

오라클은 시작할 때 제어 파일을 점검하여 어느 것이 올바른지 알아냅니다. 기타가 손상되었을 수 있습니다. 오라클은 DB 파일을 검사하여 제어 파일과 일치하는지 확인합니다. 트랜잭션을 적용하여 올바른 트랜잭션 번호까지 파일을 가져와야하는지 확인하기 위해 저널을 검사합니다.

물론 저널 복사본을 모두 쓰는 동안 충돌이 발생하면 해당 트랜잭션이 손실됩니다. 그다지 많은 작업을 수행 할 수 없습니다. 그러나 업무 일지 항목이 기록 된 후 충돌이 발생하면 문제없이 정상적으로 복구됩니다.

미디어를 잃어 백업을 복구하면 저널 파일을 복구 된 백업 파일에 적용하고 최신 상태로 유지할 수 있습니다. 그렇지 않으면 오래된 저널 파일을 최신 상태로 유지하기 위해 재생해야합니다.

+0

임베디드 장치가 오라클을 실행한다는 사실은 매우 드뭅니다 .-). 그러나 sqlite는 무료로보기에 가치가있을 것이며, 작은 설치 공간을 가지며 일반적으로 훌륭한 소프트웨어입니다. –

+0

요점은 오라클을 사용하지 않는 것입니다. 요점은 신뢰성을 위해 디자인 패턴을 빌려 오는 것입니다. –

+0

방법 sqlite 이렇게 - http://sqlite.org/atomiccommit.html – tingyu

관련 문제