Mit der Mehrmandantenfähigkeit von Cuttlefish kann Ihr Hostcomputer mehrere virtuelle Gastgeräte mit einem einzigen Startaufruf starten.
Diese Cuttlefish-VMs können einige der Host-Speicherressourcen gemeinsam nutzen, wodurch Sie Speicherplatz sparen. Jede virtuelle Maschine erhält ein eigenes Laufwerk-Overlay, das die Android-Partitionen (z. B. super
, userdata
, boot
) abdeckt. Alle Änderungen am Gastlaufwerk werden in einem gastspezifischen Laufwerk-Overlay gespeichert. So erhält jede Cuttlefish-VM eine Copy-on-Write-Ansicht ihrer Laufwerkpartitionen. Da jedes virtuelle Gerät mehr Daten in seine Ansicht des Laufwerks schreibt, werden die Overlay-Dateien auf dem Hostlaufwerk größer, da sie das Delta zwischen dem ursprünglichen und ihrem aktuellen Zustand erfassen.
Die Overlay-Dateien können zurückgesetzt werden, um das Cuttlefish-Laufwerk in den ursprünglichen Zustand zurückzuversetzen. Dieser Vorgang wird als Powerwashing bezeichnet.
Instanznummern
Cuttlefish-Geräte erstellen und verbrauchen Ressourcen auf dem Host, die mit ihrer Instanznummer verknüpft sind. Beispielsweise wird eine adb
-Verbindung über einen TCP-Server-Socket an Port 6520
für das Cuttlefish-Gerät mit der Instanznummer 1
freigegeben.
Wenn mehrere Instanzen gestartet werden, wird ein TCP-Server-Socket an Port 6520
für das erste Gerät, 6521
für das zweite Gerät usw. erstellt. Die Portnummer wird für jedes zusätzliche Gerät erhöht.
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 die Instanznummern 1
bis 10
bereit.
Sie können dies ändern, indem Sie num_cvd_accounts
in /etc/default/cuttlefish-host-resources
ändern und den cuttlefish-host-resources
-Dienst mit dem folgenden Befehl neu starten:
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 JSON-Konfigurationsdateien erstellen, um die Konfiguration mehrerer Cuttlefish-Geräte in einem Mehrfachkundenszenario zu beschreiben.
Im Folgenden wird das Format beschrieben, das für kanonische JSON-Konfigurationsdateien verwendet wird. Ersetzen Sie die Platzhalter durch Gerätekonfigurationen.
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
Das folgende Beispiel zeigt 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_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 |
Matrix | Array von JSON-Objekten, die jeweils ein einzelnes Gerät in der mehrmandantenfähigen Gerätegruppe beschreiben, die gestartet werden soll. |
@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 Attribute an, die für die VM-Umgebung für die Geräteinstanz gelten. |
memory_mb |
Zahl | Die Größe des Arbeitsspeichers, der einer bestimmten VM in Megabyte zugewiesen werden soll. |
setupwizard_mode |
String | Gibt an, ob der Einrichtungsassistent für das Gerät beim ersten Start ausgeführt wird. Die unterstützten Optionen für den Modus des 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 mit einem Cuttlefish-virtuellen Geräte-Image. |
Weitere Beispiele für Konfigurationsdateien, die mit cvd
ausgeliefert werden, finden Sie im Ordner cvd_test_configs
im Cuttlefish-Codebaum.
Mehrmandantenfähige Instanzen steuern
In diesem Abschnitt wird beschrieben, wie Geräte in einem mandantenfähigen Szenario erstellt und gelöscht werden. Mit den folgenden Optionen können Sie mehrere Sepia-Geräte starten:
- Kanonische Konfiguration: Sie können benutzerdefinierte Konfigurationen für jedes Gerät mit einer JSON-Konfigurationsdatei starten, die die Liste der zu startenden Instanzen beschreibt.
- Einzelnes Gast-Image: Mehrere Geräte können über ein einzelnes Gast-Image gestartet werden.
Mehrere VMs aus der kanonischen Konfiguration starten
Wenn Sie mehrere VMs mit einer kanonischen Konfiguration erstellen möchten, die das mehrmandantenfähige Szenario beschreibt, rufen Sie den Befehl cvd create
mit dem Flag-Präfix --config_file=
so auf:
cvd create --config_file=CONFIG_FILE
Im folgenden Beispiel wird auf eine kanonische Konfigurationsdatei namens /etc/phone.json
verwiesen.
cvd create --config_file=/etc/phone.json
Mehrere VMs aus einem einzigen Gast-Image starten
Wenn Sie mehrere Cuttlefish-Geräte mit einem einzigen 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 Ausgangsinstanznummer 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 zweistellige Basisinstanznummer 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 anhalten
Wenn Sie alle Geräte beenden möchten, die durch die letzte cvd create
-Aufruf ausgeführt wurden, führen Sie Folgendes aus:
cvd stop
Führen Sie folgenden Befehl aus, um angehaltene Geräte neu zu starten:
cvd start
So entfernen Sie ein Gerät vollständig aus dem System:
cvd remove