Поделиться через


Создание секции SWAP для виртуальной машины Linux Azure

Область применения: ✔️ виртуальные машины Linux

Чтобы создать секцию SWAP на виртуальных машинах Linux Azure, необходимо настроить cloud-init, чтобы автоматически создать ее на эфемерном (ресурсе) виртуальной машины. Диск ресурсов подключен /mnt по умолчанию. Он расположен на физическом сервере, на котором размещена виртуальная машина Linux и имеет меньшую задержку. Не рекомендуется создавать секции SWAP на дисках ОС или дисках данных, которые могут повлиять на производительность операционной системы и приложений. Важно помнить, что диск ресурсов никогда не следует использовать для хранения обычных данных, так как это только временное хранилище. При перемещении виртуальной машины на другой узел или остановлен или освобожден, все данные, записанные на этот диск, будут удалены. Рекомендуется использовать диск ресурсов только для данных, которые можно удалить, такие как SWAP и кэширование файлов. Дополнительные сведения см. в разделе "Временный диск".

Отключение создания SWAP в конфигурации waagent

Если создание SWAP настроено в файле /etc/waagent.conf, необходимо отключить его.

  1. Отключите форматирование дисков ресурсов и конфигурацию SWAP в файле /etc/waagent.conf, так как эта задача теперь обрабатывается Cloud-Init. Задайте параметры следующим образом:

    # 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. Перезапустите агент Azure Linux. Сведения о командах перезапуска для разных дистрибутивов Linux см. в статье об обновлении агента Linux на виртуальной машине .

Создание секции SWAP

Вы можете создать секцию SWAP с помощью одного из следующих параметров.

Примечание.

При создании секции SWAP файл буфера также создается на нем.

Вариант 1. Создание секции SWAP в ресурсе или пользовательском пути к диску с помощью скриптов
  1. Создайте скрипт создания SWAP с именем swap.sh в разделе /var/lib/cloud/scripts/per-boot с помощью следующего сценария:

    #!/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
    

    Скрипт будет выполняться при каждой загрузке и выделяет 30 % доступного места на диске ресурса. Вы можете настроить значения на основе вашей ситуации.

  2. Сделайте исполняемый скрипт:

    chmod +x /var/lib/cloud/scripts/per-boot/swap.sh
    
  3. Остановите и запустите виртуальную машину. Остановка и запуск виртуальной машины требуется только в первый раз после создания ФАЙЛА SWAP.

Вариант 2. Создание секции SWAP в пути к диску ресурса с помощью cloud-init
  1. CLOUD_CFG Создайте переменную в файле /systemd/system.conf, чтобы задать как SWAP, так и диск ресурсов:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Создайте ФАЙЛ YAML, который задает точки БУФЕРА, создания диска ресурсов и точки подключения:

    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. Остановите и запустите виртуальную машину или повторно разверните ее, чтобы создать секцию SWAP на диске ресурса.

Вариант 3. Создание секции SWAP в пользовательском пути к диску ресурса с помощью cloud-init
  1. CLOUD_CFG Создайте переменную в файле /systemd/system.conf, чтобы задать как SWAP, так и диск ресурсов:

    sudo echo 'DefaultEnvironment="CLOUD_CFG=/etc/cloud/cloud.cfg.d/00-azure-swap.cfg"' >> /etc/systemd/system.conf
    
  2. Создайте YAML-файл, который задает буфер обмена, создание диска ресурсов и пользовательские точки подключения ("azure" — пример):

    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
    

    Примечание.

    Убедитесь, что пользовательская точка подключения существует в расположении, указанном в YAML-файле.

  3. Остановите и запустите виртуальную машину или повторно разверните ее, чтобы создать секцию SWAP на диске ресурса.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или помощь, создайте запрос на поддержку или попросите сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.