Устанавливаем фиксированный UUID для всех дисков в виртуальной машине., Proxmox Виртуальная Среда
RBretzel
Guest
0
24.07.2024 16:42:00
Ну вот, установил я K8s (Kubernetes) с несколькими QEMU дисками в Ubuntu VM. Вся проблема в том, что после перезагрузки VM диски получают другие UUID, чем те, что были во время установки. В итоге K8s больше не запускается. В конфиге (/etc/pve/qemu-server/<VMID>.conf) можно указать только один UUID. Если я правильно понял, этот UUID задается только для загрузочного диска (ubuntu). Есть ли способ задать UUID для всех дисков? Может, есть какой-то параметр, который гарантирует, что всем дискам будет присвоен UUID, который они получили при первом запуске? От любых решений буду рад.
LnxBil
Guest
0
25.07.2024 17:20:00
Насколько я знаю, изменить UUID диска в вашей ВМ из PVE нельзя. UUID, который вы можете установить, — это системный UUID, а не UUID файловой системы.
RBretzel
Guest
0
26.07.2024 09:38:00
Окей, во-первых, спасибо за ответ. Я правильно понимаю, что нет возможности настроить диски SCSI 1-9 (см. скриншот), чтобы они всегда имели одинаковый UUID при загрузке? Мне было бы достаточно, чтобы UUID просто не менялся при загрузке. В файле /etc/pve/qemu-server/<VMID>.conf я могу задать UUID для загрузочного диска (scsi0), и он сохраняется при загрузке. Тогда я отправлю это как запрос на изменение. Можете ли мне кто-нибудь сказать, как и где это можно сделать?
LnxBil
Guest
0
26.07.2024 10:57:00
Я не понимаю, что должно быть UUID для диска. Вы имеете в виду WWN? Не могли бы вы попробовать объяснить/показать, что именно вы имеете в виду, что меняется внутри вашей гостевой системы? Вы можете, конечно, присвоить диску серийный номер, который можно использовать для генерации UUID внутри гостевой системы? Просто добавьте его как ,serial=1234 ( source ) Запросы на добавление функций отправляйте в трекер ошибок.
fiona
Guest
0
26.07.2024 11:04:00
Кстати, WWN можно настроить через CLI, но он не отображается в UI, например, команда: qm set 118 --scsi1 lvmthin:vm-118-disk-0,wwn=0x5566777799999999
LnxBil
Guest
0
26.07.2024 11:06:00
Это даже лучше!
RBretzel
Guest
0
26.07.2024 11:24:00
Спасибо за предложение. Протестирую и сообщу, если это решило мою проблему. С уважением, Райнер.
silverstone
Guest
0
08.06.2025 18:01:00
Можно также установить serial=<max-20-characters> согласно документации (так же, как объяснила @fiona), но для этого потребуется кастомный UDEV Rule в вашей VM. Я немного поиграл с разными типами шин (SATA, IDE, SCSI, VIRTIO, USB) и, кажется, это охватывает большинство случаев (хотя я и не тестировал *столько*):
``` # ******************************************************************************************************************************** # **ВАЖНО**: Поддержка удаления символических ссылок была добавлена в Systemd PR #26081 (слито 2023-01-17) # На системах с более старыми пакетами (например, Debian Stable) соответствующие строки могут потребоваться отключить # ********************************************************************************************************************************
# Добавить правило символической ссылки для SCSI устройств SUBSYSTEM=="block", ENV{ID_BUS}=="scsi", ENV{DEVTYPE}=="disk", ENV{ID_SCSI_SERIAL}=="?*", SYMLINK+="/dev/disk/by-id/scsi-$env{ID_VENDOR}_$env{ID_MODEL}_$env{ID_SCSI_SERIAL}"
# Добавить правило символической ссылки для USB устройств SUBSYSTEM=="block", ENV{ID_BUS}=="usb", ENV{DEVTYPE}=="disk", ENV{ID_USB_SERIAL_SHORT}=="?*", SYMLINK+="/dev/disk/by-id/usb-$env{ID_VENDOR}_$env{ID_MODEL}_$env{ID_USB_SERIAL_SHORT}"
# Добавить правило символической ссылки для SATA устройств SUBSYSTEM=="block", ENV{ID_BUS}=="ata", ENV{ID_ATA_SATA}=="1", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL_SHORT}=="?*", SYMLINK+="/dev/disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL_SHORT}"
Я не чувствовал, что нужно удалять что-то другое, кроме "неправильного" SCSI Serial, который не соответствует тому, что можно установить из CLI. Но, конечно, вы можете настроить это дальше, если столкнетесь с каким-то другим "особым" случаем.
Несколько полезных замечаний:
Префиксы для информации udevadm [ >)
Мониторинг загрузки правил (повторная загрузка из другой оболочки) udevadm monitor --subsystem-match="scsi"
Получение свойств устройства udevadm info -p 'block/sdb' --query all --tree
Или даже больше информации udevadm info -p 'block/sdb' --query all --tree --root --attribute-walk
Для использования в скриптах udevadm info -p 'block/sdb' --query all --tree --root --attribute-walk --no-pager
Имитация правил udevadm test /dev/sdb
EDIT 1: Это, конечно, требует, чтобы вы установили серийный номер (и потенциально WWN) из CLI, например: ``` qm set <vmid> --scsiX local-zfs:vm-<vmid>-disk-<diskid>,serial=<max-20-characters>,wwn=<16-hex-digits> ``` Где вы можете сгенерировать 2 параметра со следующими командами:
``` # Генерировать случайный серийный номер serial_number=$(uuidgen | sed -E "s|-||g" | cut -c 1-20) ```
И:
``` # Генерировать случайный номер WWN wwn_number=$(uuidgen --hex | sed -E "s|-||g" | cut -c 1-16) ```
EDIT 2: Обновлен скрипт для также создания символических ссылок для разделов
EDIT 3: Обновлен скрипт для проверки, установлен ли раздел, прежде чем пытаться создать символическую ссылку раздела