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 phoneundwearable. | 
| 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,OPTIONALundREQUIRED. | 
| 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=Nmit N als erster Instanznummer hinzu.- cvd create --base_instance_num=N 
- Starten Sie Cuttlefish mit einem Nutzerkonto, das - vsoc-NNentspricht, wobei NN die Basisinstanznummer in zweistelliger Form ist. Wenn Sie Cuttlefish beispielsweise mit dem Nutzerkonto- vsoc-01starten 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
