Tintenfisch: Mehrfachmieter

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 Benutzerkonto vsoc- 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