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で同じドライブを再利用するには、ディスクに障害がないと確信している場合は、ドライブの最初の10 GBで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

関連情報