環境
- Ubuntu 18.04
事象の発生
ZFSでプールを作成するときにディスクのパスを/dev/disk/by-id/*の永続名で指定するの忘れていて、/dev/sdj1みたいに指定しちゃってた。
$ sudo zpool status -v
pool: rpool
state: ONLINE
status: One or more devices has experienced an error resulting in data
corruption. Applications may be affected.
action: Restore the file in question if possible. Otherwise restore the
entire pool from backup.
see: http://zfsonlinux.org/msg/ZFS-8000-8A
scan: scrub repaired 384K in 33h36m with 2 errors on Mon Oct 15 10:00:35 2018
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
raidz1-2 ONLINE 0 0 0
sdf1 ONLINE 0 0 0
sdi1 ONLINE 0 0 0
sdj1 ONLINE 0 0 0
logs
mirror-1 ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
cache
sda ONLINE 0 0 0
errors: 1 data errors, use '-v' for a list
しばらくしてから新しいHDDを追加した際にSATAポートを繋ぎ変えてしまい、/dev/sdj1→/dev/sdh1とパスが変わってプールから見えなくなってしまった。
$ sudo zpool status -v
pool: rpool
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 in progress since Tue Nov 13 21:59:11 2018
32.2G scanned out of 20.2T at 192M/s, 30h36m to go
0B repaired, 0.16% done
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
raidz1-2 ONLINE 0 0 0
sdf1 ONLINE 0 0 0
sdi1 ONLINE 0 0 0
1896067203366565522 UNAVAIL 0 0 0 was /dev/sdj1
logs
mirror-1 ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
cache
sda ONLINE 0 0 0
errors: No known data errors
対応
で、replaceすればいい話だし、どうせなら永続名に変えとこうとか思っていたら以下のようにエラーが出てreplaceできない。
$ sudo zpool replace -f rpool 1896067203366565522 ata-WDC_WD40EFRX-68N32N0_WD-xxx
invalid vdev specification
the following errors must be manually repaired:
/dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-xxx-part1 is part of active pool 'rpool'
ディスクのどっかの情報を見て、どこかのプール所属だと消せないようになってるらしい。
事故防止になるし、まあいいと思う。
メッセージでググってみると、「zpool labelclearコマンド」でディスクからラベル情報が消せるらしいのでやってみる。
(参考)ZFSで使ったことがあるHDD/SSDを再利用する時はzpool labelclearすべき
$ sudo zpool labelclear -f /dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-xxx
/dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-xx is a member (ACTIVE) of pool "rpool"
怒られた。
プールに所属している情報を消してやり直したいのに、所属しているから消せない理不尽。
さらにググったらddコマンドで直接的にディスクから情報を上書き削除している記述がったので真似してみる。
(参考)RAIDZ1: unable to replace a drive with itself
sudo dd if=/dev/zero of=/dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-xxx bs=64M count=10
これで都合の悪い部分が削除できたらしく、replaceできるようになった。
sudo zpool replace rpool /dev/sdj1 ata-WDC_WD40EFRX-68N32N0_WD-xxx
リプレースしてるところ。
$ sudo zpool status -v
pool: rpool
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 Tue Nov 13 22:07:28 2018
4.57T scanned out of 20.2T at 1.47G/s, 3h1m to go
149G resilvered, 22.59% done
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
raidz1-0 ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
ata-ST8000DM004-xxx ONLINE 0 0 0
raidz1-2 DEGRADED 0 0 0
sdf1 ONLINE 0 0 0
sdi1 ONLINE 0 0 0
replacing-2 DEGRADED 0 0 0
1896067203366565522 UNAVAIL 0 0 0 was /dev/sdj1
ata-WDC_WD40EFRX-68N32N0_WD-xxx ONLINE 0 0 0 (resilvering)
logs
mirror-1 ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
ata-SanDisk_SD8SBAT032G1122_xxx ONLINE 0 0 0
cache
sda ONLINE 0 0 0
errors: No known data errors
コメント