Вопрос или проблема
Я экспериментирую с тестовой настройкой Proxmox, чтобы немного узнать, и вот что у меня есть и что я сделал:
У меня есть два узла, назовем их A и B. На A я настроил виртуальную машину с локальным хранилищем. Я создал “каталог”, который указывает на раздел на локальном диске, назовем его A-directory. Я установил операционную систему на виртуальную машину, всё работает отлично, всё в порядке.
Я выключил виртуальную машину и попытался сделать офлайн-миграцию на узел B.
Она пожаловалась, что на узле B нет хранилища с именем A-directory.
Поэтому я пошел в центр данных -> хранилище и отредактировал A-directory. Я выбрал узел B в качестве другого варианта в выпадающем списке “Узлы”.
Затем я снова сделал офлайн-миграцию, и это, казалось, сработало. Файл qemu переместился с узла A на узел B.
Проблема в том, что файл qemu переместился в каталог в существующем пуле хранилища, который у меня был на узле B. Он в правильном месте, но это просто каталог, а не точка монтирования.
Когда я пытаюсь запустить виртуальную машину, я получаю ошибку:
TASK ERROR: unable to activate storage 'A-directory' - directory is expected to be a mount point but is not mounted: '/mnt/pve/A-directory'
/mnt/pve/A-directory – это каталог, и в нем находится images/102/vm-102-disk.qcow.
Так что файл на месте, но поскольку Proxmox ожидает, что это будет точка монтирования, а не обычный каталог, возникает вышеуказанная ошибка.
В /etc/pve/storage.cfg на узле B у меня есть следующее:
dir: A-directory
path /mnt/pve/A-directory
content images,snippets,vztmpl,iso,backup,rootdir
is_mountpoint 1
nodes A,B
shared 0
Я пытался изменить is_mountpoint на 0, и тогда он проходит эту проверку при запуске виртуальной машины, но не может найти диск вообще, поэтому не загружается.
В какой-то момент я попытался вручную создать каталог хранилища на узле B с именем “A-directory”, но Proxmox пожаловался, что это имя уже используется. Вот что и натолкнуло меня на мысль добавить другой узел в определение существующего хранилища с самого начала.
Так что мои вопросы:
- Почему Proxmox позволил мне оказаться в этой ситуации.
- Как мне из нее выбраться?
- Каков правильный способ выполнить офлайн-миграцию, если у меня хранилище определено как “каталог”, который на самом деле больше похоже на определение раздела с файловой системой на нем.
Я гуглил и гуглил, и не могу найти много информации о том, как должны работать офлайн-миграции. Данные действительно переместились в правильное место на правильном узле, но Proxmox не дал мне возможности определить целевое хранилище так, как он ожидает. Возможно, я что-то упустил.
Надеюсь, это имеет смысл.
Спасибо за любую помощь, которую вы можете предоставить.
Ответ или решение
Чтобы ответить на ваш вопрос о проблеме миграции виртуальной машины (ВМ) в Proxmox, давайте разберёмся с каждым из поднятых вами моментов и предоставим решение.
1. Почему Proxmox допустил эту ситуацию?
Proxmox позволяет вам редактировать конфигурацию хранилища, но сама миграция требует, чтобы хранилища на обоих узлах были настроены аналогичным образом. Когда вы добавили узел B как поддерживаемый для хранилища A-directory, система ожидала, что это будет точка монтирования, которая будет доступна и имеет ту же файловую структуру, что и на узле A. Если хранилище не было смонтировано на узле B, выполнение операций с хранилищем вызвало бы проблемы, так как Proxmox по умолчанию работает с точки зрения доступности и целостности данных.
2. Как выйти из этой ситуации?
Для решения проблемы можно выполнить следующие шаги:
Шаг 1: Исправьте определение каталога
Прежде всего, убедитесь, что на узле B у вас есть директория, которая соответствует ожидаемому пути. Если A-directory на узле A является точкой монтирования, вы должны идентичное устройство или точку монтирования создать и на узле B:
- Подключитесь к узлу B.
- Убедитесь, что у вас на узле B есть доступ к тому же физическому хранилищу (например, через общую файловую систему, если это необходимо).
- Создайте точку монтирования для A-directory. Например, вы можете использовать команду:
mkdir /mnt/pve/A-directory
- Смонтируйте соответствующее файловое хранилище:
mount /dev/sdXY /mnt/pve/A-directory
(где
/dev/sdXY
– это ваше устройство или файловая система, которая используется на узле B).
Шаг 2: Обновите конфигурацию Proxmox
После того как точка монтирования будет создана и смонтирована, проверьте файл конфигурации storage.cfg
:
cat /etc/pve/storage.cfg
Убедитесь, что в нем прописано:
dir: A-directory
path /mnt/pve/A-directory
content images,snippets,vztmpl,iso,backup,rootdir
is_mountpoint 1
nodes A,B
shared 0
Шаг 3: Загрузите ВМ
Теперь попробуйте запустить вашу ВМ снова. Proxmox должен корректно сформировать запрос к хранилищу и загрузить диск.
3. Как правильно выполнить оффлайн миграцию?
Чтобы выполнить корректную оффлайн миграцию виртуальной машины с использованием хранилища типа "directory", следуйте этим рекомендациям:
- Согласованность хранения: Перед миграцией удостоверяйтесь, что определение хранилища на обоих узлах совпадает. Следуйте процедуре создания хранилища на новом узле до миграции.
- Создание файловой структуры: После создания директории для вашего хранилища на новом узле, создайте исполняемые и системные файлы в той же структуре, где это необходимо.
- Проверка наличия монтирования: Убедитесь, что все точки хранения монтируются корректно и имеют доступ к данным, так как Proxmox требует активного состояния.
Заключение
Ситуация, с которой вы столкнулись, является распространенной при настройке системы виртуализации. Обеспечение консистентности в конфигурациях хранилищ на всех узлах — ключ к успешной миграции. Следуя вышеописанным шагам и рекомендациям, вы сможете успешно решить вашу проблему и избежать подобных ситуаций в будущем. Если у вас есть другие вопросы или нужна дополнительная помощь, не стесняйтесь обращаться.