La función multiusuario de Cuttlefish permite que tu máquina anfitrión inicie varios dispositivos virtuales de invitado con una sola invocación de inicio.
Estas máquinas virtuales de Cuttlefish pueden compartir algunos de los recursos del disco host, lo que te permite ahorrar espacio. Cada máquina virtual obtiene una superposición de disco distinta que cubre las particiones de Android (como super
, userdata
y boot
). Cualquier modificación que se haga en el disco de invitado se ubica en una superposición de disco específica de invitado, lo que le da a cada máquina virtual de Cuttlefish una vista de copia en escritura de las particiones del disco. A medida que cada dispositivo virtual escribe más datos en su vista del disco, aumenta el tamaño de los archivos superpuestos en el disco de host, dado que capturan el delta entre el estado original y el actual.
Los archivos superpuestos se pueden restablecer para que el disco de Cuttlefish vuelva a su estado original. Este proceso se conoce como Powerwash.
Números de instancia
Los dispositivos Cuttlefish crean y utilizan recursos en el host vinculado a su número de instancia. Por ejemplo, una conexión adb
se expone a través de un socket del servidor del TCP en el puerto 6520
para el dispositivo Cuttlefish que tiene el número de instancia 1
.
Cuando se inician varias instancias, se crea un socket del servidor del TCP en el puerto 6520
para el primer dispositivo, 6521
para el segundo y, para cada dispositivo adicional, se aumenta el número de puerto.
Modificar la cantidad máxima de instancias compatibles
Los recursos del host, como los dispositivos de la red TAP, se deben asignar con antelación para las máquinas virtuales Cuttlefish. De forma predeterminada, el paquete cuttlefish-base de Debian aprovisiona recursos para los números de instancia entre 1
y 10
.
Esto se puede cambiar si modificas num_cvd_accounts
en /etc/default/cuttlefish-host-resources
y reinicias el servicio cuttlefish-host-resources
mediante el siguiente comando:
sudo systemctl restart cuttlefish-host-resources
Configuraciones canónicas
Las configuraciones canónicas representan la configuración de dispositivos Cuttlefish en formato JSON. Puedes crear archivos JSON de configuración canónica para describir la configuración de varios dispositivos Cuttlefish en una situación de varios inquilinos.
A continuación, se describe el formato que se usa para los archivos JSON de configuración canónicos (reemplaza los marcadores de posición por las configuraciones del dispositivo).
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
El siguiente es un ejemplo de archivo de configuración de una configuración con dos dispositivos, un teléfono y un wearable:
{
"instances": [
{
"@import": "phone",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "OPTIONAL",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
}
},
{
"@import": "wearable",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "REQUIRED",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_gwear_x86-userdebug"
}
}
]
}
En esta tabla, se describen los elementos usados en la configuración de ejemplo con dos dispositivos:
Elemento | Tipo | Descripción |
---|---|---|
instances |
Arreglo | Es un array de objetos JSON, cada uno de los cuales describe un solo dispositivo en el grupo de dispositivos multiusuario que se lanzará. |
@import |
String | Indica el tipo de dispositivo y establece valores predeterminados para su configuración. Los tipos de dispositivos compatibles son phone y wearable . |
vm |
Objeto | Especifica las propiedades que se aplican al entorno de la VM específico de la instancia del dispositivo. |
memory_mb |
Número | Es la cantidad de memoria que se asignará a una VM específica, en megabytes. |
setupwizard_mode |
String | Especifica si se ejecuta el asistente de configuración del dispositivo para el usuario en la primera ejecución del dispositivo. Las opciones admitidas para el modo de asistente de configuración son DISABLED , OPTIONAL y REQUIRED . |
cpus |
Número | La cantidad de CPU virtuales asignadas a la VM. |
disk |
Objeto | Especifica las propiedades relevantes para ubicar los artefactos del sistema de archivos que se usan en la ejecución de una sola instancia de VM. |
default_build |
String | Ruta del sistema de archivos local a una carpeta que contiene una imagen de dispositivo virtual Cuttlefish. |
Para obtener más ejemplos de archivos de configuración distribuidos con cvd
, consulta la carpeta cvd_test_configs
en el árbol de código de Cuttlefish.
Cómo controlar instancias de multiusuario
En esta sección, se describe cómo crear y destruir dispositivos en una situación multiusuario. Puedes iniciar varios dispositivos Cuttlefish con las siguientes opciones:
- Configuración canónica: Inicia configuraciones personalizadas para cada dispositivo con un archivo de configuración JSON que describe la lista de instancias que se iniciarán.
- Una sola imagen de invitado: Inicia varios dispositivos desde una sola imagen de invitado.
Inicia varias VMs desde la configuración canónica
Para crear varias VMs con una configuración canónica que describa la
situación de varios inquilinos, invoca el comando cvd create
con el prefijo de marca --config_file=
de la siguiente manera:
cvd create --config_file=CONFIG_FILE
El siguiente es un ejemplo de invocación que hace referencia a un archivo de configuración canónico llamado /etc/phone.json
.
cvd create --config_file=/etc/phone.json
Inicia varias VMs a partir de una sola imagen de invitado
Para iniciar varios dispositivos de Cuttlefish con una sola imagen de invitado, usa la marca --num_instances=N
, donde N es la cantidad de dispositivos que se iniciarán. De forma predeterminada, los dispositivos se inician desde el número de instancia 1
.
cvd create --num_instances=N
Para cambiar ese número de inicio, realiza una de las siguientes acciones:
Agrega la marca
--base_instance_num=N
, con N como primer número de instancia.cvd create --base_instance_num=N
Inicia Cuttlefish con una cuenta de usuario que coincida con
vsoc-NN
(NN es el número de instancia base en formato de dos dígitos). Por ejemplo, para iniciar Cuttlefish con la cuenta de usuariovsoc-01
, ejecuta lo siguiente:cvd create --base_instance_num=1
Cómo detener dispositivos
Para detener todos los dispositivos que se iniciaron con la última invocación de cvd create
, ejecuta lo siguiente:
cvd stop
Para reiniciar dispositivos que se detuvieron, ejecuta lo siguiente:
cvd start
Para quitar un dispositivo por completo del sistema, ejecuta lo siguiente:
cvd remove