btrfs 스크럽은 어떻게 작동하며 어떻게합니까?


19

btrfs scrub은 정확히 무엇을합니까? 완전히 명확하지 않은 매뉴얼 페이지에 따르면 오류 검사를 수행합니다. 어떤 종류의 오류 검사? 얼마나 신뢰할 수 있습니까? 일부 오류를 복구 할 수 있습니까? 어떻게 작동합니까? 모든 btrfs 디스크에서 작동합니까?


3
컨텍스트 : BTRFS는 체크섬을 저장하므로 파일 (또는 메타 데이터)이 정상인지 또는 손상되었는지를 항상 알 수 있습니다. ext4와 같은 다른 모든 파일 시스템에는 체크섬이 없으므로 나쁜 드라이브로 인해 손상된 파일 (죽어 가려고하고 이미 데이터 손상을 시작한 파일)을 읽지 못하게합니다. 이는 BTRFS의 중요한 데이터 보호 기능이며 스크러빙이 가능합니다.
— basic6

답변:


23

나는 그것이 다른 일을하는지 모르겠지만 최소한 btrfs scrub전체 디스크 데이터 스크러빙을 한다는 것을 알고 있습니다. 기본적으로 디스크의 모든 데이터 *를 읽고 체크섬을 다시 계산하고 다시 계산 된 체크섬을 저장된 체크섬과 비교합니다. 저장 및 재 계산 된 체크섬이 일치하지 않으면 시스템이 손상되었음을 알 수 있습니다.

손상이 감지되면 디스크 설정에 따라 동작이 달라집니다. 예를 들어 RAID 1 (미러링)이있는 경우 btrfs scrub다른 디스크에서 손상되지 않은 버전을 복사하여 손상된 데이터를 수정할 수 있습니다. 일부 데이터의 모든 사본이 손상된 경우 (예 : 다중 디스크 손상 또는 처음에 중복 사본이없는 경우) btrfs scrub경고 외에 할 수있는 일은 없습니다 .

이것이 중요한 이유는 읽기 및 쓰기 비트에서 하드 드라이브의 신뢰도가 99.999999999999 %에 불과하기 때문입니다. 따라서 몇 테라 바이트의 데이터 I / O마다 오류가있을 수 있습니다. 일반적인 디스크 액세스 중에 오류가 발견되고 수정 될 수 있지만 (중복 사본이 여전히 유효한 것으로 가정하면) 일반 전체 디스크 스크러빙은 동일한 데이터의 모든 사본이 손상 될 정도로 충분히 누적되기 전에 오류를 찾아서 수정할 수 있습니다.

* 메타 데이터도 포함시키기 위해 "file"대신 "data"를 사용하고 있습니다. Btrfs는 파일과 해당 메타 데이터 (체크섬 포함)를 데이터 블록에 저장합니다 btrfs scrub.

또한보십시오:

  • Btrfs-> Wikipedia의 체크섬 트리 및 스크러빙 : btrfs의 데이터 스크러빙에 대한 기술 정보.
  • 생일 문제-> Wikipedia의 확률 테이블 : "해시 공간"을 "데이터 블록 수"로 처리하고 "해시 된 요소 수"를 "손상된 데이터 블록 수"로 처리하면 두 사본이 모두있는 데이터 블록이있을 가능성이 있습니다. RAID 1 설정에서 손상되었습니다.

나는 세지 않았지만, 당신의 신뢰성 수치가 몇 배 정도 떨어졌을 것이라고 기꺼이 생각합니다. 소비자 HDD는 일반적으로 10 ^ -14 비트의 UBE 속도로 지정됩니다. 다시 말해, 10 ^ 14 비트 읽기 당 하나의 복구 불가능한 읽기 오류입니다. 문제는 이것이 전체 섹터에 대한 것입니다. 당신은 전체 부문을 얻거나 전혀 아무것도 얻지 못합니다 (또는 아이디어입니다. 침묵 오류는 완전히 다른 차 한잔입니다). 따라서 섹터 크기에 따라 오류가 증폭되며 고급 형식 드라이브의 경우 32,768 비트입니다. 따라서 실제 오류율은 10 ^ -10 ~ 10 ^ -11 판독 비트 오류와 비슷합니다.
— CVn

@ MichaelKjörling 나는 여기에서 섹터가 중요하지 않다고 생각합니다 ... 컴퓨터의 내부 1TB 하드 드라이브 2 개에 대한 마지막 29btrfs 스크럽 기록이 있습니다. 데이터 양은 270 ~ 300GiB (모든 스크럽 조합에 대해 총 1.35 * 10 ^ 14 ~ 1.49 * 10 ^ 14 비트 읽기)로 변경되었습니다. 이 제거 중에 3 개의 오류가 발견되었습니다. 비 스크럽 I / O가 비트 부패를 유발하지 않았거나 고정하지 않았다고 가정하면 예상되는 오류율 "99.999999999999 % 신뢰성"드라이브의 2 ~ 2 / 4 배에 불과합니다. 4096 비트 섹터 만 사용하더라도 지금까지는 드라이브에 수천 개의 오류가있을 것으로 예상합니다.
— Mark Haferkamp

@ MichaelKjörling 제조업체의 사양 시트 (Seagate 및 WD)를 이해하는 한 비트 오류이며 전체 섹터가 아닙니다. 그리고 대답의 9 개의 숫자는 심지어 낙관적입니다 100-1/10^14.16 9 개의 9가 있고 게시물의 14는 10입니다 (10 ^ 12에 해당).
— Luc

@Luc 섹터 죽음이 덜 일반적이라면 좋습니다. 섹터가 죽으면 드라이브가 실제로 고장 나서 교체해야 할 수도 있습니다. 비트 오류는 자동 데이터 손상으로 이어져 백업에서 복원 할 수있을 정도로 노이즈가 심할 수 있습니다. 수학 참고 : 실제 계산은 1-10^n입니다. 그러면 사람이 선행 소수점을 좋아하지 않기 때문에 백분율로 변환됩니다. 또한 이전 의견에서 드라이브가 RAID 1 (따라서 동일한 270-300 GiB 데이터가 각 드라이브에 있음)을 언급하지 않아 다른 명백한 계산 오류가 수정되었습니다.
— Mark Haferkamp

5

Mark Haferkamp의 탁월한 답변을 확장하면 모든 파일 대신 btrfs scrub모든 데이터 를 읽는 것이 중요한 속성이며 실제로는 매우 유용합니다. btrfs에는 RAID 지원 기능이 내장되어 있습니다. RAID1을 사용하도록 구성한 두 개의 드라이브에 걸쳐있는 btrfs 파일 시스템이 있다고 가정하십시오. 이 경우 파일에 쓰면 해당 쓰기가 두 디스크에 모두 복제됩니다. (더 복잡한 예제에서는 더 복잡해 지지만이 간단한 경우에는 항상 이런 일이 발생합니다.) 그러나 해당 파일에서 읽을 때 읽기는 하나의 디스크에만 적용됩니다 (파일을 두 번 읽은 것은 낭비이므로) 어떤 이유로 첫 번째 사본을 사용할 수없는 경우).

이제 두 번째 btrfs 드라이브가 저하되어 파일 시스템의 데이터가 손상되기 시작한다고 가정하십시오. 이 디스크에서 블록을 읽을 때 btrfs는 체크섬이 일치하지 않음을 확인하고 알려진 정상 사본 (첫 번째 드라이브의 사본)에서 대역 내 블록을 복원합니다. read()아무 일도 일어나지 않은 것처럼 데이터를 응용 프로그램 호출 (또는 무엇이든)에 반환합니다.

그러나 btrfs가 두 번째 디스크에서 읽기를 결정하지 않으면 어떻게됩니까? 사본이 두 개이므로 첫 번째 또는 두 번째 디스크 에서 읽을 수 있습니다 . 첫 번째 디스크에서 읽은 경우 아무런 문제가 없습니다. 첫 번째 디스크의 성능이 저하 된 경우에만 문제가 있음을 알 수 있습니다. 이제 데이터를 복구하기에는 너무 늦어서 두 번째 디스크의 복사본이 손상되었으며 첫 번째 복사본 (두 번째 디스크를 복원하는 데 사용 된 것)도 손상되었습니다!

여기가 온 곳 btrfs scrub입니다. 모든 파일이 아니라 모든 데이터를 읽습니다 . 여기에는 메타 데이터뿐만 아니라 일반적으로 읽기 경로에없는 파일의 보조 사본도 포함됩니다. 이 2 차 사본을 읽으면 btrfs의 대역 내 오류 정정이 중복 사본에서 데이터를 시작하고 복원 할 수있는 기회를 만듭니다.


2
RAID1에서 1 개의 디스크에서만 읽기를 수행 하시겠습니까? 적어도 mdadm RAID의 경우에는 그렇지 않습니다. 읽기는 두 디스크 모두에서 병렬로 이루어져야하지만 다른 데이터로 이루어져야합니다. 즉, 한 디스크에서 읽는 것보다 두 배 빠릅니다. 읽기 성능 향상은 RAID 1의 주요 기능 중 하나입니다.
— Petr

@Petr 네, 맞습니다. 개별 블록은 하나의 디스크에서만 읽습니다.
— strugee

@Petr : 정교하게 설명하자면, 일반적으로 MDADM이나 BTRFS는 두 디스크에서 동일한 데이터의 두 사본을 모두 읽지 않습니다. 그들은 하나의 사본 만 읽습니다. -MDADM은 읽기 속도를 두 배로 늘리기 위해 사본에로드 밸런싱 및 판독을 분산시킬 수 있습니다. (모든 사본 A는 디스크 1로 가고 모든 사본 B는 디스크 2로갑니다. mdadm은 정확히 2 개의 디스크를 사용합니다). -BTRFS에는 더 많은 어려움이 있습니다. (사본 A와 B는 현재 가장 많은 여유 공간이있는 2 개의 디스크 (2 개 이상의 디스크 중)로 이동하기 때문에 ( 즉, 2 개의 복사본이 현재의 모든 디스크에 무작위로 분산 됨))
— DrYak

보안 관련 사항 :-MDADM과 BTRFS는 모두 문제가있을 경우 다른 사본을 시도합니다. -MDADM의 경우 감지 할 수있는 유일한 문제는 "디스크가 응답하지 않습니다"(위에 저장된 파일에 대한 실제 아이디어가 없기 때문에)입니다.-BTRFS의 경우 자동 데이터 손상을 감지 할 수 있습니다 (데이터가 체크섬되어 있으므로 BTRFS의 RAID 계층은 한 사본을 신뢰할 수 있는지 또는 다른 사본을 가져와야하는지 알고 있습니다)
— DrYak

마지막으로 RAID5 / 6과 관련해서는 안됩니다 . MDADM에서 작동합니다 . (그러나 자동 손상을 감지하지는 않습니다.)-BTRFS의 자동 손상은 현재 처리되지 않습니다 (스트라이프의 어느 구성원이 손상되었는지 추측하기 위해 삭제 코딩 계산을 수행하는 대신 RAID1에서 다른 사본을 가져 오는 것이 더 쉽기 때문에) 남아있는 데이터 / 패리티에서 다시 작성해야합니다). 다시 말해, 현재 (2017 년 8 월 기준) btrfs의 RAID5 / 6을 사용하지 않습니다.
— DrYak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.