Criar uma partição SWAP para uma VM do Azure Linux

Aplica-se a: ✔️ VMs do Linux

Para criar uma partição SWAP em VMs Linux do Azure, você precisa configurar o cloud-init para criá-la automaticamente no disco efêmero (recurso) da VM. O disco de recursos é montado por /mnt padrão. Ele está localizado no servidor físico em que a VM do Linux está hospedada e tem menor latência. Não é recomendável criar partições SWAP em discos do sistema operacional ou discos de dados que possam afetar o desempenho do sistema operacional e dos aplicativos. É importante lembrar que o disco de recursos nunca deve ser usado para armazenar dados regulares, pois é apenas um armazenamento temporário. Quando uma VM é movida para outro host ou interrompida/desalocada, todos os dados gravados nesse disco serão apagados. É recomendável usar o disco de recursos apenas para dados que podem ser removidos, como arquivos SWAP e de cache. Para obter mais informações, consulte Disco temporário.

Desabilitar a criação de SWAP na configuração do waagent

Se a criação de SWAP estiver configurada em /etc/waagent.conf, você deve desativá-la.

  1. Desative a formatação do disco de recursos e a configuração SWAP em /etc/waagent.conf, pois essa tarefa agora é tratada pelo Cloud-Init. Defina os parâmetros da seguinte maneira:

    # Format if unformatted. If 'n', resource disk will not be mounted.
    ResourceDisk.Format=n
    
    # Create and use SWAPfile on resource disk.
    ResourceDisk.EnableSWAP=n
    
    #Mount point for the resource disk
    ResourceDisk.MountPoint=/mnt
    
    #Size of the SWAPfile.
    ResourceDisk.SWAPSizeMB=0
    
  2. Reinicie o Agente Linux do Azure. Consulte Como atualizar o Agente Linux do Azure em uma VM para obter informações sobre os comandos de reinicialização para diferentes distribuições do Linux.

Criar uma partição SWAP

Você pode criar uma partição SWAP usando uma das opções a seguir.

Observação

Quando uma partição SWAP é criada, um arquivo de troca também é criado nela.

Opção 1: criar uma partição SWAP no recurso ou no caminho de disco personalizado usando scripts
  1. Crie um script de criação SWAP chamado swap.sh em /var/lib/cloud/scripts/per-boot com o seguinte script:

    #!/bin/sh
    
    # Percent of space on the ephemeral disk to dedicate to swap. Here 30% is being used. Modify as appropriate.
    PCT=0.3
    
    # Location of the swap file. Modify as appropriate based on the location of the ephemeral disk.
    LOCATION=/mnt
    
    if [ ! -f ${LOCATION}/swapfile ]
    then
    
        # Get size of the ephemeral disk and multiply it by the percent of space to allocate
        size=$(/bin/df -m --output=target,avail | /usr/bin/awk -v percent="$PCT" -v pattern=${LOCATION} '$0 ~ pattern {SIZE=int($2*percent);print SIZE}')
        echo "$size MB of space allocated to swap file"
    
         # Create an empty file first and set correct permissions
        /bin/dd if=/dev/zero of=${LOCATION}/swapfile bs=1M count=$size
        /bin/chmod 0600 ${LOCATION}/swapfile
    
        # Make the file available to use as swap
        /sbin/mkswap ${LOCATION}/swapfile
    fi
    
    # Enable swap
    /sbin/swapon ${LOCATION}/swapfile
    /sbin/swapon -a
    
    # Display current swap status
    /sbin/swapon -s
    

    O script será executado em cada inicialização e aloca 30% do espaço disponível no disco de recursos. Você pode personalizar os valores com base na sua situação.

  2. Torne o script executável:

    chmod +x /var/lib/cloud/scripts/per-boot/swap.sh
    
  3. Pare e inicie a VM. Só é necessário parar e iniciar a VM na primeira vez após a criação do arquivo SWAP.

Opção 2: criar uma partição SWAP no caminho do disco de recurso usando cloud-init
  1. Crie a CLOUD_CFG variável em /systemd/system.conf para definir SWAP e o disco de recurso:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Crie um arquivo YAML que defina SWAP, criação de disco de recurso e pontos de montagem:

    sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    disk_setup:
      ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
      - device: ephemeral0.1
        filesystem: ext4
      - device: ephemeral0.2
        filesystem: swap
    mounts:
      - ["ephemeral0.1", "/mnt"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    
  3. Pare e inicie a VM ou reimplante-a para criar a partição SWAP no disco de recurso.

Opção 3: criar uma partição SWAP no caminho do disco de recurso personalizado usando cloud-init
  1. Crie a CLOUD_CFG variável em /systemd/system.conf para definir SWAP e o disco de recurso:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Crie um arquivo YAML que defina SWAP, criação de disco de recurso e pontos de montagem personalizados ("azure" é um exemplo):

    sudo cat > /etc/cloud/cloud.cfg.d/00-azure-swap.cfg << EOF
    #cloud-config
    disk_setup:
      ephemeral0:
        table_type: mbr
        layout: [66, [33, 82]]
        overwrite: True
    fs_setup:
      - device: ephemeral0.1
        filesystem: ext4
      - device: ephemeral0.2
        filesystem: swap
    mounts:
      - ["ephemeral0.1", "/azure"]
      - ["ephemeral0.2", "none", "swap", "sw,nofail,x-systemd.requires=cloud-init.service,x-systemd.device-timeout=2", "0", "0"]
    EOF
    

    Observação

    Verifique se o ponto de montagem personalizado existe no local especificado no arquivo YAML.

  3. Pare e inicie a VM ou reimplante-a para criar a partição SWAP no disco de recurso.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.