ZFS 풀에서 실패한 디스크 교체

ZFS 풀에서 실패한 디스크 교체

3개의 중첩된 RAIDZ2 vdev가 있는 대규모 ZFS 디스크 풀이 있습니다.

동료를 위해 고장난 디스크를 교체하는 과정을 문서화하고 있으므로 호스트에서 디스크를 제거하여 디스크 고장을 시뮬레이션하고 있습니다.

물론 디스크가 속한 vdev가 다운그레이드되어 디스크를 사용할 수 없습니다.

이렇게 디스크를 오프라인으로 전환합니다.

zpool offline diskpool sdo

빠른 "zpool 상태"는 디스크가 오프라인임을 나타냅니다...지금까지는 양호합니다.

디스크를 교체하고 SATA 컨트롤러에서 새 디스크가 감지되었음을 확인했는데, 그랬습니다. 그런 다음 Linux가 scsi 버스를 다시 스캔하여 디스크를 감지하도록 시도했습니다. 이것이 나의 첫 번째 질문이 발생하는 곳입니다.

내가 아는 한, 다음 명령은 다시 검색할 올바른 호스트 버스를 찾는 데 사용됩니다...

grep mpt /sys/class/scsi_host/host?/proc_name

그러나 내 Centos 7.2 시스템에서는 이 명령이 출력을 생성하지 않습니다. 오류가 없으며 빈 출력을 제공하고 다음 명령을 기다립니다.

나는 많은 SATA 장치를 연결할 수 있는 여러 가지 특수 카드를 사용합니다. 나는 보통 버스를 다시 검색한다

echo "- - -" > /sys/class/scsi_host/hostX/scan

여기서 hostX는 올바른 호스트 버스이지만 호스트 버스를 찾을 수 없기 때문에 이 단계를 완료할 수 없습니다.

이 정보를 얻을 수 있는 다른 방법이 있습니까? 아니면 Centos 7.2 등에서 명령이 변경되었습니까?

또한 테스트를 계속하기 위해 컴퓨터를 다시 시작하기로 결정했습니다. 재부팅 후 ZFS 풀이 연결되지 않습니다. "zpool import diskpool"을 사용하여 수동으로 가져와야 했습니다. 이것은 훌륭하게 작동하지만 이상한 점은 가져온 후 "zpool status"를 수행하면 더 이상 이전처럼 장치 ID가 표시되지 않는다는 것입니다.

 raidz2-2                            ONLINE       0     0     0
        /dev/sdd                     ONLINE       0     0     0
        /dev/sde                     ONLINE       0     0     0
        /dev/sdf                     ONLINE       0     0     0
        /dev/sdg                     ONLINE       0     0     0

대신 드라이브 일련번호가 있는 것 같습니다...

      raidz2-2                            ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DG66  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DVE0  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840CQFB  ONLINE       0     0     0
        ata-ST8000AS0002-1NA17Z_Z840DP2V  ONLINE       0     0     0

이로 인해 향후 문제가 발생할 수 있으며, 다른 디스크에 장애가 발생하면 교체할 올바른 디스크를 결정하는 데 어려움을 겪게 됩니다.

장치 ID가 다시 표시되도록 다시 전환할 수 있는 방법이 있습니까?

미리 감사드립니다!

답변1

파일 시스템의 이름으로 디스크를 감지하는 대신 ZFS는 디스크에 UUID(또는 최소한 유사한 것 - 실제로 UUID인지 100% 확신할 수 없음)를 기록하여 디스크를 감지합니다. 실행하면 zpool import디스크가 열거되고 ZFS는 모든 풀을 다시 빌드한 다음 출력에 장치 이름을 사용합니다(실제로 디렉터리 IME를 포함하지 않고 일반적으로 다음과 같이 sda표시됨 /dev/sda) zpool status. 따라서 드라이브를 옮기면(또는핵심드라이브를 이동하면(이는 최신 하드웨어의 최신 커널에서 발생할 수 있음) zpool은 여전히 ​​이전과 동일한 순서로 디스크를 감지합니다. 커널이 더 이상 출력에 나타나지 않더라도 출력에 처음으로 나타납니다. 이 출력에 이를 열거합니다.

여기서 일어나는 일은 아마도 원래 버전이 zpool import작동하지 않고 커널이 부팅을 완료하고 udev많은 작업을 수행한 다음 수동을 실행할 때 zpool import모든 디스크에 대한 기본 열거 결과가 첫 번째 일련 번호를 기반으로 한다는 것입니다. 장소가 아니라 sdX. 다음에 컴퓨터를 다시 시작하면 사용된 이름이 해당 sdX구성표로 되돌아갈 가능성이 높습니다.

다행히도 한 명명 체계에서 다른 명명 체계로 이름을 확인하는 것은 매우 간단합니다.

wouter@gangtai:/dev/disk/by-id$ ls -l
total 0
lrwxrwxrwx. 1 root root  9 Mar 31 18:15 ata-SAMSUNG_MZ7TE256HMHP-00004_S1RKNSAFC04685 -> ../../sda
lrwxrwxrwx. 1 root root 10 Mar 31 18:15 ata-SAMSUNG_MZ7TE256HMHP-00004_S1RKNSAFC04685-part1 -> ../../sda1
lrwxrwxrwx. 1 root root  9 Mar 31 18:15 wwn-0x50025388a089e89c -> ../../sda
lrwxrwxrwx. 1 root root 10 Mar 31 18:15 wwn-0x50025388a089e89c-part1 -> ../../sda1

by-id다양한 명명 체계( , by-uuid및 ) 가 있으며 by-path, 모두 아래에서 확인할 수 있습니다 /dev/disk.

모든 것을 말했지만 이름을 보면 어떤 디스크가 어떤 디스크인지 파악하는 것이 더 쉽다는 귀하의 진술에 동의하지 않습니다 sdX. 최신 커널은 더 이상 특정 장치에 정적 장치 이름을 할당하지 않습니다. 이것이 최신 배포판이 UUID 기반 fstab파일 대신 sdXUUID 기반 파일을 사용하는 이유입니다. 일련번호는 실제로멀리어떤 디스크가 손상되었는지 확인하는 보다 안정적인 방법은 그것이 기록된 방식입니다.실제 디스크에는 이름과 달리 sdX부팅마다 다를 수 있습니다(실제로 16개의 하드 드라이브가 있는 ZFS 시스템에서 이 문제가 발생했습니다). 다른 접근 방식( by-uuid, by-id특히 by-path엔터프라이즈급 다중 디스크 인클로저의 경우)은많은그보다 더 신뢰할 수 있습니다.

관련 정보