私は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
。