ZFS Ubuntu 16.04는 드라이브를 자체적으로 교체합니다.

ZFS Ubuntu 16.04는 드라이브를 자체적으로 교체합니다.

저는 ZFS 파일 시스템을 처음 사용합니다. 저는 Windows에서 DrivePool을 사용하고 있지만 즉시 오류를 수정하고 스냅샷을 생성 및 유지할 수 있는 기능을 원했습니다. 나는 BTRFS를 사용했지만 ZFS는 Ubuntu 16.04에 포함되어 있고 ZFS가 raid-z2의 BTRFS보다 더 안정적이라고 들었으므로 왜 안 될지 생각했습니다.

3주쯤 전에 이사했어요. 4TB 드라이브 10개를 가져와 raid-z2에 넣었습니다. 백업부터 공격까지 약 18시간이 소요됩니다. 운전순서가 중요한지 몰랐어요. 포트가 14개인데 슬롯이 12개밖에 없기 때문에 드라이브를 꺼내서 케이스에 넣었습니다. 이것은 나에게 말하지 않고 분명히 내 z2를 죽였습니다. 내 어레이가 왜 90MB/s로 실행되는지 궁금했지만, 내 직업 때문에 오늘 밤까지 더 이상 조사할 수 없었습니다.

zpool status

! 한 드라이브는 "실패" 상태이고 다른 드라이브는 "사용할 수 없음" 상태입니다. 두 드라이브 모두 SMART 검사 결과가 좋습니다. 약 2주가 지났는데 드라이브의 데이터가 이미 불량 상태입니다. 그래서 디스크를 오프라인으로 전환했습니다.

 root@core:/home/kayot# zpool status
 pool: storage
 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 in progress since Tue Feb 21 20:15:16 2017
 151G scanned out of 24.8T at 401M/s, 17h55m to go
 0 repaired, 0.60% done
 config:

    NAME                      STATE     READ WRITE CKSUM
    storage                   DEGRADED     0     0     0
      raidz2-0                DEGRADED     0     0     0
        sda                   ONLINE       0     0     0
        sdb                   ONLINE       0     0     0
        sdc                   ONLINE       0     0     0
        sdd                   ONLINE       0     0     0
        sde                   ONLINE       0     0     0
        sdf                   ONLINE       0     0     0
        sdg                   ONLINE       0     0     0
        sdh                   ONLINE       0     0     0
        11017248821379080310  OFFLINE      0     0     0  was /dev/sdk1
        2056055545907538536   OFFLINE      0     0     0  was /dev/sdl1

풀백업이 있어서 긴장하거나 그러진 않아요. 그래서 디스크를 같은 것으로 교체하자고 생각했습니다. SDK는 아직 시스템에 있지만 사용되지는 않죠?

root@core:/home/kayot# zpool replace -f storage 11017248821379080310 /dev/sdk
invalid vdev specification
the following errors must be manually repaired:
/dev/sdk1 is part of active pool 'storage'

이것은 매우 이상합니다. 드라이브에 문제가 있다고 공개적으로 알려서 오프라인으로 전환했습니다. 파티션을 청소했어요. Parted를 사용하고 파티션을 삭제했습니다. 또한 새 파티션 GPT를 만들었습니다.

root@core:/home/kayot# zpool replace storage /dev/sdk
cannot replace /dev/sdk with /dev/sdk: /dev/sdk is busy
root@core:/home/kayot# zpool replace storage /dev/sdk
invalid vdev specification
use '-f' to override the following errors:
/dev/sdk1 is part of active pool 'storage'
root@core:/home/kayot#

같은 오류입니다. 여전히 동일한 드라이브인지 어떻게 알 수 있나요?

그래서 드라이브의 처음 10GB를 추가했습니다. 그런 다음 Parted를 사용하고 새 파티션 테이블을 만들었습니다. 같은 오류... 그런 다음 첫 번째 드라이브 등을 교체하기 위해 다른 드라이브를 사용할 드라이브를 교차 추가하려고 시도했습니다.

다른 드라이브에서도 동일한 오류가 발생합니다.

왜?

나는 또한 labelclear를 사용했습니다. 같은 결과.

이러한 드라이브를 다시 사용하려면 어떻게 해야 합니까? 전체 어레이를 핵으로 만드시겠습니까?

그래서 내가 뭘 잘못하고 있고 어떻게 고칠 수 있습니까? 백업이 있지만 이것이 학습 경험이라고 생각하며 교체하는 대신 수정할 수 있다면 이상적일 것입니다.

이것은 내 ZBD 추적입니다.

root@core:/home/kayot# zdb
storage:
    version: 5000
    name: 'storage'
    state: 0
    txg: 1080550
    pool_guid: 9888777651596013552
    errata: 0
    hostname: 'core'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: 9888777651596013552
        children[0]:
            type: 'raidz'
            id: 0
            guid: 6154429632473251558
            nparity: 2
            metaslab_array: 34
            metaslab_shift: 38
            ashift: 12
            asize: 40007384432640
            is_log: 0
            create_txg: 4
            children[0]:
                type: 'disk'
                id: 0
                guid: 788698524796940048
                path: '/dev/sda1'
                whole_disk: 1
                DTL: 170
                create_txg: 4
            children[1]:
                type: 'disk'
                id: 1
                guid: 13851319173204376663
                path: '/dev/sdb1'
                whole_disk: 1
                DTL: 169
                create_txg: 4
            children[2]:
                type: 'disk'
                id: 2
                guid: 2340725902255763627
                path: '/dev/sdc1'
                whole_disk: 1
                DTL: 168
                create_txg: 4
            children[3]:
                type: 'disk'
                id: 3
                guid: 17362585713374487716
                path: '/dev/sdd1'
                whole_disk: 1
                DTL: 167
                create_txg: 4
            children[4]:
                type: 'disk'
                id: 4
                guid: 2150600564749895821
                path: '/dev/sde1'
                whole_disk: 1
                DTL: 166
                create_txg: 4
            children[5]:
                type: 'disk'
                id: 5
                guid: 3210726972626380545
                path: '/dev/sdf1'
                whole_disk: 1
                DTL: 165
                create_txg: 4
            children[6]:
                type: 'disk'
                id: 6
                guid: 8795069986910347514
                path: '/dev/sdg1'
                whole_disk: 1
                DTL: 164
                create_txg: 4
            children[7]:
                type: 'disk'
                id: 7
                guid: 6469389792976906412
                path: '/dev/sdh1'
                whole_disk: 1
                DTL: 163
                create_txg: 4
            children[8]:
                type: 'disk'
                id: 8
                guid: 11017248821379080310
                path: '/dev/sdk1'
                whole_disk: 1
                not_present: 1
                DTL: 160
                create_txg: 4
                offline: 1
            children[9]:
                type: 'disk'
                id: 9
                guid: 2056055545907538536
                path: '/dev/sdl1'
                whole_disk: 1
                not_present: 1
                DTL: 159
                create_txg: 4
                offline: 1
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data

답변1

ZFS에서 동일한 드라이브를 다시 사용하려면 디스크에 결함이 없다고 확신하는 경우 드라이브의 처음 10GB에서 DD를 수행하는 것이 좋은 시작이지만 드라이브 끝에서도 이 작업을 수행해야 합니다. . 하지만 DD 10GB는 필수가 아니며 첫 번째와 마지막 MB이면 충분하다고 생각합니다.

이것이 내가 해결한 방법입니다.

dd bs=512 if=/dev/zero of=/dev/sdk count=2048 seek=$(($(blockdev --getsz /dev/sdk) - 2048))
dd bs=512 if=/dev/zero of=/dev/sdk count=2048 

그런 다음 "새" 디스크를 ZFS 풀에 다시 추가하기만 하면 됩니다. 디스크를 표시하거나 문지르거나 닦을 필요가 없습니다. DD만 있으면 됩니다. 또한 DD 이후에는 디스크를 분할하면 안 됩니다. ZFS는 이전에 분할된 디스크를 허용하지 않습니다.

그 다음에zpool replace <pool-name> <old-device> <new-device>

일반적으로 디스크 ID와 장치가 에 나열됩니다 lsblk.

관련 정보