Короткий ответ
Если rpool не импортируется, задача — увидеть его в zpool import с правильными дисками (/dev/disk/by-id), понять cache/hostid и импортировать существующий пул. zpool create rpool на тех же дисках уничтожит датасеты VM. -f допустим только когда доказано, что пул не импортирован на другом хосте.
С ISO и с установленной системы список устройств должен совпадать по WWN, не по sda.
Симптомы и как отличить
Типичная картина:
- boot падает в initramfs «rpool does not exist»;
- после входа
zpool statusпусто, диски вlsblkесть; zpool importпоказываетrpoolUNAVAIL missing device;- сообщение «in use from other system» / hostid.
Отличия:
| Что видно | Не «не импортируется» | Куда смотреть |
|---|---|---|
| Пул ONLINE DEGRADED | диск vdev | ZFS degraded |
| ОС не грузится, пул ок с ISO | GRUB/initramfs | Proxmox не загружается |
| Пул есть, storage красный | dataset/path | Хранилище |
| Нужны данные VM, пул мёртв | backup | Restore VM |
Возможные причины
- Другой путь устройств: HBA, multipath, исчез
/dev/sd*, cache указывает в никуда. - Не хватает дисков vdev (выпала полка).
- Пул экспортирован/импортирован на другом сервере, hostid.
- Битый
zpool.cacheна корне, который ещё не этотrpool. - Имя не
rpool(отдельный data-pool) — ищете не тот. - Метки затёрты случайным create/wipe — тогда только backup.
Диагностика
pveversion
zpool status
zpool import
zpool import -d /dev/disk/by-id
ls /dev/disk/by-id
ls /etc/zfs/zpool.cache 2>/dev/nullСравните число дисков с ожидаемой топологией mirror/raidz. UNAVAIL + missing — не хватает member, не «сломан cache».
hostid
cat /etc/hostid
dmesg | grep -i zfs | tailС ISO: тот же zpool import -d /dev/disk/by-id. Если с ISO пул виден, с root-диска нет — проблема загрузки модулей/initramfs, не данных.
Решение
Сценарий A. Пул виден, import без -f
zpool import -d /dev/disk/by-id rpool
zpool status rpool
zfs list -r rpoolДля корневого пула на живой системе следуйте штатной последовательности mount rpool/ROOT/pve-1 (часто уже делает zfs-import.target).
Сценарий B. Cache мешает
Импорт с явным -d /dev/disk/by-id обходит мёртвые пути cache. После успеха экспортируйте корректно только если переносите пул; на рабочем pve1 оставьте импортированным и обновите cache штатным импортом.
Сценарий C. «in use from other system»
Это hostid. Если пул точно не импортирован на живом другом PVE (проверьте тот хост!):
zpool import -d /dev/disk/by-id rpoolЕсли отказ из-за hostid и второй хост выключен:
Осознанный -f только после проверки, что второй сервер не держит пул:
# только если второй хост гарантированно не импортировал rpool
zpool import -f -d /dev/disk/by-id rpoolДвойной import — порча.
Сценарий D. Missing device
Верните диск/полку. Import degraded возможен, если топология позволяет (mirror). Не собирайте пул заново из оставшихся дисков командой create.
Сценарий E. Перенос пула на новый сервер
zpool export на старом (если он ещё жив), затем import на новом по by-id. Не копируйте zpool.cache как единственный метод.
Разбор вывода import и workdir ISO
zpool import печатает config: с ONLINE/UNAVAIL. Если не хватает одного диска mirror — import на ISO с degraded возможен и часто нужен, чтобы спасти rpool/ROOT. Если не хватает диска в stripe — import не вернёт данные.
zpool import -d /dev/disk/by-id -o readonly=on rpool
zfs get mounted,mountpoint,canmount rpool/ROOT/pve-1
findmnt | grep rpoolНа ISO не монтируйте dataset в / живой системы «поверх». Для chroot: import, mount в /mnt, bind /dev /proc /sys, затем grub-install. После работы zpool export rpool до reboot с диска — иначе «pool in use».
hostid на Debian/PVE берётся из /etc/hostid или gethostid. Клон VM-гипервизора или одинаковый golden image двух серверов даёт коллизию hostid без «второго импорта». Тогда -f на одном из них обязателен только после гарантии exclusive import.
Не копируйте zpool.cache с другого кластера: там чужие GUID пулов.
Как проверить, что проблема устранена
zpool status rpool
zfs list -r rpool
pvesm status
qm config 101Пул ONLINE или ожидаемый DEGRADED при сознательно отсутствующем диске. Датасеты на месте (rpool/data/... или как у вас заведено). Storage ZFS в PVE active. После ребута pve1 пул импортируется сам. VM 101, если её диски на этом пуле, стартует.
Если zpool import показывает два пула с похожими именами, импортируйте по numeric id из первой колонки, не по строке rpool «на глаз». Неверный пул на чужих дисках в той же корзине — отдельный инцидент.
Если не помогло
- Import только readonly: сначала здоровье vdev, degraded.
- Имя
rpoolзанято другим пулом:zpool importпокажет id; импорт по numeric id. destroyedpool в listing: это метка уничтожения; не import как обычный, смотрите backup.- Корневой пул импортируется с ISO, система с диска нет: чините initramfs/GRUB, не данные.
- Подозрение на затёртые метки: остановитесь, снимите образы дисков.
Профилактика
- Всегда by-id, документированные WWN.
- Не таскать SAS-диски между серверами без export.
- Зеркало
rpool, backup VM вне пула. - После замены HBA — проверка import до продакшен-нагрузки.
- Чеклист перед изменениями.
FAQ
Чем zpool import rpool отличается от import -a?
-a пытается все. На хосте с чужими дисками опасно. Импортируйте имя, которое должны.
Нужен ли -o readonly=on?
Для осмотра с ISO — да, отличная первая попытка. Для возврата в прод нужен обычный import.
Можно ли импортировать два хоста один data-pool?
Нет, обычный ZFS не кластерная ФС. Для VM используйте replication/shared SAN, не двойной import.
zpool.cache удалить?
Не как первый шаг на работающем корне. Сначала import -d. Удаление cache без понимания сорвёт автоимпорт других пулов.
Import успешен, /etc/pve пустой?
pmxcfs не на rpool/data. Чините pve-cluster отдельно, диски VM уже могут быть живы.