btrfs scrub은 정확히 무엇을합니까? 완전히 명확하지 않은 매뉴얼 페이지에 따르면 오류 검사를 수행합니다. 어떤 종류의 오류 검사? 얼마나 신뢰할 수 있습니까? 일부 오류를 복구 할 수 있습니까? 어떻게 작동합니까? 모든 btrfs 디스크에서 작동합니까?
btrfs scrub은 정확히 무엇을합니까? 완전히 명확하지 않은 매뉴얼 페이지에 따르면 오류 검사를 수행합니다. 어떤 종류의 오류 검사? 얼마나 신뢰할 수 있습니까? 일부 오류를 복구 할 수 있습니까? 어떻게 작동합니까? 모든 btrfs 디스크에서 작동합니까?
답변:
나는 그것이 다른 일을하는지 모르겠지만 최소한 btrfs scrub
전체 디스크 데이터 스크러빙을 한다는 것을 알고 있습니다. 기본적으로 디스크의 모든 데이터 *를 읽고 체크섬을 다시 계산하고 다시 계산 된 체크섬을 저장된 체크섬과 비교합니다. 저장 및 재 계산 된 체크섬이 일치하지 않으면 시스템이 손상되었음을 알 수 있습니다.
손상이 감지되면 디스크 설정에 따라 동작이 달라집니다. 예를 들어 RAID 1 (미러링)이있는 경우 btrfs scrub
다른 디스크에서 손상되지 않은 버전을 복사하여 손상된 데이터를 수정할 수 있습니다. 일부 데이터의 모든 사본이 손상된 경우 (예 : 다중 디스크 손상 또는 처음에 중복 사본이없는 경우) btrfs scrub
경고 외에 할 수있는 일은 없습니다 .
이것이 중요한 이유는 읽기 및 쓰기 비트에서 하드 드라이브의 신뢰도가 99.999999999999 %에 불과하기 때문입니다. 따라서 몇 테라 바이트의 데이터 I / O마다 오류가있을 수 있습니다. 일반적인 디스크 액세스 중에 오류가 발견되고 수정 될 수 있지만 (중복 사본이 여전히 유효한 것으로 가정하면) 일반 전체 디스크 스크러빙은 동일한 데이터의 모든 사본이 손상 될 정도로 충분히 누적되기 전에 오류를 찾아서 수정할 수 있습니다.
* 메타 데이터도 포함시키기 위해 "file"대신 "data"를 사용하고 있습니다. Btrfs는 파일과 해당 메타 데이터 (체크섬 포함)를 데이터 블록에 저장합니다 btrfs scrub
.
또한보십시오:
100-1/10^14
.16 9 개의 9가 있고 게시물의 14는 10입니다 (10 ^ 12에 해당).
1-10^n
입니다. 그러면 사람이 선행 소수점을 좋아하지 않기 때문에 백분율로 변환됩니다. 또한 이전 의견에서 드라이브가 RAID 1 (따라서 동일한 270-300 GiB 데이터가 각 드라이브에 있음)을 언급하지 않아 다른 명백한 계산 오류가 수정되었습니다.
Mark Haferkamp의 탁월한 답변을 확장하면 모든 파일 대신 btrfs scrub
모든 데이터 를 읽는 것이 중요한 속성이며 실제로는 매우 유용합니다. btrfs에는 RAID 지원 기능이 내장되어 있습니다. RAID1을 사용하도록 구성한 두 개의 드라이브에 걸쳐있는 btrfs 파일 시스템이 있다고 가정하십시오. 이 경우 파일에 쓰면 해당 쓰기가 두 디스크에 모두 복제됩니다. (더 복잡한 예제에서는 더 복잡해 지지만이 간단한 경우에는 항상 이런 일이 발생합니다.) 그러나 해당 파일에서 읽을 때 읽기는 하나의 디스크에만 적용됩니다 (파일을 두 번 읽은 것은 낭비이므로) 어떤 이유로 첫 번째 사본을 사용할 수없는 경우).
이제 두 번째 btrfs 드라이브가 저하되어 파일 시스템의 데이터가 손상되기 시작한다고 가정하십시오. 이 디스크에서 블록을 읽을 때 btrfs는 체크섬이 일치하지 않음을 확인하고 알려진 정상 사본 (첫 번째 드라이브의 사본)에서 대역 내 블록을 복원합니다. read()
아무 일도 일어나지 않은 것처럼 데이터를 응용 프로그램 호출 (또는 무엇이든)에 반환합니다.
그러나 btrfs가 두 번째 디스크에서 읽기를 결정하지 않으면 어떻게됩니까? 사본이 두 개이므로 첫 번째 또는 두 번째 디스크 에서 읽을 수 있습니다 . 첫 번째 디스크에서 읽은 경우 아무런 문제가 없습니다. 첫 번째 디스크의 성능이 저하 된 경우에만 문제가 있음을 알 수 있습니다. 이제 데이터를 복구하기에는 너무 늦어서 두 번째 디스크의 복사본이 손상되었으며 첫 번째 복사본 (두 번째 디스크를 복원하는 데 사용 된 것)도 손상되었습니다!
여기가 온 곳 btrfs scrub
입니다. 모든 파일이 아니라 모든 데이터를 읽습니다 . 여기에는 메타 데이터뿐만 아니라 일반적으로 읽기 경로에없는 파일의 보조 사본도 포함됩니다. 이 2 차 사본을 읽으면 btrfs의 대역 내 오류 정정이 중복 사본에서 데이터를 시작하고 복원 할 수있는 기회를 만듭니다.