ZFS: I/O failure on vdev / pool checksum error — Восстановление пула OpenZFS
Архитектура ошибки и симптомы сбоя
Критический статус «ZFS: I/O failure on vdev / pool checksum error detected» указывает на то, что подсистема OpenZFS (ZFS on Linux) зафиксировала сбои ввода-вывода (READ/WRITE errors) или несовпадение 256-битных контрольных сумм (Fletcher4/SHA256) блоков на конкретном виртуальном устройстве (vdev). Пул переходит в статус DEGRADED или FAULTED при превышении допустимого числа отказов дисков.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| READ / WRITE Error | I/O Failure | Аппаратная невозможность прочитать или записать блок данных на физический диск. |
| CKSUM Error | Checksum Mismatch | Искажение данных при чтении (Silent Data Corruption / Bit Rot). |
| Pool Status | DEGRADED / FAULTED | Пул работает без избыточности (DEGRADED) либо полностью остановлен (FAULTED). |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка детального статуса пула OpenZFS
# Проверка состояния пула и списка сбойных устройств:
sudo zpool status -v <POOL_NAME>
# Просмотр списка поврежденных файлов:
zpool status -v | grep -A 10 "errors: Permanent errors"Сценарий 2: Запуск самоисцеления данных (ZFS Scrub)
Если пул собран в mirror, raidz1, raidz2 или raidz3, запустите процесс восстановления избыточности:
# Запуск фонового восстановления:
sudo zpool scrub <POOL_NAME>
# Мониторинг прогресса:
sudo zpool status <POOL_NAME>Сценарий 3: Замена сбойного накопителя в пуле (Hot-Swap)
# 1. Перевод сбойного диска в статус offline:
sudo zpool offline <POOL_NAME> /dev/disk/by-id/<OLD_DISK_ID>
# 2. Физическая замена накопителя и запуск resilvering:
sudo zpool replace <POOL_NAME> /dev/disk/by-id/<OLD_DISK_ID> /dev/disk/by-id/<NEW_DISK_ID>
# 3. Сброс счетчиков ошибок после завершения resilver:
sudo zpool clear <POOL_NAME>Не экспортируйте пул вслепую! Специалисты ITSTM выполнят бережное восстановление импорта пула со старыми транзакциями (zpool import -F -X) и спасут данные.
Частые вопросы (FAQ)
Что делать, если zpool status показывает постоянные ошибки CKSUM, но READ/WRITE = 0?
Ошибки исключительно в столбце CKSUM почти всегда указывают на дефекты оперативной памяти (non-ECC RAM) или повреждение контроллера SAS/SATA/кабелей, искажающих данные в процессе передачи.
Как принудительно смонтировать поврежденный пул ZFS в режиме Read-Only?
Используйте команду: zpool import -o readonly=on -f -F <POOL_NAME>. Флаг -F пытается откатить последние поврежденные транзакции до консистентного состояния.