Назад | Перейти на главную страницу

Как подключить существующий диск ZFS к виртуальной машине Proxmox

У нас есть установка Proxmov HV, подключенная к 2 ящикам FreeNAS. Мы используем интерфейс FreeNAS ZFS поверх iSCSI для представления zvols как томов для виртуальных машин Proxmox.

Мы включили моментальные снимки на стороне FreeNAS и реплицируем блоки NAS друг с другом.

Что мы сейчас пытаемся сделать, так это подключить существующий снимок к виртуальной машине Proxmox, чтобы выполнить восстановление.

Во-первых, вам понадобится консольный доступ к блоку FreeNAS, блоку Promox HV (при запущенной виртуальной машине) и виртуальной машине. Вам также понадобится пользовательский интерфейс для FreeNAS и, возможно, Proxmox.

Вам нужно будет ввести свои собственные пути и имена пула.

В сеансе SSH на NAS:

  1. Удерживайте снимок, который хотите. Это гарантирует, что он не будет случайно удален.

    sudo zfs hold keep tank/tank-iscsi/*snapshot-name*

  2. Если вам нужно получить список снимков, эта команда может помочь

sudo zfs list -t snapshot -o name | grep *vm-id*

  1. Если вы используете исходный NAS в качестве источника (Primary NAS)

    sudo zfs clone tank/tank-iscsi/*snapshot-name* tank/tank-iscsi/*cloned-snapshot-name*

  2. Если вы используете реплицированный NAS в качестве источника (реплицированный NAS)

    sudo zfs clone tank/replicated/tank-iscsi/*snapshot-name* tank/replicated/tank-iscsi/*cloned-snapshot-name*

NB: путь / имя zvol должно быть меньше 67 символов и не может быть доступно только для чтения. Это может потребовать изменения родительского набора данных.

В интерфейсе FreeNAS:

  1. Перейдите к Sharing->iSCSI->Extents->Add Extent
  2. Добавьте новый экстент:
    • Название:
    • Первичный NAS: tank/tank-iscsi/*cloned-snapshot-name*
    • Реплицированный NAS: tank/replicated/tank-iscsi/*cloned-snapshot-name*
    • Устройство: Выбрать имя-клонированного снимка
  3. Перейдите к Sharing->iSCSI->Associated Targets->Add Target
    • Выберите правильное хранилище. (Используем ту же самую цель для танка)
    • Введите идентификатор LUN, который не повлияет на будущие добавления (например, большое число)
    • Выберите только что созданный экстент

NB: это можно сделать на любом из NAS из-за репликации. Если используется реплицированная цель, убедитесь, что ReadOnly имеет значение false и репликация выключена. Возможно, вам потребуется настроить новую цель iscsi хранилища в Proxmox для пути к реплицированной цели iscsi.

В SSH на Proxmox HV (https://johnkeen.tech/proxmox-physical-disk-to-vm-only-2-commands/):

  1. Убедитесь, что zvol виден Proxmox:

    • Первичный NAS: pvesm list tank-zfs-iscsi
    • Реплицированный NAS: pvesm list tank-zfs-iscsi-replicated
  2. Добавьте диск к ВМ:

    • Первичный NAS: qm set *vm-id* -virtio1 tank-zfs-iscsi:*cloned-snapshot-name*
    • Реплицированный NAS: qm set *vm-id* -virtio1 tank-zfs-iscsi-replicated:*cloned-snapshot-name*

В ВМ (https://sontsysadmin.blogspot.com/2017/09/mounting-lvm-with-same-pv-lv-vg-names.html):

  1. Убедитесь, что диск присутствует (скорее всего, это будет vbb или vbc)
  2. Измените имя тома LVM
  3. Установите том
vgimportclone --basevgname recover /dev/vdX3
lvs
vgchange -a y  recover
ls /dev/recover/
mkdir /mnt/recover
mount /dev/recover/ubuntu-lv /mnt/recover/
ls /mnt/recover/

Если вы получите следующую ошибку:

 $ vgchange -ay recover
  device-mapper: create ioctl on recover-ubuntu--lv LVM-3jIHEjL7LvdGGd4BP08N failed: Device or resource busy 

Попробуйте эти команды для сброса диска:

dmsetup ls
    recover-ubuntu--lv      (253:1)
    ubuntu--vg-ubuntu--lv   (253:0)
dmsetup remove recover-ubuntu--lv

Повторить $ vgchange -ay recover

Убираться

На ВМ:

umount /mnt/recover
lvchange -an recover
vgchange -an recover

В интерфейсе Proxmox

  • Отсоедините диск. Если моментальный снимок больше не требуется, его можно удалить (примечание: эту операцию нельзя отменить, если она исчезла, она исчезнет)

На NAS SSH:

  • Освободите удержание снимка:

sudo zfs release keep Slow1/slow1-iscsi/*snapshot-name*