저는 FreeBSD와 ZFS를 사용하는 홈 서버를 가지고 있으며 지난 5년 동안 잘 작동해 왔으며 여러 차례 결함이 있는 디스크를 성공적으로 교체했습니다.
그런데 오늘 작은 재난이 발생했고, 해결책을 찾고자 합니다.
각각 raidz1 풀인 3개의 vdev로 구성된 최상위 풀이 있으므로 최대 3개의 디스크가 실패할 수 있습니다(모두 다른 vdev에 속한다고 가정). 데이터 무결성은 그대로 유지됩니다.
어제 1 vdev의 1 디스크에서 꽤 많은 오류가 보고되는 것을 발견했습니다. 과거 경험에 따르면 이는 일반적으로 디스크가 곧 실패할 것임을 나타냅니다. 그래서 저는 평소에 하던 대로 합니다.
- 디스크 오프라인: zpool 오프라인 탱크 gpt/ta4
- 디스크를 물리적으로 교체
- gpart로 새 디스크를 설정한 다음 zpool에서 탱크 gpt/ta4를 교체합니다.
그러나 이번에는 2단계와 3단계 사이에 재난이 닥쳤습니다. 새 드라이브를 설치한 후 서버 전원을 켰을 때 뭔가 타는 냄새가 났고 HBA에서 다음과 같이 표시했습니다.4의 드라이브를 사용할 수 없습니다! 믿을 수 없을 만큼 불운한 일로 인해 동일한 vdev(gpt/ta2)의 다른 드라이브가 이제 완전히 죽었고 육안 검사를 통해 PCB의 MOSFET 중 하나가 끊어졌기 때문에 약간의 전압 서지가 발생했을 것입니다.
이제 gpt/ta2는 UNAVAIL이고 gpt/ta4는 OFFLINE이므로 raidz1인 vdev도 UNAVAIL입니다.
내 질문은 다음과 같습니다. 1) gpt/ta4를 다시 온라인으로 전환할 수 있는 방법이 있습니까? "zpool online Tank gpt/ta4"를 실행하려고 하면 풀을 사용할 수 없다는 메시지가 나와서 실행할 수 없습니다. 왜 그럴 수 있는지 이해할 수 있지만, 읽기 오류가 발생하더라도 gpt/ta4는 기본적으로 오프라인으로 전환하기 전에는 기본적으로 여전히 raidz1 풀의 '좋은' 구성원이었다고 생각했습니다(zpool 상태에 알려진 데이터가 없다고 보고됨). 오류). 어쨌든 이것을 달성 할 수 있습니까?
2) 실패할 경우 최소한 내 최상위 풀(3개의 raidz1 vdev로 구성됨)의 나머지 부분을 온라인으로 가져올 수 있는 방법이 있습니까? 다른 2개의 vdev는 완벽하게 괜찮습니다.
도와주세요. 귀중한 데이터가 많이 있습니다 :-)
미리 감사드립니다.
답변1
이 시점에서 도움이 되는 것은 아니지만 이것이 바로 내가 사람들에게 raidz1을 사용하도록 조언하는 것을 결코 볼 수 없는 이유입니다. 그리고 미러 세트의 경우 거대한 디스크를 사용하는 경우 종종 삼중 미러를 제안합니다.
당신이 취할 수 있는 어떤 행동이라도 탱크를 온라인 상태로 되돌릴 가능성은 /극단적으로는/ 없습니다. 여러분의 희망을 키우지 않으려면 그것부터 시작해야 합니다.
1: 디스크가 안전한지 확인하세요. 디스크가 모두 연결 해제되더라도 말이죠.
2: 최신 버전의 FreeBSD로 업데이트하세요. 손에 넣을 수 있는 최신 ZFS 비트가 필요합니다.
3: 원본 gpt/ta4(아마도 '정상'이고 읽기 오류가 발생한 것으로 추정됨)를 시스템에 다시 넣거나 최신 ZFS 비트(제거한 경우 다른 모든 비트도 포함)가 있는 새 시스템에 넣고 부팅합니다. 그런 다음 작동할 때까지 순서대로 실행합니다. (미리 주의하십시오. 시스템을 복구하려고 시도할 때 롤백되어 최근에 작성된 데이터가 손실될 수 있다는 점에서 특히 마지막 것은 안전하지 않습니다.)
- zpool import -f 탱크
- zpool import -fF 탱크
- zpool import -fFX 탱크
세 가지 모두 실패하면 "간단한" 복구 영역을 벗어난 것입니다. '잘못된 풀 가져오기', 'zdb', 'zpool import -F', 'zpool import -X', 'zpool import -T'(위험!) 등에 대한 일부 인터넷 검색을 통해 추가 블로그와 정보를 얻을 수 있습니다. 다른 사람이 복구를 시도했지만 그 시점에서는 이미 매우 위험하고 잠재적으로 추가 데이터 손상이 발생할 수 있는 상황에 있으며 유료 복구 서비스 영역으로 빠르게 진입하고 있습니다(기존 데이터 복구 회사가 아닌 ZFS에 대한 전문 지식이 전혀 없음). 그리고 당신에게 아무 소용이 없을 것입니다).
참고: 더 정확하고 '안전한' 방법은 'zpool import -o readonly=on -f -T [txg_id] 탱크'입니다. 그러나 이것이 작동하려면 먼저 zdb를 직접 사용하여 겉으로 보기에는 건강해 보이는 최근 txg_id를 찾아야 하며 여기서는 이에 대해 모두 설명할 준비가 되어 있지 않습니다. 여기에서는 Google이 여러분의 친구가 될 것입니다. 현재 하고 있는 일에 어느 정도 익숙해질 만큼 충분한 정보를 읽을 때까지 아무런 조치도 취하지 마세요. 단일 소스를 신뢰하지 마십시오.
참고 2: '가장 안전한' 방법은 즉시 ZFS 복구 서비스를 제공할 수 있는 사람에게 연락하는 것입니다.
참고 3: 다음으로 '가장 안전한' 방법은 드라이브를 안전한 시스템에 넣고 각 원시 드라이브를 새 디스크에 추가하여 이론적으로는 동일한 디스크 복사본을 제공하는 것입니다. 비슷한 수의 새 디스크가 필요하며, 이전 디스크와 크기/유형이 유사하거나 동일한 것이 바람직하지만 꼭 필요한 것은 아닙니다. 그런 다음 한 드라이브 세트에 위의 작업 중 하나를 시도하고 나머지 드라이브 세트는 안전 보관을 위해 따로 보관해 두십시오.