반응형
가상머신의 확장 기능 사용하기
가상머신의 확장 기능을 사용하여 OS 직접 접근하지 않고 디스크 확장하는 방법에 대하여 알아보겠습니다.
가상머신의 확장 기능은
동일한 설정값들을 갖는 가상머신들을 일괄적으로 생성하거나
서비스중인 가상머신과 동일한 설정의 가상머신이 추가로 필요한 경우에 유용하게 사용될 수 있습니다.
사전공유
-
리눅스 가상머신에 VM 확장 (Azure Extension) 기능을 활용하는 방법이 주된 내용이고
-
Extension 으로 실행되는 내용은 리눅스 디스크 - 디스크 볼륨 확장에 대한 내용입니다.
참고로 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
-
Endorsed Linux operating systems, except CoreOS and OpenSUSE
-
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에 등록
리눅스 VM 확장 실행 공식 문서
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번 진행 후 가상머신을 다시 배포하면 로그파일 추가생성 안됨
-
3번 진행 후 가상머신에 확장을 제거 후 다시 등록하면 로그파일 추가 생성됨
반응형
LIST
'IT > 개발환경' 카테고리의 다른 글
Windows Update 정책 변경 (테스트 과정 포함) (0) | 2023.05.16 |
---|---|
리눅스 디스크 (4/4) - Raid 0 구성 (0) | 2023.05.16 |
리눅스 디스크 (2/4) - 디스크 볼륨 확장 (0) | 2023.05.16 |
macOS 배포 인증서 생성하기 (0) | 2023.05.12 |
CentOS 방화벽 끄기 (0) | 2023.05.11 |