BTRFS는 정전시 데이터 일관성을 보장합니까?


11

으로 ZFS 독점적 상태 ,ZFS는 무적이라고 주장 ZFS는 정전에 취약 할 수 있음을 인정합니다.

BTRFS에 대한 그러한 진술을 찾을 수 없습니다. 정전 사이에 내구성이 있습니까 (또는 설계 / 계획되어 있습니까)?


다시 읽으세요. "하드웨어 고장 또는 정전으로 인해 풀이 손상된 경우 ZFS 저장소 풀 전체 손상 복구를 참조하십시오." (..) 시도 사용하여 풀을 복구하는 zpool clear -F 명령
마이클 D.

"ZFS는 데이터 일관성을 보장하지 않고 복구 만 시도 합니다"라고 말합니까?
ceremcem

예. 처리 할 여러 캐시, 하드 드라이브 내장 캐시, OS 캐시 / 버퍼가 있습니다. 어느 시점 에서 또는 정전 중에 디스크에 캐시를 기록 하는 a sync또는 a 가있어 해당 데이터가 손실됩니다. 하드 디스크가 정상이고 정전이없는 경우 (또는 UPS 가 정전시 컴퓨터를 올바르게 종료하도록 연결된 경우) ZFS 가 완벽하게 작동 할 수 있습니다 . FAT32에 대해서는 말할 수 없습니다. flush
Michael D.

2
데이터 손실은 전원 손실이 발생할 때 자연스러운 결과이므로 문제가되지 않지만 제 경우에는 데이터 일관성이 문제가됩니다. 파일 시스템은 이러한 극한 상황에서 데이터를 잃을 수 있지만 디스크의 데이터가 일치하지 않아야합니다. 지속적인 스냅 샷 기능이 필요하므로 BTRFS를 계속 사용하겠습니다. NILFS2는 필자의 경우 가장 가까운 옵션입니다.
ceremcem

1
나는 #btrfs IRC에 대한 질문을했는데, should be ok if your hw isn't "buggy""버기 ( burggy) "가 아닌 곳을 의미 한다고 말했다 your hw has correct flush/barrier semantics. IRC에이 질문에 대한 링크를 게시했습니다. 누군가가 자세히 설명하는 데 시간이 걸리기를 바랍니다. 그러나 지금은 이것입니다.
Hi-Angel

답변:


5

나는 #btrfs IRC에 대한 질문을했는데, should be ok if your hw isn't "buggy""버기 ( burggy) "가 아닌 곳을 의미 한다고 말했다 your hw has correct flush/barrier semantics.

TL; DR : 이는 ZFS와 유사한 방식으로 btrfs가 전원 손실로 인한 데이터 손상으로부터 보호됨을 의미합니다.

이유는 다음과 같습니다. ZFS와 btrfs의 일반적인 개념은 비슷합니다. 둘 다 머클 트리를 데이터 구조로 사용 합니다. 쓰기를하려면 디스크의 여러 블록을 업데이트해야합니다. 파일 시스템은 새로운 데이터를 빈 블록에 기록하고 (기존 파일을 수정하더라도 이전 상태를 반영하는 블록을 수정할 필요가 없음) 새로운 업데이트 된 트리를 작성하여이를 처리합니다. 모든 무거운 작업이 완료되고 데이터 + 업데이트 된 트리가 디스크에 기록되면 헤드 포인터가 새 트리로 업데이트되어 변경 사항이 표시됩니다.

파일에 쓸 때 어떻게 동작해야하는지 다음과 같습니다.

  1. 디스크의 사용 가능한 블록에 데이터를 씁니다.
  2. 머클 트리 *를 복사하여 (1)의 변경 사항에 따라 업데이트하십시오.
  3. 하드웨어에 데이터를 디스크로 플러시하도록 요청합니다. 하드웨어는 보류중인 모든 데이터를 씁니다.
  4. 새로운 머클 트리에 대한 헤드 포인터를 업데이트합니다.
  5. 더 이상 필요없는 무료 오래된 블록.

(4) 후에 전원이 끊기면 거래가 완료된 것입니다. 단계 (1) ~ (3) 동안 전원이 꺼지면 파일 시스템은 이전 상태가됩니다 (단계 (1)에서 작성된 데이터는 손실되지만 파일 시스템은 일관됩니다). 파일 시스템 오류를 확인할 필요가 없습니다. 즉, 파일 시스템을 즉시 사용할 수 있으므로 큰 파일 시스템을 확인하는 데 시간이 오래 걸릴 수 있습니다.

다음은 "버기 (Buggy)"하드웨어에서 문제가 발생할 수있는 예입니다.

  1. 디스크의 사용 가능한 블록에 데이터를 씁니다.
  2. 머클 트리 *를 복사하여 (1)의 변경 사항에 따라 업데이트하십시오.
  3. 하드웨어에 데이터를 디스크로 플러시하도록 요청-하드웨어가 완료를 확인하지만 완전히 플러시하지는 않습니다 (예 : 데이터가 디스크의 후기 입 캐시에 남아있을 수 있음).
  4. 새로운 머클 트리에 대한 헤드 포인터를 업데이트합니다. 이 데이터는 보류중인 다른 데이터보다 먼저 디스크에 기록됩니다 (예 : 디스크 헤드가 올바른 위치에 있기 때문에).
  5. 단계 (1) 및 (2)에서 작성된 데이터는 디스크에 기록됩니다.
  6. 더 이상 필요없는 무료 오래된 블록.

(4)와 (5) 사이에서 또는 단계 (5)를 수행하는 동안 전원이 끊기면 파일 시스템이 일치하지 않습니다. 결과적으로 Merkle 트리 및 / 또는 데이터가 부분적으로 만 작성되어 파일 시스템이 일치하지 않을 수 있습니다.

실제로 RAID 컨트롤러를 사용할 때는 특히주의해야합니다 . 일반적으로 디스크에서 후기 입 캐시를 비활성화하고 대신 자체 후기 입 캐시를 사용합니다. 문제가 발생하는 일반적인 두 가지 방법이 있습니다.

* 여기에서 단순화하고 있습니다. 실제로 전체 트리를 복사 할 필요는 없습니다. 변경된 부분 만 추가하면됩니다. 나머지 부분은 기존 트리와 새 트리간에 공유 할 수 있습니다 .


이 멋진 설명에 감사드립니다. 그러나 IRC 대화를 포함한 모든 주장에는 인용이 필요했습니다. 그러면 당신의 대답이 받아 들여질 것입니다.
ceremcem

IRC 로그와 관련하여 여기서 @ Hi-Angel의 의견을 언급했습니다. 어쩌면 그는 참조를 제공 할 수 있습니까? 그래도 다른 부분에 대한 몇 가지 참조를 추가했습니다.
Martin

BTRFS는 Merkle 트리를 사용하지 않고 B- 트리 (따라서 'B-TRee FileSystem')를 사용하며, 장애 예에서는 쓰기 장벽이 하드웨어에 의해 제대로 구현되지 않아야합니다 (요즘 실제로는 이례적인 경우가 아닙니다) . 그렇지 않으면 좋은 대답입니다.
Austin Hemmelgarn

btrfs가 사용하는 트리는 실제로 B- 트리 (이 속성은 트리의 "모양"과 자체 균형을 유지한다는 사실)와 해시 / 머클 트리 (잎은 일부 데이터의 해시를 포함하고 노드에는 자식의 해시, 따라서 각 변경 사항은 루트까지 전달됩니다). 이러한 해시를 확인할 수 있기 때문에 btrfs와 ZFS가 손상된 데이터를 감지하고 "미러링"모드에서 사용되는 경우 다른 디스크에서 읽을 수 있습니다.
Martin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.