[Solaris] Развалился zpool mirror при перестроении

Ситуация выглядит крайне печально, но это не про ZFS. Даже если у вас такая ситуация случилась, просто дождитесь окончания resilvering’a и дальше можно следовать за подсказками из статьи. И так, после окончания resilvering’a пул перешёл в состояние suspended:

# zpool status rpool
  pool: rpool
 state: SUSPENDED
status: One or more devices are unavailable in response to IO failures.
        The pool is suspended.
action: Make sure the affected devices are connected, then run 'zpool clear' or 
        'fmadm repaired'.
        Run 'zpool status -v' to see device specific details.
   see: http://support.oracle.com/msg/ZFS-8000-HC
  scan: resilvered 4.90M in 34m11s with 233252 errors on Mon Sep 11 08:24:46 2017

config:

        NAME              STATE     READ WRITE CKSUM
        rpool             SUSPENDED  228K     0     0
          mirror-0        DEGRADED  490K     0     0
            replacing-0   DEGRADED  490K     0     0
              c9t0d0/old  OFFLINE      0     0     0
              c3t0d0      ONLINE       0     0     0
            c3t1d0        UNAVAIL      0     0     0

Пробуем разные методы, удалить сбойные диски или что-то сделать с пулом:

# zpool remove rpool c9t0d0
cannot remove c9t0d0: no such device in pool
# zpool remove rpool c9t0d0/old
cannot remove c9t0d0/old: log device has unplayed intent logs
# zpool export rpool
cannot export 'rpool': pool I/O is currently suspended
# zpool import rpool
cannot import 'rpool': a pool with that name is already created/imported,
and no additional pools with that name were found
# zpool export -f rpool
cannot export 'rpool': pool I/O is currently suspended

Не выходит. Посмотрим на fmadm:

# fmadm faulty

и находим там информацию о нашем пуле. Помечаем её исправной:

# fmadm repaired zfs://pool=8e5ff5a927d0f403/pool_name=rpool
fmadm: recorded repair to zfs://pool=8e5ff5a927d0f403/pool_name=rpool

После этого пул начинает опять перестраиваться:

# zpool status
  pool: rpool
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
        continue to function in a degraded state.
action: Wait for the resilver to complete.
        Run 'zpool status -v' to see device specific details.
  scan: resilver in progress since Mon Sep 11 08:41:43 2017
    64.8G scanned
    68.3M resilvered at 72.1M/s, 0.00% done, 10m20s to go
config:

        NAME              STATE     READ WRITE CKSUM
        rpool             DEGRADED     0     0     0
          mirror-0        DEGRADED     0     0     0
            replacing-0   DEGRADED     6     0     0
              c9t0d0/old  OFFLINE      0     0     0
              c3t0d0      ONLINE       0     0     0  (resilvering)
            c3t1d0        DEGRADED     0     0     0  (resilvering)

errors: No known data errors

По окончанию, смотрим, что нашло:

# zpool status rpool
  pool: rpool
 state: DEGRADED
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.
        Run 'zpool status -v' to see device specific details.
   see: http://support.oracle.com/msg/ZFS-8000-8A
  scan: resilvered 43.3G in 1h25m with 57 errors on Mon Sep 11 10:07:28 2017

config:

        NAME              STATE     READ WRITE CKSUM
        rpool             DEGRADED    57     0     0
          mirror-0        DEGRADED    57     0     0
            replacing-0   DEGRADED   435     0     0
              c9t0d0/old  OFFLINE      0     0     0
              c3t0d0      ONLINE       0     0     0
            c3t1d0        ONLINE      57     0     0

errors: 38 data errors, use '-v' for a list

Ага, 38 файлов. Смотрим:

# zpool status -v pool
…
errors: Permanent errors have been detected in the following files:

        rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:/opt/0.2.1-b6-RC/logs/storage.log.6
        rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:/opt/0.2.3-1-RELEASE/logs/storage.log.4
        rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:/opt/0.2.1-b6-RC/activemq-data/localhost/db-12.log
        rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:/opt/0.2.0-2-RELEASE/logs/storage.log.6
...

Ну что ж, удаляем эти файлы. В любом случае просто (существуют методы поблокового восстановления, но в моём случае эти данные оказались логами + часть системных библиотек) так их не восстановить. Запускаем опять zpool status -v и выдим:

errors: Permanent errors have been detected in the following files:
...
rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:<0x1031b>
rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:<0x10420>
rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:<0x10634>
rpool/VARSHARE/zones/zone/rpool/ROOT/solaris:<0x1083a>

Да, файлов нет, но метаинформация осталась. Делам zpool export/import и смотрим:

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: resilvered 277M in 1m16s with 0 errors on Mon Sep 11 10:59:48 2017

config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c3t0d0  ONLINE       0     0     0
            c3t1d0  ONLINE       0     0     0

errors: No known data errors

Поскольку пул был системным (а я работал с liveCD) то на всякий случай заново установим загрузчик:

# bootadm install-bootloader -f -P rpool

После этих действий, ОС загрузилась. Я выполнил pkg fix —accept, и действительно, он исправил удалённые мною системные библиотеки. Причём пришлось выполнять 2-ды, так как с первого раза не всё исправило (хотя написало, что всё).
Если ОС у вас не грузится, то грузитесь с liveCD, импортируйте пул, смонтируйте его и выполните:

# pkg -R /path/to/pool/root fix --accept

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *