btrfs의 RAID5/6 코드가 아직 안정적이지 않기 때문에 mdadm raid6 위에서 btrfs를 실행하는 설정이 있습니다. 나는 이 방법으로 몇 가지 추가 문제를 해결하여 스냅샷 작성 및 체크섬의 이점을 얻을 수 있다고 생각했습니다. 이제 실제로 이러한 문제를 해결해야 하므로 몇 가지 문제에 직면하게 되었습니다.
오늘 아침 내 dmesg에서 다음 문제가 발생했습니다.
BTRFS error (device md2): bad tree block start, want 28789209759744 have 7611175298055105740
BTRFS info (device md2): read error corrected: ino 0 off 28789209759744 (dev /dev/md2 sector 55198191488)
BTRFS info (device md2): read error corrected: ino 0 off 28789209763840 (dev /dev/md2 sector 55198191496)
BTRFS info (device md2): read error corrected: ino 0 off 28789209767936 (dev /dev/md2 sector 55198191504)
BTRFS info (device md2): read error corrected: ino 0 off 28789209772032 (dev /dev/md2 sector 55198191512)
이것은 btrfs를 사용하지 않았다면 조용히 지나갈 수 있었던 종류이므로 적어도 나에게는 좋은 일이 되었습니다... 이제 어떤 디스크에 문제가 있는지 파악하고 교체할 수 있어야 합니다. 그렇죠?
글쎄, mdadm은 raid6check 도구를 사용하여 오류가 발생한 디스크를 확인하는 것만 지원하는 것 같습니다. 데비안에서 작동하도록 소스에서 빌드해야 했지만 그렇게 한 후에는 사업을 시작한 것 같습니다.
여기서 유일한 문제점은 이 도구가 매우 느린 것 같다는 것입니다. 1000개의 줄무늬를 스캔하는 데 3분 정도 걸립니다. 이는 내 어레이를 구성하는 15261512 스트라이프를 스캔하는 데 31일이 넘게 걸린다는 의미입니다. 가능하다면 그런 일은 피하고 싶습니다. mdadm 검사/복구는 훨씬 빠르며 약 3일 정도 소요되지만 어떤 디스크가 이 문제를 담당할 수 있는지에 대한 유용한 정보를 생성하지 않으므로 정확히 사용하고 싶지 않습니다.
raid6check 도구는 스트라이프 번호 허용을 지원하는 것으로 보입니다. 디스크의 관련 부분을 직접 확인할 수 있도록 전달할 스트라이프 번호를 계산하는 것이 가능한지 궁금합니다.
도움이 될 경우 참조 목적으로 raid6check 정보를 확인하세요.
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
감사합니다. 어떤 아이디어라도 감사하겠습니다.
답변1
좋아요, 저는 Freenode의 #linux-raid에서 JyZyXEL과 대화한 후 이를 수행할 수 있는 어느 정도 효과적인 방법을 찾았습니다.
raid6check는 총 스트라이프를 보고하므로 전체 테스트를 실행하지 않고 기본 정보를 보려면 다음과 같이 실행하십시오.
./raid6check /dev/md0 0 1
다음과 같은 결과를 얻게 됩니다:
layout: 2
disks: 8
component size: 8001427603456
total stripes: 15261512
chunk size: 524288
fdisk -l /dev/md0을 사용하여 RAID의 전체 섹터를 확인하십시오.
Disk /dev/md2: 43.7 TiB, 48008565620736 bytes, 93766729728 sectors
이제 스트라이프당 섹터를 계산합니다.
total sectors / total stripes = 93766729728 / 15261512 = 6144
이제 오류가 있는 섹터를 스트라이프당 섹터로 나눕니다.
error sector = 55198191488/6144 = 8984080
이제 raid6check를 실행하고 정확하지 않은 것 같으므로 주변 영역을 포함해 보십시오.
raid6check /dev/md0 8984000 1000
나에게는 이로 인해 많은 관련 오류가 빠르게 발생했으며 모두 실패할 수 있는 동일한 디스크를 가리켰습니다.
Error detected at stripe 8984078, page 100: possible failed disk slot 1: 4 --> /dev/sdj1
Error detected at stripe 8984081, page 76: possible failed disk slot 4: 4 --> /dev/sdj1
이 시점부터 그에 따라 조치를 취하고, 디스크를 교체하고, SMART 테스트를 실행하고, raid6check의 자동 복구를 사용하는 등의 작업을 수행할 수 있습니다.
이것이 가장 정확한 방법은 아닐 수도 있지만, 더 나은 아이디어를 생각해내는 사람이 없고 나중에 이 작업을 수행하는 방법을 찾고 있는 사람이 있을 경우를 대비하여 게시하고 있습니다.