Azure Linux VM에 대한 SWAP 파티션 만들기

Azure Linux VM에서 SWAP 파티션을 만들려면 VM의 임시(리소스) 디스크에 자동으로 만들도록 cloud-init를 설정해야 합니다. 리소스 디스크는 기본적으로 아래에 /mnt 탑재됩니다. Linux VM이 호스트되고 대기 시간이 짧은 실제 서버에 있습니다. 운영 체제 및 앱의 성능에 영향을 미칠 수 있는 OS 디스크 또는 데이터 디스크에 SWAP 파티션을 만드는 것은 권장되지 않습니다. 리소스 디스크는 임시 스토리지일 뿐이므로 일반 데이터를 저장하는 데 사용해서는 안 된다는 점을 기억해야 합니다. VM이 다른 호스트로 이동되거나 중지/할당 취소되면 이 디스크에 기록된 모든 데이터가 초기화됩니다. SWAP 및 캐싱 파일과 같이 제거할 수 있는 데이터에만 리소스 디스크를 사용하는 것이 좋습니다. 자세한 내용은 임시 디스크를 참조하세요.

waagent 구성에서 SWAP 만들기 사용 안 함

SWAP 만들기가 /etc/waagent.conf에 구성된 경우 사용하지 않도록 설정해야 합니다.

  1. 이 작업은 이제 Cloud-Init에서 처리되므로 /etc/waagent.conf 내에서 리소스 디스크 서식 지정 및 SWAP 구성을 사용하지 않도록 설정합니다. 매개 변수를 다음과 같이 설정합니다.

    # 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 배포에 대한 다시 시작 명령에 대한 자세한 내용은 VM에서 Azure Linux 에이전트를 업데이트하는 방법을 참조하세요.

SWAP 파티션 만들기

다음 옵션 중 하나를 사용하여 SWAP 파티션을 만들 수 있습니다.

참고

SWAP 파티션이 만들어지면 스왑 파일도 만들어집니다.

옵션 1: 스크립트를 사용하여 리소스 또는 사용자 지정 디스크 경로 아래에 SWAP 파티션 만들기
  1. 다음 스크립트를 사용하여 /var/lib/cloud/scripts/per-boot 아래에 swap.sh 라는 SWAP 만들기 스크립트를 만듭니다.

    #!/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. VM을 중지하고 시작합니다. VM을 중지하고 시작하는 것은 SWAP 파일을 만든 후에만 처음 필요합니다.

옵션 2: cloud-init를 사용하여 리소스 디스크 경로 아래에 SWAP 파티션 만들기
  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. SWAP, 리소스 디스크 만들기 및 탑재 지점을 설정하는 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. VM을 중지하고 시작하거나 다시 배포하여 리소스 디스크에 SWAP 파티션을 만듭니다.

옵션 3: cloud-init를 사용하여 사용자 지정 리소스 디스크 경로 아래에 SWAP 파티션 만들기
  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. SWAP, 리소스 디스크 만들기 및 사용자 지정 탑재 지점을 설정하는 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. VM을 중지하고 시작하거나 다시 배포하여 리소스 디스크에 SWAP 파티션을 만듭니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.