2011-01-17 10 views
5

Al utilizar Zonificación bajo Solaris, el identificador de anfitrión no cambia por zona, pero también se obtienen (a través de una llamada de función, getzoneid()) un zoneid único para su zona.¿Hay una API en KVM para obtener un ZoneID?

Al usar KVM en Linux, el hostid cambia (se incrementa) por zona, lo que es bastante bueno, pero no es perfecto, puede colisionar con el hostid de otra persona.

Se Existe una API proporcionada por KVM que me permite obtener un zoneid?

Respuesta

3

En cuanto a sus preocupaciones sobre hostids duplicados:

A diferencia de Solaris, el núcleo de Linux no proporciona la llamada "gethostid". En cambio, "gethostid" (utilizado por el programa /usr/bin/hostid) es implemented by glibc, que trata de:

  1. Determinar si existe un archivo fijo (/etc/hostid en mi sistema); si es así, usa el valor de 4 bytes allí;
  2. En su defecto, intenta crear un hostid basado en la dirección IP del sistema;
  3. De no ser así, utiliza un identificador de anfitrión de 0.

Esto significa que si cada sistema tiene una dirección IP única, también tendrá un host único.

Si sus sistemas no tienen direcciones IP únicas, todavía se puede anular el identificador de anfitrión mediante el uso de la llamada a la librería glibc sethostid (que escribe en el archivo leído por el paso (1) del algoritmo de glibc gethostid arriba).

En cuanto a ir a buscar la zoneid de una instancia KVM:

A diferencia de las zonas de Solaris (donde todas las instancias comparten el mismo núcleo), cada instancia de KVM ejecuta su propia copia del kernel de Linux, todos los cuales son ajenos a otras instancias ejecutándose. Hasta donde sé, no existe un equivalente directo de un zoneid de Solaris, ya que cada instancia de Linux no tiene forma de colaborar con otras instancias de Linux.

Si necesita un identificador único para cada instancia KVM correr, algunas opciones son:

  • Sólo conformarse con la dirección IP/identificador de anfitrión, como se describió anteriormente;

  • Al configurar/iniciar sus instancias, genere UUID para el sistema usando uuidgen y guárdelo en un lugar seguro en el sistema de archivos. Dichos UUID generados nunca coincidirán con ningún otro UUID con una probabilidad muy alta;

  • Cuando inicie cada instancia de su sistema, ingrese en la línea de comandos del kernel un identificador único construido manualmente para la instancia (usando el argumento de la línea de comandos KVM -append). Esto se puede obtener más tarde desde /proc/cmdline.

+0

se gana un premio! :-) –

Cuestiones relacionadas