zpool에서 사용 불능 디스크 교체


31

네이티브 ZFS를 사용하여 Ubuntu Server 13.04 64 비트를 실행하고 있습니다. 4 개의 하드 드라이브로 구성된 zpool이 있는데 그 중 하나는 어제 죽었고 이제는 OS 또는 BIOS에서 더 이상 인식 하지 못합니다 .

불행히도 다음에 다시 부팅 한 후에 만 ​​문제가 발생하여 드라이브 레이블이 누락되어 여기여기 의 공식 지침을 사용하여 디스크를 교체 할 수 없습니다 .

zpool status hermes -x

인쇄물

root@zeus:~# zpool status hermes -x
  pool: hermes
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  UNAVAIL      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

드라이브를 이미 새 것으로 교체했습니다 (라벨이 있음 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ).

명령 중 하나

zpool replace hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
zpool detatch hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X

실패

root@zeus:~# zpool offline hermes /dev/disk/by-id/ata-ST3300831A_5NF0552X
cannot offline /dev/disk/by-id/ata-ST3300831A_5NF0552X: no such device in pool

사망 한 드라이브의 레이블이 시스템에 더 이상 존재하지 않기 때문에 드라이브 레이블의 경로를 생략하여 위의 명령을 사용해 보았습니다.

"고스트"디스크를 어떻게 교체 할 수 있습니까?

답변:


38

오늘 밤 끝없이 파고 난 후에 마침내 해결책을 찾았습니다. 짧은 대답은 명령으로 디스크의 GUID (드라이브를 분리 한 후에도 지속됨)를 사용할 수 있다는 것 zpool입니다.

긴 대답 : zdb명령을 사용하여 디스크의 GUID를 얻었 으며 다음과 같은 결과를 얻었습니다.

root@zeus:/dev# zdb
hermes:
    version: 28
    name: 'hermes'
    state: 0
    txg: 162804
    pool_guid: 14829240649900366534
    hostname: 'zeus'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 14829240649900366534
        children[0]:
            type: 'raidz'
            id: 0
            guid: 5355850150368902284
            nparity: 1
            metaslab_array: 31
            metaslab_shift: 32
            ashift: 9
            asize: 791588896768
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 11426107064765252810
                path: '/dev/disk/by-id/ata-ST3300620A_5QF0MJFP-part2'
                phys_path: '/dev/gptid/73b31683-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 15935140517898495532
                path: '/dev/disk/by-id/ata-ST3300831A_5NF0552X-part2'
                phys_path: '/dev/gptid/746c949a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 7183706725091321492
                path: '/dev/disk/by-id/ata-ST3200822A_5LJ1CHMS-part2'
                phys_path: '/dev/gptid/7541115a-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17196042497722925662
                path: '/dev/disk/by-id/ata-ST3200822A_3LJ0189C-part2'
                phys_path: '/dev/gptid/760a94ee-537f-11e2-bad7-50465d4eb8b0'
                whole_disk: 1
                create_txg: 4
    features_for_read:

내가 찾던 GUID는 내가 할 수 있었던 15935140517898495532것입니다.

root@zeus:/dev# zpool offline hermes 15935140517898495532
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Online the device using 'zpool online' or replace the device with
        'zpool replace'.
  scan: scrub repaired 0 in 2h4m with 0 errors on Sun Jun  9 00:28:24 2013
config:

        NAME                         STATE     READ WRITE CKSUM
        hermes                       DEGRADED     0     0     0
          raidz1-0                   DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP  ONLINE       0     0     0
            ata-ST3300831A_5NF0552X  OFFLINE      0     0     0
            ata-ST3200822A_5LJ1CHMS  ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C  ONLINE       0     0     0

errors: No known data errors

그리고

root@zeus:/dev# zpool replace hermes 15935140517898495532 /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ
root@zeus:/dev# zpool status
  pool: hermes
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Jun  9 01:44:36 2013
    408M scanned out of 419G at 20,4M/s, 5h50m to go
    101M resilvered, 0,10% done
config:

        NAME                            STATE     READ WRITE CKSUM
        hermes                          DEGRADED     0     0     0
          raidz1-0                      DEGRADED     0     0     0
            ata-ST3300620A_5QF0MJFP     ONLINE       0     0     0
            replacing-1                 OFFLINE      0     0     0
              ata-ST3300831A_5NF0552X   OFFLINE      0     0     0
              ata-ST3500320AS_9QM03ATQ  ONLINE       0     0     0  (resilvering)
            ata-ST3200822A_5LJ1CHMS     ONLINE       0     0     0
            ata-ST3200822A_3LJ0189C     ONLINE       0     0     0

errors: No known data errors

리 실버 링이 완료된 후 모든 것이 다시 잘 작동했습니다. 그것은 당신이 디스크의 GUID 통해 얻을 사용할 수있는,이 정보를 포함하고 좋은있을 것 zdb으로 zpool이 zpool의 맨으로, 명령.

편집하다

durval 아래에서 지적한 것처럼 zdb명령은 아무것도 출력하지 않을 수 있습니다. 그런 다음 사용하려고 할 수 있습니다

zdb -l /dev/<name-of-device>

장치에 대한 정보를 명시 적으로 나열합니다 (시스템에서 이미 누락 된 경우에도).


쿨, 그런 다음 -n스위치를 사용하여 추가를 실행하기 전에 스위치도 -guuid를 가져옵니다.
Brian Thomas

고마워 이것은 zdb에서 물건을 얻는 데 대한 정보를 찾을 수없는 웹을 파고 들었을 때 매우 도움이되었습니다.
xamox

나는 몇 주 동안 검색 해 왔으며 마침내이 대답은 트릭을 수행했습니다. 그러나 zpool status(sdab와 같은 이름)으로 나열된 ID 는 /dev/disk/by-id(미친 긴 ID 이름) 의 경로와 같지 않았습니다 . 그러나 ls -la /dev/disk/by-id그것들이 모두 링크되어 있음을 알 수 /dev/...있으므로 UNAVAIL (및 이후 오프라인) 디스크를 가리키는 디스크를 찾았 으며이 단계를 성공적으로 완료 할 수있었습니다. 이제 리 실버 링됩니다. 고맙습니다!
Matt

GUID를 얻는 다른 짧은 방법 zpool status -g은 각 장치의 GUID를 사용하여 상태를 표시하는 것입니다. 또한 @Matt zpool status -L의 경우 긴 /dev/disk/by-id이름 대신 기본 장치 이름을 사용하여 상태를 표시합니다 .
StarNamer

당신은 솔루션으로 돌아 오는 진정한 MVP입니다. 이것은 나를 위해 일했습니다.
0:25의 extracrispy

3

문제는 디스크가 장치가 아닌 ID로 참조된다는 것입니다.

작동해야 할 해결 방법은 다음과 같습니다.

ln -s /dev/null /dev/ata-ST3300831A_5NF0552X
zpool export hermes
zpool import hermes
zpool status
# note the new device name that should appear here
zpool offline hermes xxxx
zpool replace hermes xxxx /dev/disk/by-id/ata-ST3500320AS_9QM03ATQ

편집 : 나는 30 초 늦었다 ...


감사. 누락 된 드라이브에 대한 빈 링크를 만들려고했지만 계속 말합니다 no such device in pool.
Marcus

내 제안은 당신이 한 것과 거의 동일합니다. 유일한 차이점은 장치 안내를 얻는 방법입니다. 빈 링크와는 다른 / dev / null에 대한 심볼릭 링크를 만들고 풀을 가져 오거나 가져 오면zpool status
jlliagre

나는 실제로 교체하지 않고 다시 온라인 "결함"드라이브를 얻을 수 있었다이 방법을 사용 (I 생략 너무 offline하고 replace단계). null 링크를 제거한 후 풀을 두 번째로 가져 왔습니다. 드라이브 레이블에 문제가있을 수 있습니까? 실제로 드라이브 이름은 동일하게 유지되었습니다. 나중에 완전한 스크럽을 수행했는데 오류가 발견되지 않았습니다.
Serrano

2

@Marcus : 귀하의 질문에 대한 훌륭한 답변을 게시 해 주셔서 감사합니다.

다른 날 나는 당신 (그리고 미래에 인터넷 검색을 할 다른 사람들)에게 관심을 가질만한 비틀기를 발견했다. 나는 동일한 오류로 인해 풀에서 삭제 된 캐시 장치를 가지고 있었다 ( "UNAVAIL"로 표시됨) (ZFS-8000-4J, "라벨이 없거나 유효하지 않습니다"), 오프라인 / 제거 / 바꾸기 시도가 정확히 같은 "풀에 장치 없음"메시지와 함께 실패했습니다.

그러나 솔루션을 적용하려고 할 때 일반 "zdb"(인수 없음)는 장치를 나열 하지 않았 으며 GUID는 훨씬 적습니다.

파고 들자 "zdb -l / dev / DEVICENAME"이 GUID를 나열하고 (풀 레코드가 아닌 장치에서 직접 가져옴) GUID를 사용하여 교체를 수행 할 수 있음을 발견했습니다 (실제로 "zpool offline"다음에 "zpool remove"와 "zpool add"가 차례로 표시됩니다.


감사! 귀하의 의견에 대한 참조로 내 자신의 대답에 힌트를 추가했습니다.
Marcus

나에게 zdb -l /dev/...항상 "라벨 포장 풀기 실패"를 보여주었습니다.
Matt

0

비슷한 문제가있었습니다.

드라이브가 더 이상 BIOS에 등록되지 않는 방식으로 실패했습니다 (완전히 죽었습니다). 는 zpool status그것이 것으로 나타났다 UNAVAILABLE.

나는 비슷한 용량의 드라이브를 넣어, 나는 새로 할당하는 관리 spare였습니다 INUSE드라이브를 resilvered. 그러나 실제로 zpool의 일부는 아니었고 풀에는 누락 된 드라이브에 대한 메모리가 있었으며 언젠가 다시 나타날 것이라고 생각했습니다.

해결책은 먼저 zpool에서 누락 된 드라이브삭제하는 것입니다 .

[root@hactar ~]# zpool detach hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094  

그런 다음 표시된 드라이브 spare-1 INUSE도 삭제하십시오 .

[root@hactar ~]# zpool detach hactar_data /dev/gptid/f2089b59-2654-11e5-8d99-00241d738094

이 작업을 수행 한 후에는 FreeNAS가 replace명령 을 수행하지 않아도 알아 낸 것처럼 보이지만 시스템이 자체적으로 알아낼 수없는 경우 다음 명령으로 한 장치를 다른 장치로 바꿔야합니다.

zpool replace {your_poolname} {drive to be replaced} {new drive to take its place}

예를 들면 다음과 같습니다.

zpool replace hactar_data /dev/gptid/87410b00-adb0-11e6-9193-00241d738094 /dev/gptid/87410b00-adb0-11e6-9193-00241d
738094
  • gptids는 내 zpool status명령 에서 나왔습니다 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.