Hi,
Имеется машинка версии
FreeBSD 8.2-STABLE #3 r223566: Mon Jun 27 17:37:04 MSD 2011 amd64
и LSI MegagovnoRAID о 12 дисках на борту, с которыми ничего не
делаается, просто отдаются системе, а на них уже собран raidz2 (на оном
живет всё, окромя / на флешке).
Жила она себе не очень хорошо почти два года, пока ейный своп в файле на
zfs в ночь на 1 апреля не пошутил в лог про indefinite wait buffer,
после чего у машинки отсох весь юзерленд (стала отвечать только на пинги
да открытые сокеты, и только). После резета оказалось, что один из
дисков приказал долго жить, был заказан новый, он пришел, был заменен
(машине висеть понравилось, и она до тех пор делала это еще несколько
раз), пока не выяснилась новая беда.
Оказалось, нумерация дисков сбилась, и случилось два одинаковых
устройства mfid5:
backup:~# zpool status
pool: backup0
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas
exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backup0 DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
mfid0 ONLINE 0 0 0
mfid1 ONLINE 0 0 0
mfid10 ONLINE 0 0 0
mfid7 ONLINE 0 0 0
mfid9 ONLINE 0 0 0
mfid2 ONLINE 0 0 0
mfid3 ONLINE 0 0 0
mfid4 ONLINE 0 0 0
mfid5 UNAVAIL 0 0 0 cannot open
mfid5 ONLINE 0 0 0
mfid8 ONLINE 0 0 0
mfid6 ONLINE 0 0 0
errors: No known data errors
Причем ребуты, которые с 1 апреля случались несколько раз, это не
лечили. С железной стороны свежий диск выглядел как mfid11, но что с
этим дублированием имен делать, было непонятно - не утащит ли оно еще
один диск. Просто zpool attach backup0 mfid11 работать отказался,
радостно заявив, что это не зеркало.
Рискнули, и попробовали имя сказать. Оно прожевало, но картина
получилась странноватая:
backup# zpool replace backup0 mfid5 mfid11
backup# zpool status
pool: backup0
state: DEGRADED
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backup0 DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
mfid0 ONLINE 0 0 0
mfid1 ONLINE 0 0 0
mfid10 ONLINE 0 0 0
mfid7 ONLINE 0 0 0
mfid9 ONLINE 0 0 0
mfid2 ONLINE 0 0 0
mfid3 ONLINE 0 0 0
mfid4 ONLINE 0 0 0
replacing UNAVAIL 0 0 0
mfid5 UNAVAIL 0 0 0 cannot open
mfid11 ONLINE 0 0 0
mfid5 ONLINE 0 0 0
mfid8 ONLINE 0 0 0
mfid6 ONLINE 0 0 0
errors: No known data errors
Ничего про resilvering оно не пишет. Судя по gstat, запись на mfid11
идёт, и сравнительно активно, однако не на 100%, а вовсе даже 31%
максимум. Видим такую картину:
backup# zpool iostat
capacity operations bandwidth
pool used avail read write read write
------------- ----- ----- ----- ----- ----- -----
backup0 3.40T 7.47T 83 238 1.87M 2.25M
raidz2 3.40T 7.47T 83 238 1.87M 2.25M
mfid0 - - 31 50 863K 231K
mfid1 - - 32 50 887K 231K
mfid10 - - 30 51 895K 233K
mfid7 - - 32 51 887K 231K
mfid9 - - 33 50 906K 230K
mfid2 - - 33 51 904K 232K
mfid3 - - 33 50 900K 231K
mfid4 - - 32 50 875K 231K
replacing - - 0 294 0 456K
mfid5 - - 0 0 0 0
mfid11 - - 0 223 359 456K
mfid5 - - 30 51 844K 231K
mfid8 - - 31 50 877K 231K
mfid6 - - 31 51 871K 232K
------------- ----- ----- ----- ----- ----- -----
На resilvering это как-то было совсем не похоже, по темпам записи.
Возникло предположение, что оно постоянно пытается читать с мертвого
mfid5 и обламывается, а имеющая запись идет от новых данных (на пул
постоянно пишет flow-capture), а не от восстановления старых. Так что
через некоторое время была попытка этот марлезонский балет прекратить,
на что пул отреагировал возвратом как бы в исходное состояние:
backup:~# zpool detach backup0 mfid11
backup:~# zpool status
pool: backup0
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas
exist for
the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
see: http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backup0 DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
mfid0 ONLINE 0 0 0
mfid1 ONLINE 0 0 0
mfid10 ONLINE 0 0 0
mfid7 ONLINE 0 0 0
mfid9 ONLINE 0 0 0
mfid2 ONLINE 0 0 0
mfid3 ONLINE 0 0 0
mfid4 ONLINE 0 0 0
mfid5 UNAVAIL 0 0 0 cannot open
mfid5 ONLINE 0 0 0
mfid8 ONLINE 0 0 0
mfid6 ONLINE 0 0 0
errors: No known data errors
Попытка не пытка, в raidz2 можно жить без двух винтов, а попробуем-ка
отцепить просто отцепить старый диск, какой-нибудь. Облом:
backup# zpool detach backup0 mfid5
cannot detach mfid5: only applicable to mirror and replacing vdevs
После повторения процедуры состояние стало такое же самое:
backup# zpool replace backup0 mfid5 mfid11
backup# zpool status
pool: backup0
state: DEGRADED
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backup0 DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
mfid0 ONLINE 0 0 0
mfid1 ONLINE 0 0 0
mfid10 ONLINE 0 0 0
mfid7 ONLINE 0 0 0
mfid9 ONLINE 0 0 0
mfid2 ONLINE 0 0 0
mfid3 ONLINE 0 0 0
mfid4 ONLINE 0 0 0
replacing UNAVAIL 0 0 0
mfid5 UNAVAIL 0 0 0 cannot open
mfid11 ONLINE 0 0 0
mfid5 ONLINE 0 0 0
mfid8 ONLINE 0 0 0
mfid6 ONLINE 0 0 0
errors: No known data errors
Интересное случилось дальше, а может можно чем спровоцировать resilver,
попробуем scrub:
backup# zpool scrub backup0
cannot scrub backup0: currently resilvering
Однако, никакого resilver там не значится, правда картинка неожиданным
образом изменилась:
backup# zpool status
pool: backup0
state: DEGRADED
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
backup0 DEGRADED 0 0 0
raidz2 DEGRADED 0 0 0
mfid0 ONLINE 0 0 0
mfid1 ONLINE 0 0 0
mfid10 ONLINE 0 0 0
mfid7 ONLINE 0 0 0
mfid9 ONLINE 0 0 0
mfid2 ONLINE 0 0 0
mfid3 ONLINE 0 0 0
mfid4 ONLINE 0 0 0
replacing DEGRADED 0 0 0
mfid5 FAULTED 0 0 0 corrupted data
mfid11 ONLINE 0 0 0
mfid5 ONLINE 0 0 0
mfid8 ONLINE 0 0 0
mfid6 ONLINE 0 0 0
errors: No known data errors
Вот только в zpool iostat -v всё те же цифры в половину мегабайта в
секунду. Даже если он и правда делает resilver, на терабайтном винте это
займет несколько десятков дней. На всякий случай, вот так выглядит дебаг:
backup:~# zdb
backup0
version=14
name='backup0'
state=0
txg=8488139
pool_guid=3203662110110708632
hostid=2734335975
hostname='backup.megaon.ru'
vdev_children=1
vdev_tree
type='root'
id=0
guid=3203662110110708632
children[0]
type='raidz'
id=0
guid=10926470392276615609
nparity=2
metaslab_array=23
metaslab_shift=36
ashift=9
asize=11987935297536
is_log=0
children[0]
type='disk'
id=0
guid=3554682979337240302
path='/dev/mfid0'
phys_path='/dev/mfid0'
whole_disk=0
DTL=78
children[1]
type='disk'
id=1
guid=12222561138215829732
path='/dev/mfid1'
phys_path='/dev/mfid1'
whole_disk=0
DTL=77
children[2]
type='disk'
id=2
guid=10078871439054681929
path='/dev/mfid10'
phys_path='/dev/mfid10'
whole_disk=0
DTL=83
children[3]
type='disk'
id=3
guid=5158340571828097959
path='/dev/mfid7'
phys_path='/dev/mfid7'
whole_disk=0
DTL=62
children[4]
type='disk'
id=4
guid=14517457323476471168
path='/dev/mfid9'
phys_path='/dev/mfid9'
whole_disk=0
DTL=85
children[5]
type='disk'
id=5
guid=5761950946686710234
path='/dev/mfid2'
phys_path='/dev/mfid2'
whole_disk=0
DTL=75
children[6]
type='disk'
id=6
guid=18375872187140888161
path='/dev/mfid3'
phys_path='/dev/mfid3'
whole_disk=0
DTL=74
children[7]
type='disk'
id=7
guid=10902268434831458278
path='/dev/mfid4'
phys_path='/dev/mfid4'
whole_disk=0
DTL=73
children[8]
type='replacing'
id=8
guid=4241732025073413755
whole_disk=0
children[0]
type='disk'
id=0
guid=15246400412550315636
path='/dev/mfid5'
phys_path='/dev/mfid5'
whole_disk=0
DTL=72
children[1]
type='disk'
id=1
guid=2017500714185518779
path='/dev/mfid11'
phys_path='/dev/mfid11'
whole_disk=0
DTL=254
resilvering=1
children[9]
type='disk'
id=9
guid=10547753992167430545
path='/dev/mfid5'
phys_path='/dev/mfid5'
whole_disk=0
DTL=71
children[10]
type='disk'
id=10
guid=14919326740065345884
path='/dev/mfid8'
phys_path='/dev/mfid8'
whole_disk=0
DTL=86
children[11]
type='disk'
id=11
guid=9558623086777819092
path='/dev/mfid6'
phys_path='/dev/mfid6'
whole_disk=0
DTL=69
Ну а вопросы, понятно, классические: кто виноват (что это вообще такое с
ним происходит) и что делать (чтобы починить это, вернуть raidz2 в
нормальное состояние) ?
--
WBR, Vadim Goncharov, NUCL1-RIPE