4.0 KiB
TrueNAS — Восстановление ZFS пула при kernel panic (space map corruption)
Создано 2026-08-17. Зеркало скила
truenas-zfs-panic-recovery.
Когда это нужно
Пул TrueNAS не импортируется и вызывает kernel panic / boot loop:
panic - not syncing: zfs: adding existent segment to range tree
ZFS: space_map_load / metaslab_activate / zio_dva_allocate → zfs_panic_recover
Это повреждение space map (метаданных ZFS). НЕ обязательно потеря данных, но структура пула повреждена. Read-write импорт паникует, т.к. читает битые space maps.
Ключевая идея
Read-only import НЕ читает space maps и НЕ паникует (mav/iXsystems: "read-only imports don't even read space maps"). Стратегия: обойти панику → readonly-импорт → выгрузить данные → пересоздать пул.
Пул НЕ «чинится» — только выгрузка данных и пересоздание.
Проверенные шаги (2026-08-17, TrueNAS SCALE 24.10)
1. Загрузка без паники — единственный рабочий способ:
Физически отключить все диски проблемного пула → boot-pool поднимается, паники нет → дошли до shell/WebUI → воткнуть диски обратно (горячо) в те же порты.
Что НЕ работает (проверено):
- Тюнабели в GRUB
zfs.zfs_recover=1 zfs.zil_replay_disable=1— не помогли rd.break=pre-mountиrd.break— не помоглиzfsforce=1— не помогает
2. Readonly-импорт (под root):
/usr/sbin/zpool import -o readonly=on RED_2TB
→ Import was successful, but unable to mount some datasets — это нормально/ожидаемо.
3. Монтирование datasets вручную (root ФС readonly):
Ошибка cannot mount '/RED_2TB': failed to create mountpoint: Read-only file system — из-за READONLY корневой ФС. Монтируй вручную в записываемую точку:
zfs list -r RED_2TB # список datasets (работает без mount)
zfs set mountpoint=/mnt/rec RED_2TB # или mount -o
4. Выгрузка:
rsync -av --ignore-existing --ignore-errors /<pool>/ <резервный-диск>/
Лучше в tmux. Затем zpool destroy + пересоздать пул.
Подводные камни
zpoolне в PATH для zsh-юзеров (command not found) — использовать/sbin/zpoolили/usr/sbin/zpool.zpool importтребует root (some devices require root privileges).truenas_adminНЕ root, sudo просит пароль.zpool import -n RED_2TB— нелегальный синтаксис без-F(-nтолько с-F).- НЕ повторять
import -Fнастойчиво — углубляет риск. Сначала readonly. zpool import -f -F -XНЕ работает для этой паники (TrueNAS forum).- Данные могут показать
Permission deniedесли сами данные повреждены (в тяжёлых случаях — частичное восстановление). - Проверить RAM — на non-ECC (P8H77-V) повреждение space map часто от плохой памяти. memtest.
- Буквы дисков shift-аются — сверять по by-id/модели, не по буквам.
Root cause
adding existent segment to range tree = openzfs #15030 / #13483. Триггер: члены пула отвалились при перетыкании/перезагрузке, либо RAM corruption (non-ECC).