본문 바로가기
IT/개발환경

리눅스 디스크 (3/4) - 디스크 불륨 확장 VM Extension 사용

by rapker 2023. 5. 16.
반응형
 
가상머신의 확장 기능 사용하기
 
가상머신의 확장 기능을 사용하여 OS 직접 접근하지 않고 디스크 확장하는 방법에 대하여 알아보겠습니다.
 
 
가상머신의 확장 기능은
 
동일한 설정값들을 갖는 가상머신들을 일괄적으로 생성하거나
서비스중인 가상머신과 동일한 설정의 가상머신이 추가로 필요한 경우에 유용하게 사용될 수 있습니다.
 
 
사전공유
 
 
 
 
참고로 Azure Extension을 사용할 수 있는 OS목록 입니다.
 
위 링크의 내용을 살펴보면
  • 지원되지 않는 OS에서 실행하게 되면 'OS지원 안됨' 메세지와 오류코드 51을 반환합니다.
  • Windows
    • Windows Server 2008 R2
    • Windows Server 2012
    • Windows Server 2012 R2
    • Windows 10
    • Windows Server 2016
    • Windows Server 2016 Core
  • Linux

 

728x90
 
 
 
 
 

리눅스 Shell 스크립트 작성

 
리눅스에서 디스크 확장에 대한 명령어들을 sh 스크립트로 작성합니다.
 
 
#!/bin/bash

cp -p /usr/share/zoneinfo/Asia/Seoul /etc/localtime

#OS Disk Size 확장
disk_size=$(fdisk -l | grep "/dev/sda" | awk '{split ($0, arr, ","); print arr[2]}')
#echo $disk_size

byte=${disk_size:0:${#disk_size}-6}
#echo $byte

if [ $byte -gt 34359738368 ]
then
    (echo p;echo d;echo 2;echo n;echo p;echo -ne '\n';echo -ne '\n';echo -ne '\n';echo p;echo w) | fdisk /dev/sda
    partx -u /dev/sda2
    xfs_info /dev/sda2
    xfs_growfs /
    xfs_info /dev/sda2
    df -h
fi

#마운트할 vm 검색
data_disk=$(fdisk -l | grep "/dev/sdc")
exist_yn=${#data_disk}


#디스크 마운트 작업
if [ $exist_yn -gt 0 ]
then
    dir_mount="/data"
    disk="/dev/sdc1"

    (echo n;echo p;echo -ne '\n';echo -ne '\n';echo -ne '\n';echo p;echo w) | fdisk /dev/sdc
    mkdir $dir_mount
    chmod 755 $dir_mount

    mkfs -t ext4 $disk

    echo "disk mount"
    mount $disk $dir_mount

    df -h

    temp=$(blkid grep $disk | awk '{split ($0, arr, " "); print arr[2]}' | awk '{split ($0, arr, "="); print arr[2]}')
    uuid=$(echo $temp | sed 's/^"\(.*\)".*/\1/')

    echo $uuid
    echo "UUID=$uuid $dir_mount                   ext4    defaults,nofail   1 2" >> /etc/fstab

    cat /etc/fstab
fi

#reboot


sudo touch /filename$(date '+%Y-%m-%d__%H-%M-%S').log
 
 
 
 
 
 

스크립트 업로드

 
 
작성된 sh파일을 VM Extension에 등록하려면 어딘가에 업로드 되어 있어야 합니다.
이번에는 azure blob storage에 업로드된 파일을 사용했습니다.
 
VM Extension 등록할때 스크립트의 경로 URL은 아래 URL을 복사하여 참조하면 됩니다.
 
                
 
 
 
 
 
 

VM Extension에 등록

 
 
 
azure cli를 통해 sh 스크립트를 리눅스 가상머신의 확장에 추가 합니다.
 
확장 스크립트가 정상적으로 등록되면 곧바로 sh 스크립트의 내용이 실행됩니다.
확장 추가
$resourceGroupName = 'myResourceGroup'
$vmName = 'myVM'
 
az vm extension set `
  --resource-group $resourceGroupName `
  --vm-name $vmName `
  --name customScript `
  --publisher Microsoft.Azure.Extensions `
  --settings '{"fileUris": ["https://raw.githubusercontent.com/me/project/hello.sh"],"commandToExecute": "./hello.sh"}'
확장 제거
$resourceGroupName = 'myResourceGroup'
$vmName = 'myVM'
 
az vm extension delete `
  --resource-group $resourceGroupName `
  --vm-name $vmName `
  --name customScript
 
포탈에서 확장 등록하는 경우
 
                
 
 
 
확장 스크립트 등록이 정상적으로 완료된후 OS에서 디스크를 확인해보면
 
                
 
 
VM 확장 실행시점 테스트
 
 
VM 확장 스크립트에 아래 내용 작성 후 몇가지 상황에 대한 테스트 결과 입니다.
  • 루트(/) 경로에 시간을 이름으로하는 파일이 생성되는 명령입니다.
 
sudo touch /filename$(date '+%Y-%m-%d__%H-%M-%S').log
위 내용이 포함되어 있는 확장 스크립트를 테스트에 사용하였고 다음 순서로 테스트가 진행되었습니다.
 
  1. 가상머신에 확장이 등록되면 등록즉시 확장 스크립트가 실행되며 로그파일 생성됨
  2. 1번 진행 후 가상머신을 다시 시작하면 로그파일 추가생성 안됨
  3. 2번 진행 후 가상머신을 다시 배포하면 로그파일 추가생성 안됨
  4. 3번 진행 후 가상머신에 확장을 제거 후 다시 등록하면 로그파일 추가 생성됨
 
 
 
 
반응형
LIST