Mit Cuttlefish-Multi-Tenancy können auf Ihrem Hostcomputer mehrere virtuelle Gastgeräte mit einem einzigen Startaufruf gestartet werden.
Diese mehreren virtuellen Cuttlefish-Maschinen können einige der Host-Festplattenressourcen gemeinsam nutzen, sodass Sie Festplattenspeicher sparen können. Jede VM erhält ein eigenes Laufwerk-Overlay für die Android-Partitionen (z. B. super
, userdata
, boot
). Alle Änderungen am Gastlaufwerk werden in einem gastspezifischen Laufwerk-Overlay gespeichert. So erhält jede Cuttlefish-VM eine Copy-on-Write-Ansicht ihrer Laufwerkspartitionen. Wenn jedes virtuelle Gerät mehr Daten in seine Ansicht der Festplatte schreibt, werden die Overlay-Dateien auf der Hostfestplatte größer, da sie die Differenz zwischen dem ursprünglichen und dem aktuellen Zustand erfassen.
Die Overlay-Dateien können zurückgesetzt werden, um die Cuttlefish-Festplatte in ihren ursprünglichen Zustand zurückzuversetzen. Dieser Vorgang wird als Zurücksetzen auf die Werkseinstellungen bezeichnet.
Instanznummern
Cuttlefish-Geräte erstellen und nutzen Ressourcen auf dem Host, die an ihre Instanznummer gebunden sind. Beispielsweise wird eine adb
-Verbindung über einen TCP-Serversocket am Port 6520
für das Cuttlefish-Gerät mit der Instanznummer 1
bereitgestellt.
Wenn mehrere Instanzen gestartet werden, wird für das erste Gerät ein TCP-Serversocket an Port 6520
, für das zweite Gerät an Port 6521
und für jedes weitere Gerät ein inkrementierter Port erstellt.
Maximale Anzahl unterstützter Instanzen ändern
Hostseitige Ressourcen wie TAP-Netzwerkgeräte müssen für Cuttlefish-VMs vorab zugewiesen werden. Standardmäßig stellt das Debian-Paket cuttlefish-base Ressourcen für Instanznummern von 1
bis 10
bereit.
Dies kann durch Ändern von num_cvd_accounts
in /etc/default/cuttlefish-host-resources
und Neustarten des cuttlefish-host-resources
-Dienstes mit dem folgenden Befehl geändert werden:
sudo systemctl restart cuttlefish-host-resources
Kanonische Konfigurationen
Kanonische Konfigurationen stellen die Konfiguration für Cuttlefish-Geräte im JSON-Format dar. Sie können kanonische Konfigurations-JSON-Dateien erstellen, um die Konfiguration mehrerer Cuttlefish-Geräte in einem Multi-Tenant-Szenario zu beschreiben.
Im Folgenden wird das Format beschrieben, das für kanonische Konfigurations-JSON-Dateien verwendet wird. Ersetzen Sie Platzhalter durch Gerätekonfigurationen.
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
Im Folgenden finden Sie ein Beispiel für eine Konfigurationsdatei für eine Einrichtung mit zwei Geräten, einem Smartphone und einem Wearable:
{
"instances": [
{
"@import": "phone",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "OPTIONAL",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_x86_64_only_phone-userdebug"
}
},
{
"@import": "wearable",
"vm": {
"memory_mb": 8192,
"setupwizard_mode": "REQUIRED",
"cpus": 4
},
"disk": {
"default_build": "/home/username/devices/cf_gwear_x86-userdebug"
}
}
]
}
In dieser Tabelle werden die Elemente beschrieben, die in der Beispielkonfiguration mit zwei Geräten verwendet werden:
Element | Eingeben | Beschreibung |
---|---|---|
instances |
Array | Array von JSON-Objekten, die jeweils ein einzelnes Gerät in der Multi-Tenant-Gruppe von Geräten beschreiben, die gestartet werden sollen. |
@import |
String | Gibt den Gerätetyp an und legt Standardwerte für die Gerätekonfiguration fest. Die unterstützten Gerätetypen sind phone und wearable . |
vm |
Objekt | Gibt Eigenschaften an, die für die VM-Umgebung gelten, die für die Geräteinstanz spezifisch ist. |
memory_mb |
Zahl | Die Menge an Arbeitsspeicher, die einer bestimmten VM in Megabyte zugewiesen werden soll. |
setupwizard_mode |
String | Gibt an, ob der Einrichtungsassistent für das Gerät beim ersten Ausführen des Geräts für den Nutzer ausgeführt wird. Die unterstützten Optionen für den Einrichtungsassistenten sind DISABLED , OPTIONAL und REQUIRED . |
cpus |
Zahl | Die Anzahl der virtuellen CPUs, die der VM zugewiesen sind. |
disk |
Objekt | Gibt Attribute an, die für die Suche nach Dateisystemartefakten relevant sind, die zum Ausführen einer einzelnen VM-Instanz verwendet werden. |
default_build |
String | Lokaler Dateisystempfad zu einem Ordner, der ein Cuttlefish-Image für ein virtuelles Gerät enthält. |
Weitere Beispiele für Konfigurationsdateien, die mit cvd
verteilt werden, finden Sie im Ordner cvd_test_configs
im Cuttlefish-Codebaum.
Mehrmandantenfähige Instanzen steuern
In diesem Abschnitt wird beschrieben, wie Sie Geräte in einem Mandantenszenario erstellen und löschen. Sie können mehrere Cuttlefish-Geräte mit den folgenden Optionen starten:
- Kanonische Konfiguration: Starten Sie benutzerdefinierte Konfigurationen für jedes Gerät mit einer JSON-Konfigurationsdatei, in der die Liste der zu startenden Instanzen beschrieben wird.
- Einzelnes Gast-Image: Sie können mehrere Geräte mit einem einzelnen Gast-Image starten.
Mehrere VMs aus kanonischer Konfiguration starten
Wenn Sie mehrere VMs mit einer kanonischen Konfiguration erstellen möchten, die das Multi-Tenant-Szenario beschreibt, rufen Sie den Befehl cvd create
mit dem Flag-Präfix --config_file=
wie folgt auf:
cvd create --config_file=CONFIG_FILE
Das folgende Beispiel zeigt einen Aufruf, der auf eine kanonische Konfigurationsdatei namens /etc/phone.json
verweist.
cvd create --config_file=/etc/phone.json
Mehrere VMs aus einem einzelnen Gast-Image starten
Wenn Sie mehrere Cuttlefish-Geräte mit einem einzelnen Gast-Image starten möchten, verwenden Sie das Flag --num_instances=N
, wobei N die Anzahl der zu startenden Geräte ist. Standardmäßig beginnen Geräte mit der Instanznummer 1
.
cvd create --num_instances=N
Führen Sie einen der folgenden Schritte aus, um die Startinstanznummer zu ändern:
Fügen Sie das Flag
--base_instance_num=N
mit N als erster Instanznummer hinzu.cvd create --base_instance_num=N
Starten Sie Cuttlefish mit einem Nutzerkonto, das
vsoc-NN
entspricht, wobei NN die Basisinstanznummer in zweistelliger Form ist. Wenn Sie Cuttlefish beispielsweise mit dem Nutzerkontovsoc-01
starten möchten, führen Sie Folgendes aus:cvd create --base_instance_num=1
Geräte stoppen
So beenden Sie alle Geräte, die durch den letzten cvd create
-Aufruf gestartet wurden:
cvd stop
So starten Sie gestoppte Geräte neu:
cvd start
So entfernen Sie ein Gerät vollständig aus dem System:
cvd remove