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

Ответить