Есть ли API под KVM для получения ZoneID? - PullRequest
5 голосов
/ 17 января 2011

При использовании Zoning под Solaris, хостид не меняется по зонам, но вы также получаете (посредством вызова функции getzoneid ()) уникальный zoneid для вашей зоны.

Используя KVM под Linux,hostid изменяется (увеличивается) по зонам - что довольно хорошо, но не идеально - вы можете столкнуться с кем-то еще elti hostid.

Есть ли API, предоставленный KVM, который позволяет мне получить zoneid?

1 Ответ

3 голосов
/ 31 января 2011

Относительно ваших опасений по поводу дублирующих хостов:

В отличие от Solaris, ядро ​​Linux не обеспечивает вызов gethostid. Вместо этого «gethostid» (используемый программой /usr/bin/hostid) реализуется glibc , который пытается:

  1. Определите, существует ли фиксированный файл (/etc/hostid в моей системе); если да, то использует 4-байтовое значение там;
  2. Если этого не сделать, попытается создать хост на основе IP-адреса системы;
  3. Если это не так, используется хост 0.

Это означает, что если каждая система имеет уникальный IP-адрес, она также будет иметь уникальный хост.

Если ваши системы не имеют уникальных IP-адресов, вы все равно можете переопределить хост, используя sethostid библиотечный вызов glibc (который записывает в файл, считанный с помощью шага (1) алгоритма gethostid glibc выше). 1024 *

Относительно получения zoneid экземпляра KVM:

В отличие от зон Solaris (где все экземпляры совместно используют одно и то же ядро), каждый экземпляр KVM запускает свою собственную копию ядра Linux, и все они не обращают внимания на другие запущенные экземпляры. Насколько мне известно, прямого эквивалента zoneid Solaris не существует, поскольку каждый экземпляр Linux не имеет возможности сотрудничать с другими экземплярами Linux.

Если вам нужен уникальный идентификатор для каждого работающего экземпляра KVM, некоторые параметры:

  • Просто установить IP-адрес / хост, как описано выше;

  • При настройке / загрузке ваших экземпляров сгенерируйте UUID для системы, используя uuidgen, и сохраните его в безопасном месте в файловой системе. Такие сгенерированные UUID никогда не будут совпадать с другими UUID с очень высокой вероятностью;

  • При загрузке каждого экземпляра вашей системы передайте в командной строке ядра созданный вручную уникальный идентификатор для экземпляра (используя аргумент командной строки -append KVM). Это можно получить позже от /proc/cmdline.

...