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.