Ситуация выглядит крайне печально, но это не про 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