Ajouter un disque persistant à votre VM

Créez et associez un disque non amorçable à votre machine virtuelle (VM) en suivant les instructions de cette page.

Avant de commencer

Pour utiliser les commandes de l'interface de ligne de commande (CLI) gdcloud, assurez-vous d'avoir téléchargé, installé et configuré la CLI gdcloud. Toutes les commandes pour Distributed Cloud utilisent la CLI gdcloud ou kubectl et nécessitent un environnement de système d'exploitation (OS).

Obtenir le chemin d'accès au fichier kubeconfig

Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :

  1. Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.

  2. Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer MANAGEMENT_API_SERVER dans ces instructions.

Demander des autorisations et un accès

Pour effectuer les tâches listées sur cette page, vous devez disposer du rôle Administrateur VirtualMachine du projet. Suivez les étapes pour vérifier que vous disposez du rôle Administrateur VirtualMachine du projet (project-vm-admin) dans l'espace de noms du projet dans lequel réside la VM.

Pour les opérations sur les VM à l'aide de la console GDC ou de la CLI gdcloud, demandez à votre administrateur IAM de projet de vous attribuer le rôle Administrateur de machines virtuelles du projet et le rôle Lecteur du projet (project-viewer).

Associer un disque à une VM

Créez et associez des disques non amorçables à votre VM. Chaque disque supplémentaire peut spécifier une image personnalisée ou un disque vide. Vous pouvez ajouter plusieurs disques à la fois à une VM.

Console

  1. Dans le menu de navigation, cliquez sur Machines virtuelles > Instances.

  2. Dans la liste des VM, cliquez sur le nom d'une VM pour afficher ses détails.

  3. Cliquez sur Ajouter un disque.

  4. Dans la boîte de dialogue de confirmation, cliquez sur Arrêter pour arrêter la VM.

  5. Attendez quelques minutes que la VM s'arrête.

  6. Cliquez sur Actualiser.

  7. Lorsque la VM est à l'état arrêté, cliquez à nouveau sur Ajouter un disque.

  8. Dans la boîte de dialogue "Ajouter un disque", choisissez un nouveau disque ou un disque existant.

    • Pour provisionner un disque, cliquez sur l'onglet Nouveau disque.

      1. Dans le champ Nom du disque, saisissez un nom de disque unique au projet.
      2. Dans le champ Taille, saisissez une taille de disque comprise entre 10 et 65 536 Gio. Par exemple, 10 Gio.
      3. Dans la section Règle de suppression, cliquez sur Conserver le disque ou Supprimer le disque.
    • Pour choisir un disque existant, cliquez sur l'onglet Disque existant.

      1. Dans la liste Disque, sélectionnez un disque.
      2. Dans la section "Règle de suppression", cliquez sur Conserver le disque ou Supprimer le disque.
  9. Cliquez sur Enregistrer. Le disque apparaît dans la liste des disques de la VM.

  10. Redémarrez la VM.

API

  1. Créez un VirtualMachineDisk :

    kubectl --kubeconfig MANAGEMENT_API_SERVER apply -n PROJECT -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: NON_BOOT_BLANK_DISK
    spec:
      size: NON_BOOT_BLANK_DISK_SIZE
    EOF
    
  2. Arrêtez la VM.

  3. Ajoutez VirtualMachineDisk à l'spec.disks VirtualMachine existant :

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    Modifiez les éléments suivants dans votre éditeur de texte :

    ...
    disks:
    - virtualMachineDiskRef:
        name: VM_BOOT_DISK_NAME
        boot: true
    - virtualMachineDiskRef:
        name: NON_BOOT_BLANK_DISK
        autoDelete: false
    ...
    

    Remplacez les variables en utilisant les définitions suivantes.

    VariableDéfinition
    MANAGEMENT_API_SERVER Fichier kubeconfig du serveur de l'API Management.
    PROJECT Projet Google Distributed Cloud air-gapped (GDC) dans lequel créer la VM.
    VM_NAMENom de la nouvelle VM.
    VM_BOOT_DISK_NAMENom du nouveau disque de démarrage de la VM.
    NON_BOOT_BLANK_DISKNom de votre disque supplémentaire.
    NON_BOOT_BLANK_DISK_SIZETaille de vos disques supplémentaires, par exemple 20G.
  4. Démarrez la VM.

Formater et installer un disque non amorçable

Après avoir associé un disque à la VM, effectuez les étapes nécessaires suivantes pour le rendre accessible dans la VM.

Se connecter à la VM

Connectez-vous en SSH à la VM.

Formater le disque

  1. Répertoriez les disques associés à votre instance par numéro de série, puis recherchez le disque que vous souhaitez formater et installer.

    ls -l /dev/disk/by-id/
    

    Cet exemple de résultat affiche les noms des disques sous forme de numéros de série :

       total 0
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda
       lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14
       lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15
       lrwxrwxrwx 1 root root  9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb
    

    Les informations qui suivent la flèche, ->, sur chaque ligne indiquent le nom de l'appareil de disque. Par exemple, dans scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb, le numéro de série est scsi-SQEMU_QEMU_HARDDISK_vm-disk-data et le nom de l'appareil est sdb.

  2. Identifiez le numéro de série de votre disque dans cette liste.

    Comportements importants des fonctionnalités situationnelles qui peuvent affecter la liste des numéros de série :

    • Si la valeur virtualMachineDiskRef.name comporte plus de 20 caractères, seuls les 20 premiers caractères sont utilisés comme numéro de série.
    • S'il existe deux disques avec les mêmes 20 premiers caractères, seul le premier disque possède un numéro de série.
  3. Formatez le disque :

   sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
  • Remplacez DISK_ID par le numéro de série du disque que vous formatez.
  • Pour cet exemple, spécifiez scsi-SQEMU_QEMU_HARDDISK_vm-disk-data pour formater le disque entier sans table de partition.

Pour optimiser les performances du disque, utilisez les options de formatage recommandées dans l'indicateur -E. Comme vous n'avez pas besoin de réserver de l'espace pour le volume racine sur votre disque secondaire, spécifiez -m 0 pour utiliser tout l'espace disque disponible.

Installer le disque

  1. Créez un répertoire qui va servir de point d'installation pour le nouveau disque. Vous pouvez utiliser n'importe quel répertoire. L'exemple suivant crée un répertoire dans /mnt/disks/ :

    sudo mkdir -p /mnt/disks/MOUNT_DIR
    

    Remplacez MOUNT_DIR par le répertoire dans lequel vous souhaitez installer le disque.

  2. Installez le disque sur l'instance et activez l'option "discard" :

    sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    

    Remplacez les éléments suivants :

    • DISK_ID par le numéro de série du disque à installer.
    • MOUNT_DIR par le répertoire dans lequel vous souhaitez installer le disque.
  3. Facultatif : Configurez les autorisations de lecture et d'écriture sur le disque. La commande suivante accorde un accès en écriture, a+w, au disque pour tous les utilisateurs.

    sudo chmod a+w /mnt/disks/MOUNT_DIR
    
  4. Facultatif : Configurez l'installation automatique au redémarrage de la VM à l'aide de l'identifiant unique universel (UUID) ou du script de démarrage.

Configurer l'installation automatique au redémarrage de la VM : UUID du disque

Ajoutez le disque à votre fichier /etc/fstab, afin qu'il soit installé de nouveau automatiquement au redémarrage de la VM. Sur un système d'exploitation (OS), le nom de l'appareil change à chaque redémarrage, mais l'UUID de l'appareil pointe toujours vers le même volume, même lorsque vous déplacez des disques entre les systèmes. Par conséquent, utilisez toujours l'UUID de l'appareil pour configurer l'installation automatique au redémarrage de la VM.

  1. Créez une sauvegarde de votre fichier /etc/fstab actuel :

      sudo cp /etc/fstab /etc/fstab.backup
    
  2. Répertoriez l'UUID du disque :

      sudo blkid /dev/DEVICE_NAME
    

    L'exemple de résultat affiche l'UUID de accc19c5-d0d6-4157-9672-37d4e1d48eb5 pour le disque.

      /dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"
    

    DEVICE_NAME correspond au nom de l'appareil du disque que vous souhaitez installer automatiquement. Si vous avez créé une table de partition sur le disque, spécifiez la partition à installer en ajoutant un suffixe au nom de l'appareil. Par exemple, si sdb est le nom de l'appareil du disque et que vous souhaitez installer la partition 1, DEVICE_NAME devient sdb1.

  3. Ouvrez le fichier /etc/fstab dans un éditeur de texte, puis créez une entrée comprenant l'UUID :

      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

    Remplacez les éléments suivants :

    • UUID_VALUE avec le disque UUID, répertorié dans le résultat de la commande Lister l'UUID.
    • Remplacez MOUNT_DIR par le répertoire dans lequel vous avez installé le disque.
    • MOUNT_OPTION avec la valeur MOUNT_OPTION pour votre OS, qui indique ce que l'OS fait s'il ne peut pas installer le disque au démarrage.
  4. Vérifiez que vos entrées /etc/fstab sont correctes :

      cat /etc/fstab
    

    Voici un exemple de résultat :

      LABEL=cloudimg-rootfs /    ext4   defaults    0 1
      LABEL=UEFI    /boot/efi   vfat    umask=0077  0 1
      UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2
    

Si vous dissociez ce disque ou créez un instantané à partir du disque de démarrage pour cette VM, modifiez le fichier /etc/fstab et supprimez l'entrée correspondant à ce disque. Même si MOUNT_OPTION est défini sur nofail ou nobootwait, gardez le fichier /etc/fstab synchronisé avec les appareils associés à votre VM. Supprimez ces entrées avant de créer l'instantané du disque de démarrage ou de dissocier le disque.

Configurer l'installation automatique au redémarrage de la VM : script de démarrage de la VM

Vous pouvez également utiliser un script de démarrage pour monter le disque à chaque redémarrage en ajoutant les commandes de la section Monter le disque à un script de démarrage. Avant d'ajouter le script pour installer le disque, formatez-le à l'aide des commandes de la section Formater le disque.

  1. Créez le secret du script de démarrage.

    cat <<EOF >>mount-disk-script
    #!/bin/bash
    mkdir -p /mnt/disks/MOUNT_DIR
    mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR
    EOF
    
    kubectl create secret -n PROJECT generic VM_NAME-mount-script --from-file=script=mount-disk-script
    
    rm mount-disk-script
    
  2. Ajoutez le script de démarrage à la VM.

    kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
    

    Modifiez spec.startupScripts pour inclure le nom du secret.

    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachine
    metadata:
    name: VM_NAME
    namespace: PROJECT
    spec:
    …
    startupScripts:
    - name: mount-script
      scriptSecretRef:
        name: VM_NAME-mount-script
    

Pour en savoir plus sur la configuration des scripts de démarrage, consultez.