Die Mandantenfähigkeit von Cuttlefish ermöglicht es Ihrem Host-Computer, mehrere virtuelle Gastgeräte mit einem einzigen Startaufruf zu starten.
Diese mehreren virtuellen Cuttlefish-Maschinen können einen Teil der Host-Festplattenressourcen gemeinsam nutzen, sodass Sie Speicherplatz sparen können. Jede virtuelle Maschine erhält ein eigenes Festplatten-Overlay, das die Android-Partitionen abdeckt (z. B. super
, userdata
, boot
). Jede Änderung an der Gastfestplatte wird in einem gastspezifischen Festplatten-Overlay platziert, wodurch jede virtuelle Cuttlefish-Maschine eine Copy-on-Write-Ansicht ihrer Festplattenpartitionen erhält. Da jedes virtuelle Gerät mehr Daten in seine Ansicht der Festplatte schreibt, nehmen die Overlay-Dateien auf der Host-Festplatte zu, da sie das Delta zwischen dem ursprünglichen Zustand und ihrem aktuellen Zustand erfassen.
Die Overlay-Dateien können zurückgesetzt werden, um die Cuttlefish-Festplatte wieder in ihren ursprünglichen Zustand zu versetzen. Dieser Vorgang wird als Powerwashing bezeichnet.
Instanznummern
Cuttlefish-Geräte erstellen und verbrauchen Ressourcen auf dem Host, die an ihre Instanznummer gebunden sind. Beispielsweise wird eine adb
Verbindung über einen TCP-Server-Socket an Port 6520
für das Cuttlefish-Gerät mit der Instanznummer 1
bereitgestellt. Wenn mehrere Instanzen gestartet werden, erstellt es einen TCP-Server-Socket an Port 6520
für das erste Gerät, 6521
für das zweite Gerät und erhöht die Portnummer für jedes weitere Gerät.
Ändern Sie die maximale Anzahl unterstützter Instanzen
Hostseitige Ressourcen, wie z. B. TAP-Netzwerkgeräte, müssen für virtuelle Cuttlefish-Maschinen vorab zugewiesen werden. Standardmäßig stellt das Debian-Paket auf Tintenfischbasis Ressourcen für die Instanznummern 1
bis 10
bereit.
Dies kann geändert werden, indem Sie num_cvd_accounts
“ in /etc/default/cuttlefish-host-resources
ändern und den Dienst cuttlefish-host-resources
neu starten, indem Sie den folgenden Befehl ausführen:
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 Szenario mit mehreren Mandanten zu beschreiben.
Im Folgenden wird das für kanonische Konfigurations-JSON-Dateien verwendete Format beschrieben (Platzhalter durch Gerätekonfigurationen ersetzen).
{
"common": {
CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
},
"instances": [
{
FIRST_DEVICE_CONFIGURATION
},
{
NTH_DEVICE_CONFIGURATION
}
]
}
Im Folgenden finden Sie eine Beispielkonfigurationsdatei für ein Setup mit zwei Geräten, einem Telefongerät und einem tragbaren Gerät:
{
"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 in der Beispielkonfiguration mit zwei Geräten verwendeten Elemente beschrieben:
Element | Typ | Beschreibung |
---|---|---|
instances | Array | Array von JSON-Objekten, die jeweils ein einzelnes Gerät in der mandantenfähigen Gerätegruppe beschreiben, die gestartet werden soll. |
@import | Zeichenfolge | 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 | Nummer | Die Speichermenge, die einer bestimmten VM zugewiesen werden soll, in Megabyte. |
setupwizard_mode | Zeichenfolge | Gibt an, ob der Geräte-Setup-Assistent für den Benutzer beim ersten Start des Geräts ausgeführt wird. Die unterstützten Optionen für den Setup-Assistentenmodus sind DISABLED , OPTIONAL und REQUIRED . |
cpus | Nummer | Die Anzahl der der VM zugewiesenen virtuellen CPUs. |
disk | Objekt | Gibt Eigenschaften an, die für die Suche nach Dateisystemartefakten relevant sind, die zum Ausführen einer einzelnen VM-Instanz verwendet werden. |
default_build | Zeichenfolge | Lokaler Dateisystempfad zu einem Ordner, der ein virtuelles Cuttlefish-Geräteimage enthält. |
Weitere Beispiele für Konfigurationsdateien, die mit cvd
verteilt werden, finden Sie im Ordner cvd_test_configs
im Cuttlefish-Codebaum.
Steuern Sie Multi-Tenant-Instanzen
In diesem Abschnitt wird beschrieben, wie Geräte in einem Szenario mit mehreren Mandanten gestartet und gestoppt werden. Sie können mehrere Cuttlefish-Geräte mit den folgenden Optionen starten:
- Kanonische Konfiguration : Starten Sie benutzerdefinierte Konfigurationen für jedes Gerät mithilfe einer JSON-Konfigurationsdatei, die die Liste der zu startenden Instanzen beschreibt.
- Einzelnes Gast-Image : Starten Sie mehrere Geräte über ein einziges Gast-Image.
Starten Sie mehrere VMs über die kanonische Konfiguration
Um mehrere VMs mit einer kanonischen Konfiguration zu starten, die das Szenario mit mehreren Mandanten beschreibt, rufen Sie den Befehl cvd start
mit dem Flag-Präfix --config_file=
wie folgt auf:
cvd start --config_file=CONFIG_FILE
Im Folgenden finden Sie einen Beispielaufruf, der auf eine kanonische Konfigurationsdatei mit dem Namen /etc/phone.json
verweist.
cvd start --config_file=/etc/phone.json
Starten Sie mehrere VMs von einem einzigen Gast-Image
Um mehrere Cuttlefish-Geräte mit einem einzigen Gast-Image zu starten, 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 start --num_instances=N
Um die Startinstanznummer zu ändern, führen Sie einen der folgenden Schritte aus:
Fügen Sie das Flag
--base_instance_num= N
mit N als erster Instanznummer hinzu.cvd start --base_instance_num=N
Starten Sie Cuttlefish mit einem Benutzerkonto, das mit
vsoc- NN
übereinstimmt, wobei NN die Basisinstanznummer in zweistelliger Form ist. Um beispielsweise Cuttlefish mit dem Benutzerkontovsoc- 01
zu starten, führen Sie Folgendes aus:cvd start --base_instance_num=1
So stoppen Sie Geräte
Führen Sie Folgendes aus, um alle vom letzten cvd start
Startaufruf gestarteten Geräte zu stoppen:
cvd stop