Lokale SSD zu VM hinzufügen


Lokale SSDs eignen sich zur temporären Speicherung. Mögliche Anwendungsfälle sind Cache- und temporärer Verarbeitungsspeicher. Da sich lokale SSDs auf der physischen Maschine befinden, auf der Ihre VM ausgeführt wird, können sie nur während der VM-Erstellung erstellt werden. Lokale SSDs können nicht als Bootgeräte verwendet werden.

Bei Maschinenserien der dritten Generation wird der VM beim Erstellen eine festgelegte Anzahl lokaler SSD-Laufwerke hinzugefügt. Es gibt nur eine Möglichkeit, diesen VMs lokalen SSD-Speicher hinzuzufügen:

  • Bei C3 und C3D ist lokaler SSD-Speicher nur mit bestimmten Maschinentypen wie c3-standard-88-lssd verfügbar.
  • Bei den Maschinenserien Z3, A3 und A2 Ultra ist bei jedem Maschinentyp lokaler SSD-Speicher verfügbar.

Für Maschinentypen der M3-Reihe und der ersten und zweiten Generation müssen Sie beim Erstellen der VM lokale SSD-Laufwerke angeben.

Nachdem Sie ein lokales SSD-Laufwerk erstellt haben, müssen Sie das Gerät formatieren und bereitstellen. Erst dann können Sie es verwenden.

Informationen zur Größe des lokalen SSD-Speichers, der mit verschiedenen Maschinentypen verfügbar ist, und zur Anzahl der lokalen SSD-Laufwerke, die Sie einer VM zuordnen können, finden Sie unter Gültige Anzahl lokaler SSDs auswählen.

Hinweise

  • Überprüfen Sie vor der Verwendung lokaler SSDs die Einschränkungen für lokale SSDs.
  • Sehen Sie sich die Szenarien für die Datenpersistenz für lokale SSDs an.
  • Wenn Sie lokale SSDs zu VM-Instanzen hinzufügen, die über angehängte GPUs verfügen, finden Sie weitere Informationen unter Verfügbarkeit lokaler SSDs nach GPU-Regionen und -Zonen.
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich bei Compute Engine authentifizieren. Wählen Sie dazu eine der folgenden Optionen aus:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Weitere Informationen unter Set up authentication for a local development environment.

      Go

      Wenn Sie die Go Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Weitere Informationen unter Set up authentication for a local development environment.

      Java

      Wenn Sie die Java Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Weitere Informationen unter Set up authentication for a local development environment.

      Python

      Wenn Sie die Python Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Weitere Informationen unter Set up authentication for a local development environment.

      REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

VM mit einer lokalen SSD erstellen

Sie können eine VM mit lokalem SSD-Laufwerksspeicher über die Google Cloud Console, die gcloud CLI oder die Compute Engine API erstellen.

Console

  1. Gehen Sie zur Seite Instanz erstellen.

    Zur Seite „Instanz erstellen“

  2. Geben Sie den Namen, die Region und die Zone Ihrer VM an. Optional können Sie Tags oder Labels hinzufügen.

  3. Wählen Sie im Abschnitt Maschinenkonfiguration die Maschinenfamilie aus, die Ihren Zielmaschinentyp enthält.

  4. Wählen Sie eine Serie aus der Liste Serien aus und wählen Sie dann den Maschinentyp aus.

    • Wählen Sie für die Maschinenserie der dritten Generation C3 und C3D einen Maschinentyp aus, der auf -lssd endet.
    • Bei Z3, A3 und A2 Ultra ist bei jedem Maschinentyp lokaler SSD-Speicher enthalten.
    • Führen Sie bei M3 oder Maschinenserien der ersten und zweiten Generation nach der Auswahl des Maschinentyps die folgenden Schritte aus:
      1. Maximieren Sie den Bereich Erweiterte Optionen.
      2. Maximieren Sie Laufwerke, klicken Sie auf Lokale SSD hinzufügen und gehen Sie so vor:
        1. Wählen Sie auf der Seite Lokale SSD konfigurieren den Laufwerkschnittstellentyp aus.
        2. Wählen Sie in der Liste Laufwerkkapazität die gewünschte Anzahl von Laufwerken aus.
        3. Klicken Sie auf Speichern.
  5. Fahren Sie mit dem VM-Erstellungsprozess fort.

  6. Nachdem Sie die VM mit lokalen SSD-Laufwerken erstellt haben, müssen Sie jedes Gerät formatieren und bereitstellen, bevor Sie die Laufwerke verwenden können.

gcloud

  • Wenn Sie für die Maschinenserien Z3, A3 und A2 Ultra eine VM mit angehängten lokalen SSD-Laufwerken erstellen möchten, folgen Sie der Anleitung zum Erstellen einer Instanz, um eine VM mit einem der verfügbaren Maschinentypen für diese Serie zu erstellen.

  • Folgen Sie für die C3- oder C3D-Maschinenserie den Anweisungen zum Erstellen einer Instanz, um eine VM mit angehängten lokalen SSD-Laufwerken zu erstellen, geben Sie jedoch einen Instanztyp an, der lokale SSD-Laufwerke (-lssd) enthält.

    Sie können beispielsweise eine C3-VM mit zwei lokalen SSD-Partitionen erstellen, die die NVMe-Laufwerkschnittstelle so verwenden:

    gcloud compute instances create example-c3-instance \
       --zone ZONE \
       --machine-type c3-standard-8-lssd \
       --image-project IMAGE_PROJECT \
       --image-family IMAGE_FAMILY
    
  • Folgen Sie für M3 und die erste und zweite Generation der Maschinenserien der Anleitung Instanz erstellen zum Erstellen einer VM mit angehängten lokalen SSD-Laufwerken, aber verwenden Sie das Flag --local-ssd, um ein lokales SSD-Laufwerk zu erstellen und anzuhängen. Fügen Sie weitere --local-ssd-Flags hinzu, um mehrere lokale SSD-Laufwerke zu erstellen. Sie können auch für jedes --local-ssd-Flag Werte für die Schnittstelle und den Gerätenamen festlegen.

    Sie können beispielsweise eine M3-VM mit vier lokalen SSD-Laufwerken erstellen und den Laufwerkschnittstellentyp so angeben:

    gcloud compute instances create VM_NAME \
       --machine-type m3-ultramem-64 \
       --zone ZONE \
       --local-ssd interface=INTERFACE_TYPE,device-name=DEVICE-NAME \
       --local-ssd interface=INTERFACE_TYPE,device-name=DEVICE-NAME \
       --local-ssd interface=INTERFACE_TYPE,device-name=DEVICE-NAME \
       --local-ssd interface=INTERFACE_TYPE \
       --image-project IMAGE_PROJECT \
       --image-family IMAGE_FAMILY
    

Ersetzen Sie Folgendes:

  • VM_NAME ist der Name für die neue VM.
  • ZONE ist die Zone, in der die VM erstellt werden soll. Dieses Flag ist optional, wenn Sie das Attribut compute/zone der gcloud CLI oder die Umgebungsvariable CLOUDSDK_COMPUTE_ZONE konfiguriert haben.
  • INTERFACE_TYPE: der Laufwerkschnittstellentyp, den Sie für das lokale SSD-Gerät verwenden möchten. Geben Sie nvme an, wenn Sie eine M3-VM erstellen oder das Bootlaufwerk-Image optimierte NVMe-Treiber hat. Geben Sie für andere Bilder scsi an.
  • DEVICE-NAME: Optional: Ein Name, der den Laufwerknamen angibt, der im Symlink (Symbolischer Link) des Gastbetriebssystems verwendet werden soll.
  • IMAGE_FAMILY ist eine der verfügbaren Image-Familien, die Sie auf dem Bootlaufwerk installiert haben möchten.
  • IMAGE_PROJECT: Das Image-Projekt, zu dem die Image-Familie gehört.

Bei Bedarf können Sie lokale SSDs mit einer Kombination aus nvme und scsi zu einer VM der ersten oder zweiten Generation hinzufügen. Die Leistung des nvme-Geräts hängt vom Bootlaufwerk-Image der Instanz ab. VMs der dritten Generation unterstützen nur die NVMe-Laufwerkschnittstelle.

Nachdem Sie eine VM mit einer lokalen SSD erstellt haben, müssen Sie das Gerät formatieren und bereitstellen. Erst dann können Sie es verwenden.

Terraform

Zum Erstellen einer VM mit angehängten lokalen SSD-Laufwerken können Sie die Ressource google_compute_instance verwenden.


# Create a VM with a local SSD for temporary storage use cases

resource "google_compute_instance" "default" {
  name         = "my-vm-instance-with-scratch"
  machine_type = "n2-standard-8"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  # Local SSD interface type; NVME for image with optimized NVMe drivers or SCSI
  # Local SSD are 375 GiB in size
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"
    access_config {}
  }
}

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Zum Generieren des Terraform-Codes können Sie die Komponente Entsprechender Code in der Google Cloud Console verwenden.
  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf Instanz erstellen.
  3. Geben Sie die gewünschten Parameter an.
  4. Klicken Sie oben oder unten auf der Seite auf Entsprechender Code und dann auf den Tab Terraform, um den Terraform-Code aufzurufen.

Go

Go

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Go in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Compute Engine Go API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// createWithLocalSSD creates a new VM instance with Debian 10 operating system and a local SSD attached.
func createWithLocalSSD(w io.Writer, projectID, zone, instanceName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"

	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	imagesClient, err := compute.NewImagesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewImagesRESTClient: %w", err)
	}
	defer imagesClient.Close()

	// List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details.
	newestDebianReq := &computepb.GetFromFamilyImageRequest{
		Project: "debian-cloud",
		Family:  "debian-12",
	}
	newestDebian, err := imagesClient.GetFromFamily(ctx, newestDebianReq)
	if err != nil {
		return fmt.Errorf("unable to get image from family: %w", err)
	}

	req := &computepb.InsertInstanceRequest{
		Project: projectID,
		Zone:    zone,
		InstanceResource: &computepb.Instance{
			Name: proto.String(instanceName),
			Disks: []*computepb.AttachedDisk{
				{
					InitializeParams: &computepb.AttachedDiskInitializeParams{
						DiskSizeGb:  proto.Int64(10),
						SourceImage: newestDebian.SelfLink,
						DiskType:    proto.String(fmt.Sprintf("zones/%s/diskTypes/pd-standard", zone)),
					},
					AutoDelete: proto.Bool(true),
					Boot:       proto.Bool(true),
					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
				},
				{
					InitializeParams: &computepb.AttachedDiskInitializeParams{
						DiskType: proto.String(fmt.Sprintf("zones/%s/diskTypes/local-ssd", zone)),
					},
					AutoDelete: proto.Bool(true),
					Type:       proto.String(computepb.AttachedDisk_SCRATCH.String()),
				},
			},
			MachineType: proto.String(fmt.Sprintf("zones/%s/machineTypes/n1-standard-1", zone)),
			NetworkInterfaces: []*computepb.NetworkInterface{
				{
					Name: proto.String("global/networks/default"),
				},
			},
		},
	}

	op, err := instancesClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}

	fmt.Fprintf(w, "Instance created\n")

	return nil
}

Java

Java

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Java in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Compute Engine Java API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


import com.google.cloud.compute.v1.AttachedDisk;
import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
import com.google.cloud.compute.v1.Image;
import com.google.cloud.compute.v1.ImagesClient;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateWithLocalSsd {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // projectId: project ID or project number of the Cloud project you want to use.
    String projectId = "your-project-id";
    // zone: name of the zone to create the instance in. For example: "us-west3-b"
    String zone = "zone-name";
    // instanceName: name of the new virtual machine (VM) instance.
    String instanceName = "instance-name";

    createWithLocalSsd(projectId, zone, instanceName);
  }

  // Create a new VM instance with Debian 11 operating system and SSD local disk.
  public static void createWithLocalSsd(String projectId, String zone, String instanceName)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {

    int diskSizeGb = 10;
    boolean boot = true;
    boolean autoDelete = true;
    String diskType = String.format("zones/%s/diskTypes/pd-standard", zone);
    // Get the latest debian image.
    Image newestDebian = getImageFromFamily("debian-cloud", "debian-11");
    List<AttachedDisk> disks = new ArrayList<>();

    // Create the disks to be included in the instance.
    disks.add(
        createDiskFromImage(diskType, diskSizeGb, boot, newestDebian.getSelfLink(), autoDelete));
    disks.add(createLocalSsdDisk(zone));

    // Create the instance.
    Instance instance = createInstance(projectId, zone, instanceName, disks);

    if (instance != null) {
      System.out.printf("Instance created with local SSD: %s", instance.getName());
    }

  }

  // Retrieve the newest image that is part of a given family in a project.
  // Args:
  //    projectId: project ID or project number of the Cloud project you want to get image from.
  //    family: name of the image family you want to get image from.
  private static Image getImageFromFamily(String projectId, String family) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `imagesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (ImagesClient imagesClient = ImagesClient.create()) {
      // List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details
      return imagesClient.getFromFamily(projectId, family);
    }
  }

  // Create an AttachedDisk object to be used in VM instance creation. Uses an image as the
  // source for the new disk.
  //
  // Args:
  //    diskType: the type of disk you want to create. This value uses the following format:
  //        "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
  //        For example: "zones/us-west3-b/diskTypes/pd-ssd"
  //
  //    diskSizeGb: size of the new disk in gigabytes.
  //
  //    boot: boolean flag indicating whether this disk should be used as a
  //    boot disk of an instance.
  //
  //    sourceImage: source image to use when creating this disk.
  //    You must have read access to this disk. This can be one of the publicly available images
  //    or an image from one of your projects.
  //    This value uses the following format: "projects/{project_name}/global/images/{image_name}"
  //
  //    autoDelete: boolean flag indicating whether this disk should be deleted
  //    with the VM that uses it.
  private static AttachedDisk createDiskFromImage(String diskType, int diskSizeGb, boolean boot,
      String sourceImage, boolean autoDelete) {

    AttachedDiskInitializeParams attachedDiskInitializeParams =
        AttachedDiskInitializeParams.newBuilder()
            .setSourceImage(sourceImage)
            .setDiskSizeGb(diskSizeGb)
            .setDiskType(diskType)
            .build();

    AttachedDisk bootDisk = AttachedDisk.newBuilder()
        .setInitializeParams(attachedDiskInitializeParams)
        // Remember to set auto_delete to True if you want the disk to be deleted when you delete
        // your VM instance.
        .setAutoDelete(autoDelete)
        .setBoot(boot)
        .build();

    return bootDisk;
  }

  // Create an AttachedDisk object to be used in VM instance creation. The created disk contains
  // no data and requires formatting before it can be used.
  // Args:
  //    zone: The zone in which the local SSD drive will be attached.
  private static AttachedDisk createLocalSsdDisk(String zone) {

    AttachedDiskInitializeParams attachedDiskInitializeParams =
        AttachedDiskInitializeParams.newBuilder()
            .setDiskType(String.format("zones/%s/diskTypes/local-ssd", zone))
            .build();

    AttachedDisk disk = AttachedDisk.newBuilder()
        .setType(AttachedDisk.Type.SCRATCH.name())
        .setInitializeParams(attachedDiskInitializeParams)
        .setAutoDelete(true)
        .build();

    return disk;
  }

  // Send an instance creation request to the Compute Engine API and wait for it to complete.
  // Args:
  //    projectId: project ID or project number of the Cloud project you want to use.
  //    zone: name of the zone to create the instance in. For example: "us-west3-b"
  //    instanceName: name of the new virtual machine (VM) instance.
  //    disks: a list of compute.v1.AttachedDisk objects describing the disks
  //           you want to attach to your new instance.
  private static Instance createInstance(String projectId, String zone, String instanceName,
      List<AttachedDisk> disks)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the `instancesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      // machineType: machine type of the VM being created. This value uses the
      // following format: "zones/{zone}/machineTypes/{type_name}".
      // For example: "zones/europe-west3-c/machineTypes/f1-micro"
      String typeName = "n1-standard-1";
      String machineType = String.format("zones/%s/machineTypes/%s", zone, typeName);

      // networkLink: name of the network you want the new instance to use.
      // For example: "global/networks/default" represents the network
      // named "default", which is created automatically for each project.
      String networkLink = "global/networks/default";

      // Collect information into the Instance object.
      Instance instance = Instance.newBuilder()
          .setName(instanceName)
          .setMachineType(machineType)
          .addNetworkInterfaces(NetworkInterface.newBuilder().setName(networkLink).build())
          .addAllDisks(disks)
          .build();

      Operation response = instancesClient.insertAsync(projectId, zone, instance)
          .get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        throw new Error("Instance creation failed ! ! " + response);
      }
      System.out.println("Operation Status: " + response.getStatus());
      return instancesClient.get(projectId, zone, instanceName);
    }

  }

}

Python

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Schritten zur Einrichtung von Python in der Compute Engine-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Compute Engine Python API.

Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei Compute Engine zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

from __future__ import annotations

import re
import sys
from typing import Any
import warnings

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def get_image_from_family(project: str, family: str) -> compute_v1.Image:
    """
    Retrieve the newest image that is part of a given family in a project.

    Args:
        project: project ID or project number of the Cloud project you want to get image from.
        family: name of the image family you want to get image from.

    Returns:
        An Image object.
    """
    image_client = compute_v1.ImagesClient()
    # List of public operating system (OS) images: https://cloud.google.com/compute/docs/images/os-details
    newest_image = image_client.get_from_family(project=project, family=family)
    return newest_image


def disk_from_image(
    disk_type: str,
    disk_size_gb: int,
    boot: bool,
    source_image: str,
    auto_delete: bool = True,
) -> compute_v1.AttachedDisk:
    """
    Create an AttachedDisk object to be used in VM instance creation. Uses an image as the
    source for the new disk.

    Args:
         disk_type: the type of disk you want to create. This value uses the following format:
            "zones/{zone}/diskTypes/(pd-standard|pd-ssd|pd-balanced|pd-extreme)".
            For example: "zones/us-west3-b/diskTypes/pd-ssd"
        disk_size_gb: size of the new disk in gigabytes
        boot: boolean flag indicating whether this disk should be used as a boot disk of an instance
        source_image: source image to use when creating this disk. You must have read access to this disk. This can be one
            of the publicly available images or an image from one of your projects.
            This value uses the following format: "projects/{project_name}/global/images/{image_name}"
        auto_delete: boolean flag indicating whether this disk should be deleted with the VM that uses it

    Returns:
        AttachedDisk object configured to be created using the specified image.
    """
    boot_disk = compute_v1.AttachedDisk()
    initialize_params = compute_v1.AttachedDiskInitializeParams()
    initialize_params.source_image = source_image
    initialize_params.disk_size_gb = disk_size_gb
    initialize_params.disk_type = disk_type
    boot_disk.initialize_params = initialize_params
    # Remember to set auto_delete to True if you want the disk to be deleted when you delete
    # your VM instance.
    boot_disk.auto_delete = auto_delete
    boot_disk.boot = boot
    return boot_disk


def local_ssd_disk(zone: str) -> compute_v1.AttachedDisk():
    """
    Create an AttachedDisk object to be used in VM instance creation. The created disk contains
    no data and requires formatting before it can be used.

    Args:
        zone: The zone in which the local SSD drive will be attached.

    Returns:
        AttachedDisk object configured as a local SSD disk.
    """
    disk = compute_v1.AttachedDisk()
    disk.type_ = compute_v1.AttachedDisk.Type.SCRATCH.name
    initialize_params = compute_v1.AttachedDiskInitializeParams()
    initialize_params.disk_type = f"zones/{zone}/diskTypes/local-ssd"
    disk.initialize_params = initialize_params
    disk.auto_delete = True
    return disk


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def create_instance(
    project_id: str,
    zone: str,
    instance_name: str,
    disks: list[compute_v1.AttachedDisk],
    machine_type: str = "n1-standard-1",
    network_link: str = "global/networks/default",
    subnetwork_link: str = None,
    internal_ip: str = None,
    external_access: bool = False,
    external_ipv4: str = None,
    accelerators: list[compute_v1.AcceleratorConfig] = None,
    preemptible: bool = False,
    spot: bool = False,
    instance_termination_action: str = "STOP",
    custom_hostname: str = None,
    delete_protection: bool = False,
) -> compute_v1.Instance:
    """
    Send an instance creation request to the Compute Engine API and wait for it to complete.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone to create the instance in. For example: "us-west3-b"
        instance_name: name of the new virtual machine (VM) instance.
        disks: a list of compute_v1.AttachedDisk objects describing the disks
            you want to attach to your new instance.
        machine_type: machine type of the VM being created. This value uses the
            following format: "zones/{zone}/machineTypes/{type_name}".
            For example: "zones/europe-west3-c/machineTypes/f1-micro"
        network_link: name of the network you want the new instance to use.
            For example: "global/networks/default" represents the network
            named "default", which is created automatically for each project.
        subnetwork_link: name of the subnetwork you want the new instance to use.
            This value uses the following format:
            "regions/{region}/subnetworks/{subnetwork_name}"
        internal_ip: internal IP address you want to assign to the new instance.
            By default, a free address from the pool of available internal IP addresses of
            used subnet will be used.
        external_access: boolean flag indicating if the instance should have an external IPv4
            address assigned.
        external_ipv4: external IPv4 address to be assigned to this instance. If you specify
            an external IP address, it must live in the same region as the zone of the instance.
            This setting requires `external_access` to be set to True to work.
        accelerators: a list of AcceleratorConfig objects describing the accelerators that will
            be attached to the new instance.
        preemptible: boolean value indicating if the new instance should be preemptible
            or not. Preemptible VMs have been deprecated and you should now use Spot VMs.
        spot: boolean value indicating if the new instance should be a Spot VM or not.
        instance_termination_action: What action should be taken once a Spot VM is terminated.
            Possible values: "STOP", "DELETE"
        custom_hostname: Custom hostname of the new VM instance.
            Custom hostnames must conform to RFC 1035 requirements for valid hostnames.
        delete_protection: boolean value indicating if the new virtual machine should be
            protected against deletion or not.
    Returns:
        Instance object.
    """
    instance_client = compute_v1.InstancesClient()

    # Use the network interface provided in the network_link argument.
    network_interface = compute_v1.NetworkInterface()
    network_interface.network = network_link
    if subnetwork_link:
        network_interface.subnetwork = subnetwork_link

    if internal_ip:
        network_interface.network_i_p = internal_ip

    if external_access:
        access = compute_v1.AccessConfig()
        access.type_ = compute_v1.AccessConfig.Type.ONE_TO_ONE_NAT.name
        access.name = "External NAT"
        access.network_tier = access.NetworkTier.PREMIUM.name
        if external_ipv4:
            access.nat_i_p = external_ipv4
        network_interface.access_configs = [access]

    # Collect information into the Instance object.
    instance = compute_v1.Instance()
    instance.network_interfaces = [network_interface]
    instance.name = instance_name
    instance.disks = disks
    if re.match(r"^zones/[a-z\d\-]+/machineTypes/[a-z\d\-]+$", machine_type):
        instance.machine_type = machine_type
    else:
        instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"

    instance.scheduling = compute_v1.Scheduling()
    if accelerators:
        instance.guest_accelerators = accelerators
        instance.scheduling.on_host_maintenance = (
            compute_v1.Scheduling.OnHostMaintenance.TERMINATE.name
        )

    if preemptible:
        # Set the preemptible setting
        warnings.warn(
            "Preemptible VMs are being replaced by Spot VMs.", DeprecationWarning
        )
        instance.scheduling = compute_v1.Scheduling()
        instance.scheduling.preemptible = True

    if spot:
        # Set the Spot VM setting
        instance.scheduling.provisioning_model = (
            compute_v1.Scheduling.ProvisioningModel.SPOT.name
        )
        instance.scheduling.instance_termination_action = instance_termination_action

    if custom_hostname is not None:
        # Set the custom hostname for the instance
        instance.hostname = custom_hostname

    if delete_protection:
        # Set the delete protection bit
        instance.deletion_protection = True

    # Prepare the request to insert an instance.
    request = compute_v1.InsertInstanceRequest()
    request.zone = zone
    request.project = project_id
    request.instance_resource = instance

    # Wait for the create operation to complete.
    print(f"Creating the {instance_name} instance in {zone}...")

    operation = instance_client.insert(request=request)

    wait_for_extended_operation(operation, "instance creation")

    print(f"Instance {instance_name} created.")
    return instance_client.get(project=project_id, zone=zone, instance=instance_name)


def create_with_ssd(
    project_id: str, zone: str, instance_name: str
) -> compute_v1.Instance:
    """
    Create a new VM instance with Debian 10 operating system and SSD local disk.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone to create the instance in. For example: "us-west3-b"
        instance_name: name of the new virtual machine (VM) instance.

    Returns:
        Instance object.
    """
    newest_debian = get_image_from_family(project="debian-cloud", family="debian-12")
    disk_type = f"zones/{zone}/diskTypes/pd-standard"
    disks = [
        disk_from_image(disk_type, 10, True, newest_debian.self_link, True),
        local_ssd_disk(zone),
    ]
    instance = create_instance(project_id, zone, instance_name, disks)
    return instance

REST

Verwenden Sie instances.insert method, um eine VM aus einer Image-Familie oder aus einer bestimmten Version eines Betriebssystem-Images zu erstellen.

  • Wenn Sie für die Maschinenserien Z3, A3 und A2 Ultra eine VM mit angehängten lokalen SSDs erstellen möchten, erstellen Sie eine VM, die einen der verfügbaren Maschinentypen für diese Serie verwendet.
  • Wenn Sie für die C3- oder C3D-Maschinenserie eine VM mit angehängten lokalen SSD-Laufwerken erstellen möchten, geben Sie einen Instanztyp an, der lokale SSD-Laufwerke (-lssd) enthält.

    Hier sehen Sie eine Beispiel-Anfragenutzlast zum Erstellen einer C3-VM mit einem Ubuntu-Bootlaufwerk und zwei lokalen SSD-Laufwerken:

    {
     "machineType":"zones/us-central1-c/machineTypes/c3-standard-8-lssd",
     "name":"c3-with-local-ssd",
     "disks":[
        {
           "type":"PERSISTENT",
           "initializeParams":{
              "sourceImage":"projects/ubuntu-os-cloud/global/images/family/ubuntu-2204-lts"
           },
           "boot":true
        }
     ],
     "networkInterfaces":[
        {
           "network":"global/networks/default"
    }
     ]
    }
    
  • Wenn Sie für M3 und die erste und zweite Generation der Maschinenserien eine VM mit angehängten lokalen SSD-Laufwerken erstellen möchten, können Sie beim Erstellen der VM mithilfe der Property initializeParams lokale SSD-Geräte hinzufügen. Außerdem müssen Sie folgende Attribute angeben:

    • diskType: Lokale SSD festlegen
    • autoDelete: Auf "true" festlegen
    • type: Auf SCRATCH festlegen

    Die folgenden Eigenschaften können nicht mit lokalen SSD-Geräten verwendet werden:

    • diskName
    • Attribut sourceImage
    • diskSizeGb

    Hier sehen Sie eine Beispiel-Anfragenutzlast zum Erstellen einer M3-VM mit einem Bootlaufwerk und vier lokalen SSD-Laufwerken:

    {
     "machineType":"zones/us-central1-f/machineTypes/m3-ultramem-64",
     "name":"local-ssd-instance",
     "disks":[
        {
         "type":"PERSISTENT",
         "initializeParams":{
            "sourceImage":"projects/ubuntu-os-cloud/global/images/family/ubuntu-2204-lts"
         },
         "boot":true
        },
        {
           "type":"SCRATCH",
           "initializeParams":{
              "diskType":"zones/us-central1-f/diskTypes/local-ssd"
           },
           "autoDelete":true,
           "interface": "NVME"
        },
        {
           "type":"SCRATCH",
           "initializeParams":{
              "diskType":"zones/us-central1-f/diskTypes/local-ssd"
           },
           "autoDelete":true,
           "interface": "NVME"
        },
        {
           "type":"SCRATCH",
           "initializeParams":{
              "diskType":"zones/us-central1-f/diskTypes/local-ssd"
           },
           "autoDelete":true,
           "interface": "NVME"
        },
        {
           "type":"SCRATCH",
           "initializeParams":{
              "diskType":"zones/us-central1-f/diskTypes/local-ssd"
           },
           "autoDelete":true,
           "interface": "NVME"
        },
     ],
     "networkInterfaces":[
        {
           "network":"global/networks/default"
        }
     ]
    }
    

Nachdem Sie ein lokales SSD-Laufwerk erstellt haben, müssen Sie das Gerät formatieren und bereitstellen. Erst dann können Sie es verwenden.

Weitere Informationen zum Erstellen einer Instanz mit REST finden Sie in der Compute Engine API.

Lokales SSD-Gerät formatieren und bereitstellen

Sie können jedes lokale SSD-Laufwerk einzeln formatieren und bereitstellen oder mehrere lokale SSD-Laufwerke zu einem einzigen logischen Volume kombinieren.

Einzelne lokale SSD-Partitionen formatieren und bereitstellen

Am einfachsten verbinden Sie lokale SSDs mit Ihrer Instanz, indem Sie jedes Gerät mit einer einzelnen Partition formatieren und bereitstellen. Alternativ können Sie mehrere Partitionen zu einem logischen Volume kombinieren.

Linux-Instanzen

Formatieren Sie die neue lokale SSD und stellen Sie sie auf Ihrer Linux-Instanz bereit. Dazu können Sie jedes Partitionsformat und eine beliebige Konfiguration verwenden. Erstellen Sie für dieses Beispiel eine einzelne ext4-Partition.

  1. Öffnen Sie die Seite der VM-Instanzen.

    Zur Seite „VM-Instanzen“

  2. Klicken Sie auf die Schaltfläche SSH neben der Instanz mit der neuen lokalen SSD. Im Browser wird eine Terminalverbindung zur Instanz hergestellt.

  3. Geben Sie im Terminal mit dem Befehl find die lokale SSD an, die Sie bereitstellen möchten.

    $ find /dev/ | grep google-local-nvme-ssd
    

    Lokale SSDs im SCSI-Modus haben Standardnamen wie google-local-ssd-0. Lokale SSDs im NVMe-Modus haben Namen wie google-local-nvme-ssd-0, wie in der folgenden Ausgabe gezeigt:

     $ find /dev/ | grep google-local-nvme-ssd
    
     /dev/disk/by-id/google-local-nvme-ssd-0
    
  4. Formatieren Sie die lokale SSD mit einem ext4-Dateisystem. Durch diesen Befehl werden alle vorhandenen Daten von der lokalen SSD gelöscht:

    $ sudo mkfs.ext4 -F /dev/disk/by-id/[SSD_NAME]
    

    Ersetzen Sie [SSD_NAME] durch die ID der lokalen SSD, die Sie formatieren möchten. Geben Sie beispielsweise google-local-nvme-ssd-0 an, um die erste lokale NVMe-SSD auf der Instanz zu formatieren.

  5. Erstellen Sie mit dem Befehl mkdir ein Verzeichnis, in dem Sie das Gerät bereitstellen können.

    $ sudo mkdir -p /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie [MNT_DIR] durch den Verzeichnispfad, unter dem Sie das lokale SSD bereitstellen möchten.

  6. Stellen Sie die lokale SSD auf der VM bereit:

    $ sudo mount /dev/disk/by-id/[SSD_NAME] /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie Folgendes:

    • [SSD_NAME]: die ID der lokalen SSD, die Sie bereitstellen möchten.
    • [MNT_DIR]: das Verzeichnis, in dem die lokale SSD bereitgestellt werden soll.
  7. Konfigurieren Sie den Lese-/Schreibzugriff auf das Gerät. In diesem Beispiel wird allen Nutzern Schreibzugriff gewährt:

    $ sudo chmod a+w /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie die lokale SSD bereitgestellt haben.

Optional können Sie die lokale SSD der Datei /etc/fstab hinzufügen, damit das Gerät bei einem Neustart der Instanz automatisch wieder bereitgestellt wird. Dadurch bleiben die Daten auf der lokalen SSD beim Beenden der Instanz aber nicht erhalten. Weitere Informationen finden Sie unter Datenpersistenz auf lokalen SSDs.

Achten Sie bei Ihrem Eintrag in die Datei /etc/fstab darauf, die Option nofail aufzunehmen, damit die Instanz auch ohne die lokale SSD gestartet werden kann. Wenn Sie beispielsweise einen Snapshot des Bootlaufwerks erzeugen und eine neue Instanz ohne angehängte lokale SSD-Laufwerke erstellen, kann die Instanz den Startvorgang fortsetzen und wird nicht auf unbestimmte Zeit angehalten.

  1. Erstellen Sie den Eintrag /etc/fstab. Suchen Sie mit dem Befehl blkid nach der UUID für das Dateisystem auf dem Gerät und nehmen Sie die UUID in der Datei /etc/fstab in die Bereitstellungsoptionen auf. Sie können diesen Schritt mit einem einzigen Befehl ausführen.

    Verwenden Sie beispielsweise für eine lokale SSD im NVMe-Modus den folgenden Befehl:

    $ echo UUID=`sudo blkid -s UUID -o value /dev/disk/by-id/google-local-nvme-ssd-0` /mnt/disks/[MNT_DIR] ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
    

    Verwenden Sie für eine lokale SSD in einem Nicht-NVMe-Modus wie SCSI den folgenden Befehl:

    $ echo UUID=`sudo blkid -s UUID -o value /dev/disk/by-id/google-local-ssd-0` /mnt/disks/[MNT_DIR] ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie die lokale SSD bereitgestellt haben.

  2. Prüfen Sie mit dem Befehl cat, ob Ihre /etc/fstab-Einträge korrekt sind:

    $ cat /etc/fstab
    

Wenn Sie einen Snapshot des Bootlaufwerks dieser Instanz erstellen und diesen Snapshot zum Erstellen einer separaten Instanz ohne lokale SSDs verwenden, bearbeiten Sie die Datei /etc/fstab und entfernen Sie den Eintrag für die lokale SSD. Auch bei aktivierter Option nofail müssen Sie die Datei /etc/fstab mit den Partitionen synchronisieren, die mit Ihrer Instanz verbunden sind, und diese Einträge entfernen, bevor Sie einen Snapshot Ihres Bootlaufwerks erstellen.

Windows-Instanzen

Mit dem Datenträgerverwaltungstool von Windows können Sie eine lokale SSD auf einer Windows-Instanz formatieren und bereitstellen.

  1. Stellen Sie über RDP eine Verbindung zur Instanz her. Öffnen Sie für dieses Beispiel die Seite "VM-Instanzen" und klicken Sie neben der Instanz mit den angehängten lokalen SSDs auf die Schaltfläche RDP. Nachdem Sie Nutzername und Passwort eingegeben haben, wird ein Fenster mit der Desktop-Oberfläche Ihres Servers angezeigt.

  2. Klicken Sie mit der rechten Maustaste auf das Windows-Startmenü und wählen Sie Disk Management (Datenträgerverwaltung) aus.

    Windows-Datenträgerverwaltungstool über das Kontextmenü der Windows-Schaltfläche &quot;Start&quot; auswählen.

  3. Falls Sie die lokale SSD noch nicht initialisiert haben, werden Sie nun durch das Tool aufgefordert, ein Partitionierungsschema für die neuen Partitionen festzulegen. Wählen Sie GPT aus und klicken Sie auf OK.

    Partitionsschema im Datenträgerinitialisierungsfenster auswählen

  4. Klicken Sie nach dem Initialisieren der lokalen SSD mit der rechten Maustaste auf den nicht zugewiesenen Speicherplatz und wählen Sie New Simple Volume (Neues einfaches Volume) aus.

    Neues einfaches Volume aus dem angehängten Laufwerk erstellen

  5. Folgen Sie der Anleitung im New Simple Volume Wizard (Assistent zum Erstellen neuer einfacher Volumes), um das neue Volume zu konfigurieren. Sie können ein beliebiges Partitionsformat verwenden. Wählen Sie für dieses Beispiel NTFS aus. Klicken Sie außerdem auf das Kästchen Perform a quick format (Schnellformatierung), um die Formatierung zu beschleunigen.

    Partitionsformattyp im Assistenten zum Erstellen neuer einfacher Volumes auswählen

  6. Prüfen Sie nach Abschluss des Assistenten und der Formatierung des Volumes, ob die neue lokale SSD den Status Healthy hat.

    Liste der von Windows erkannten Laufwerke ansehen und prüfen, ob die lokale SSD den Status &quot;Healthy&quot; hat

Geschafft! Jetzt können Sie Dateien auf der lokalen SSD speichern.

Mehrere lokale SSD-Partitionen in einem logischen Volume formatieren und bereitstellen

Im Gegensatz zu nichtflüchtigen SSDs haben lokale SSDs eine feste Kapazität von 375 GB für jedes an die Instanz angehängte Gerät. Wenn Sie mehrere lokale SSD-Partitionen zu einem logischen Volume kombinieren möchten, müssen Sie die partitionenübergreifende Volumeverwaltung selbst definieren.

Linux-Instanzen

Verwenden Sie mdadm, um ein RAID 0-Array zu erstellen. In diesem Beispiel wird das Array mit einem einzigen ext4-Dateisystem formatiert. Sie können jedoch jedes beliebige Dateisystem anwenden.

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite „VM-Instanzen“

  2. Klicken Sie auf die Schaltfläche SSH neben der Instanz mit der neuen lokalen SSD. Im Browser wird eine Terminalverbindung zur Instanz hergestellt.

  3. Installieren Sie im Terminal das Tool mdadm. Der Installationsprozess für mdadm enthält eine Eingabeaufforderung, mit der Skripts angehalten werden. Führen Sie diesen Prozess daher manuell aus.

    Debian und Ubuntu:

    $ sudo apt update && sudo apt install mdadm --no-install-recommends
    

    CentOS und RHEL:

    $ sudo yum install mdadm -y
    

    SLES und openSUSE:

    $ sudo zypper install -y mdadm
    

  4. Verwenden Sie den Befehl find, um alle lokalen SSDs zu identifizieren, die zusammen bereitgestellt werden sollen.

    In diesem Beispiel sind der Instanz acht lokale SSD-Partitionen im NVMe-Modus zugeordnet:

    $  find /dev/ | grep google-local-nvme-ssd
    
     /dev/disk/by-id/google-local-nvme-ssd-7
     /dev/disk/by-id/google-local-nvme-ssd-6
     /dev/disk/by-id/google-local-nvme-ssd-5
     /dev/disk/by-id/google-local-nvme-ssd-4
     /dev/disk/by-id/google-local-nvme-ssd-3
     /dev/disk/by-id/google-local-nvme-ssd-2
     /dev/disk/by-id/google-local-nvme-ssd-1
     /dev/disk/by-id/google-local-nvme-ssd-0
    

    find garantiert keine Reihenfolge. Die Geräte können auch in einer anderen Reihenfolge aufgelistet werden, solange die Anzahl der Ausgabezeilen der erwarteten Anzahl von SSD-Partitionen entspricht. Lokale SSDs im SCSI-Modus haben Standardnamen wie google-local-ssd. Lokale SSDs im NVMe-Modus haben Namen wie google-local-nvme-ssd.

  5. Mit mdadm können Sie mehrere lokale SSD-Geräte zu einem einzigen Array namens /dev/md0 zusammenfassen. In diesem Beispiel werden acht lokale SSD-Geräte im NVMe-Modus zusammengeführt. Geben Sie für lokale SSD-Geräte im SCSI-Modus die Namen an, die Sie mit dem Befehl find abgerufen haben:

    $ sudo mdadm --create /dev/md0 --level=0 --raid-devices=8 \
     /dev/disk/by-id/google-local-nvme-ssd-0 \
     /dev/disk/by-id/google-local-nvme-ssd-1 \
     /dev/disk/by-id/google-local-nvme-ssd-2 \
     /dev/disk/by-id/google-local-nvme-ssd-3 \
     /dev/disk/by-id/google-local-nvme-ssd-4 \
     /dev/disk/by-id/google-local-nvme-ssd-5 \
     /dev/disk/by-id/google-local-nvme-ssd-6 \
     /dev/disk/by-id/google-local-nvme-ssd-7
    
    mdadm: Defaulting to version 1.2 metadata
    mdadm: array /dev/md0 started.
    
    

    Sie können die Details des Arrays mit mdadm --detail bestätigen. Wenn Sie das Flag --prefer=by-id hinzufügen, werden die Geräte über die Pfade /dev/disk/by-id aufgelistet.

     sudo mdadm --detail --prefer=by-id /dev/md0
     

    Die Ausgabe für jedes Gerät im Array sollte in etwa so aussehen:

     ...
     Number   Major   Minor   RaidDevice State
        0      259      0         0      active sync   /dev/disk/by-id/google-local-nvme-ssd-0
     ...
     

  6. Formatieren Sie das gesamte /dev/md0-Array mit einem ext4-Dateisystem.

    $ sudo mkfs.ext4 -F /dev/md0
    
  7. Erstellen Sie mit dem Befehl ein Verzeichnis, in dem Sie /dev/md0 bereitstellen können. Erstellen Sie für dieses Beispiel das Verzeichnis /mnt/disks/ssd-array:

    $ sudo mkdir -p /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie das lokale SSD-Array bereitstellen möchten.

  8. Stellen Sie das Array /dev/md0 im Verzeichnis /mnt/disks/ssd-array bereit:

    $ sudo mount /dev/md0 /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie das lokale SSD-Array bereitstellen möchten.

  9. Konfigurieren Sie den Lese-/Schreibzugriff auf das Gerät. In diesem Beispiel wird allen Nutzern Schreibzugriff gewährt:

    $ sudo chmod a+w /mnt/disks/[MNT_DIR]
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie das lokale SSD-Array bereitgestellt haben.

Optional können Sie die lokale SSD der Datei /etc/fstab hinzufügen, damit das Gerät bei einem Neustart der Instanz automatisch wieder bereitgestellt wird. Dadurch bleiben die Daten auf der lokalen SSD beim Beenden der Instanz aber nicht erhalten. Weitere Informationen finden Sie unter Datenpersistenz auf lokalen SSDs.

Achten Sie bei Ihrem Eintrag in die Datei /etc/fstab darauf, die Option nofail aufzunehmen, damit die Instanz auch ohne die lokale SSD gestartet werden kann. Wenn Sie beispielsweise einen Snapshot des Bootlaufwerks erzeugen und eine neue Instanz ohne bereitgestellte lokale SSDs erstellen, kann die Instanz den Startvorgang fortsetzen und wird nicht auf unbestimmte Zeit angehalten.

  1. Erstellen Sie den Eintrag /etc/fstab. Suchen Sie mit dem Befehl blkid nach der UUID für das Dateisystem auf dem Gerät und nehmen Sie die UUID in der Datei /etc/fstab in die Bereitstellungsoptionen auf. Geben Sie die Option nofail an, damit das System auch dann starten kann, wenn die lokale SSD nicht verfügbar ist. Sie können diesen Schritt mit einem einzigen Befehl ausführen. Beispiel:

    $ echo UUID=`sudo blkid -s UUID -o value /dev/md0` /mnt/disks/[MNT_DIR] ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
    

    Ersetzen Sie [MNT_DIR] durch das Verzeichnis, in dem Sie das lokale SSD-Array bereitgestellt haben.

  2. Wenn Sie in der Datei /etc/fstab anstelle der UUID einen Gerätenamen wie /dev/md0 verwenden, müssen Sie die Datei /etc/mdadm/mdadm.conf bearbeiten, damit das Array beim Starten automatisch neu zusammengesetzt wird. Dazu müssen Sie die folgenden zwei Schritte ausführen:

    1. Achten Sie darauf, dass das Laufwerk-Array beim Starten automatisch gescannt und neu zusammengesetzt wird.
      $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
      
    2. Aktualisieren Sie initramfs so, dass das Array während des frühen Bootvorgangs verfügbar ist.
      $ sudo update-initramfs -u
      
  3. Prüfen Sie mit dem Befehl cat, ob Ihre /etc/fstab-Einträge korrekt sind:

    $ cat /etc/fstab
    

Wenn Sie einen Snapshot des Bootlaufwerks dieser Instanz erstellen und diesen Snapshot zum Erstellen einer separaten Instanz ohne lokale SSDs verwenden, bearbeiten Sie die Datei /etc/fstab und entfernen Sie den Eintrag für dieses lokale SSD-Array. Auch bei aktivierter Option nofail müssen Sie die Datei /etc/fstab mit den Partitionen synchronisieren, die mit Ihrer Instanz verbunden sind, und diese Einträge entfernen, bevor Sie einen Snapshot Ihres Bootlaufwerks erstellen.

Windows-Instanzen

Mit dem Datenträgerverwaltungstool von Windows können Sie ein Array lokaler SSDs auf einer Windows-Instanz formatieren und bereitstellen.

  1. Stellen Sie über RDP eine Verbindung zur Instanz her. Öffnen Sie für dieses Beispiel die Seite "VM-Instanzen" und klicken Sie neben der Instanz mit den angehängten lokalen SSDs auf die Schaltfläche RDP. Nachdem Sie Nutzername und Passwort eingegeben haben, wird ein Fenster mit der Desktop-Oberfläche Ihres Servers angezeigt.

  2. Klicken Sie mit der rechten Maustaste auf das Windows-Startmenü und wählen Sie Disk Management (Datenträgerverwaltung) aus.

    Windows-Datenträgerverwaltungstool über das Kontextmenü der Windows-Schaltfläche &quot;Start&quot; auswählen.

  3. Falls Sie die lokalen SSDs noch nicht initialisiert haben, werden Sie durch das Tool aufgefordert, ein Partitionierungsschema für die neuen Partitionen festzulegen. Wählen Sie GPT aus und klicken Sie auf OK.

    Partitionsschema im Datenträgerinitialisierungsfenster auswählen

  4. Klicken Sie nach der Initialisierung der lokalen SSD mit der rechten Maustaste auf den nicht zugewiesenen Speicherplatz und wählen Sie New Striped Volume (Neues Stripesetvolume) aus.

    Neues Stripesetvolume aus dem angehängten Laufwerk erstellen

  5. Wählen Sie die lokalen SSD-Partitionen aus, die zu dem Stripesetarray gehören sollen. In diesem Beispiel sollen alle Partitionen zu einem lokalen SSD-Gerät kombiniert werden.

    Die lokalen SSD-Partitionen für das Array auswählen

  6. Befolgen Sie die Anleitung im New Striped Volume Wizard (Assistent zum Erstellen neuer Stripesetvolumes), um das neue Volume zu konfigurieren. Sie können ein beliebiges Partitionsformat verwenden. Wählen Sie für dieses Beispiel NTFS aus. Klicken Sie außerdem auf das Kästchen Perform a quick format (Schnellformatierung), um die Formatierung zu beschleunigen.

    Den Partitionsformattyp im Assistenten zum Erstellen neuer Stripesetvolumes auswählen

  7. Prüfen Sie nach Abschluss des Assistenten und der Formatierung des Volumes, ob die neue lokale SSD den Status Healthy hat.

    Liste der von Windows erkannten Laufwerke ansehen und prüfen, ob die lokale SSD den Status &quot;Healthy&quot; hat

Jetzt können Sie Dateien auf der lokalen SSD speichern.

Nächste Schritte