다음을 통해 공유


Linux VM에서 가상 하드 디스크 확장

적용 대상: ✔️ Linux VM ✔️ 유연한 확장 집합

이 문서에서는 Linux VM(가상 머신)에 대한 OS 디스크 및 데이터 디스크 확장에 대해 설명합니다. 더 많은 스토리지 공간을 제공하기 위해 데이터 디스크를 추가하고 기존 데이터 디스크를 확장할 수도 있습니다. OS(운영 체제)에 대한 기본 가상 하드 디스크 크기는 Azure의 Linux VM에서 일반적으로 30GB입니다. 이 문서에서는 OS 디스크 또는 데이터 디스크 확장을 다룹니다. 스트라이프 볼륨의 크기는 확장할 수 없습니다.

OS 디스크의 최대 용량은 4,095GiB입니다. 그러나 많은 운영 체제가 기본적으로 MBR(마스터 부트 레코드)로 분할되어 있습니다. MBR은 사용 가능한 크기를 2TiB로 제한합니다. 2TiB 이상이 필요한 경우 데이터 스토리지를 위해 데이터 디스크를 연결하는 것이 좋습니다. OS 디스크에 데이터를 저장하고 추가 공간이 필요한 경우 GPT(GUID 파티션 테이블)로 변환합니다.

Warning

항상 파일 시스템이 정상 상태이고 디스크 파티션 테이블 형식(GPT 또는 MBR)이 새 크기를 지원하는지 확인하고, 디스크 크기 확장 작업을 수행하기 전에 데이터를 백업해야 합니다. 자세한 내용은 Azure Backup 빠른 시작을 참조하세요.

운영 체제 내에서 Azure 데이터 디스크 개체 식별

데이터 디스크를 확장할 때 VM에 여러 데이터 디스크가 있는 경우 Azure LUN을 Linux 디바이스와 연결하기 어려울 수 있습니다. OS 디스크를 확장해야 하는 경우 Azure Portal에서 OS 디스크로 명확하게 레이블이 지정됩니다.

먼저 df 명령을 사용하여 디스크 사용률, 탑재 지점 및 디바이스 간의 관계를 식별합니다.

df -Th
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/sda1                 xfs        97G  1.8G   95G   2% /
<truncated>
/dev/sdd1                 ext4       32G   30G  727M  98% /opt/db/data
/dev/sde1                 ext4       32G   49M   30G   1% /opt/db/log

예를 들어 /opt/db/data 파일 시스템이 거의 꽉 찼으며 /dev/sdd1 파티션에 있는 것을 볼 수 있습니다. df 출력은 디스크가 디바이스 경로를 사용하여 탑재되는지 또는 fstab의 (기본 설정) UUID를 사용하여 탑재되는지 여부를 디바이스 경로를 보여 줍니다. 또한 파일 시스템의 유형을 나타내는 유형 열을 기록해 둡니다. 형식은 나중에 중요합니다.

이제 /dev/disk/azure/scsi1의 콘텐츠를 조사하여 /dev/sdd와 관련된 LUN을 찾습니다. 다음 ls 명령의 출력은 Azure Portal을 볼 때 Linux OS 내에서 /dev/sdd로 알려진 디바이스가 LUN1에 있음을 보여 줍니다.

sudo ls -alF /dev/disk/azure/scsi1/
total 0
drwxr-xr-x. 2 root root 140 Sep  9 21:54 ./
drwxr-xr-x. 4 root root  80 Sep  9 21:48 ../
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun0 -> ../../../sdc
lrwxrwxrwx. 1 root root  12 Sep  9 21:48 lun1 -> ../../../sdd
lrwxrwxrwx. 1 root root  13 Sep  9 21:48 lun1-part1 -> ../../../sdd1
lrwxrwxrwx. 1 root root  12 Sep  9 21:54 lun2 -> ../../../sde
lrwxrwxrwx. 1 root root  13 Sep  9 21:54 lun2-part1 -> ../../../sde1

Azure Managed Disk 확장

가동 중지 시간 없이 확장

이제 VM 할당을 취소하지 않고도 관리 디스크의 크기를 확장할 수 있습니다. 디스크의 호스트 캐시 설정은 VM의 할당을 취소하지 않으면 데이터 디스크를 확장할 수 있는지 여부를 변경하지 않습니다.

이 기능에는 다음과 같은 제한 사항이 있습니다.

  • 데이터 디스크에만 지원됩니다.
  • 표준 HDD, 표준 SSD 또는 프리미엄 SSD 디스크가 4TiB 이하인 경우 VM의 할당을 취소하고 디스크를 분리한 후 4TiB 이상으로 확장합니다. 이러한 디스크 유형 중 하나가 이미 4TiB보다 큰 경우에는 VM의 할당을 취소하거나 디스크를 분리하지 않고도 디스크를 확장할 수 있습니다. 프리미엄 SSD v2 또는 Ultra Disks에는 적용되지 않습니다.
  • 공유 디스크에는 지원되지 않습니다.
  • 다음 중 하나를 설치하여 사용합니다.
  • 일부 클래식 VM에서는 사용할 수 없습니다. 이 스크립트를 사용하여 가동 중지 시간 없이 확장을 지원하는 클래식 VM SKU 목록을 가져옵니다.

Ultra Disk 및 Premium SSD v2를 사용하여 확장

Ultra Disks 및 Premium SSD v2 디스크를 확장하면 다음과 같은 추가 제한 사항이 있습니다.

  • 스냅샷에서 디스크를 하이드레이션하는 경우처럼 해당 디스크에서 데이터의 백그라운드 복사본이 생성되는 동안에는 디스크를 확장할 수 없습니다.
  • 가동 중지 시간 없이 Ultra Disks 또는 프리미엄 SSD v2 디스크에 NVMe 컨트롤러를 사용하는 VM은 확장할 수 없습니다.

국가별 가용성

Ultra Disks 및 Premium SSD v2 디스크 크기 조정은 현재 다음을 제외한 모든 프리미엄 SSD v2 및 Ultra 지원 지역에서 사용할 수 있습니다.

  • 미국 서부 2
  • 서유럽
  • 미국 동부

Azure Managed Disks 확장

최신 Azure CLI를 설치하고 az login을 사용하여 Azure 계정에 로그인했는지 확인합니다.

이 문서는 Azure에 데이터 디스크가 하나 이상 연결되고 준비된 기존 VM이 필요합니다. 사용할 수 있는 VM이 아직 없는 경우 데이터 디스크로 VM 만들기 및 준비를 참조하세요.

다음 샘플에서는 예제 매개 변수 이름(예: myResourceGroupmyVM)을 사용자의 고유한 값으로 바꿉니다.

Important

디스크가 가동 중지 시간 없이 확장의 요구 사항을 충족하는 경우 1단계와 3단계를 건너뛸 수 있습니다.

기존 디스크를 축소하는 것은 지원되지 않으며 데이터가 손실될 수 있습니다.

디스크를 확장한 후 더 큰 디스크를 활용하려면 운영 체제에서 볼륨을 확장해야 합니다.

  1. VM이 실행되고 있으면 가상 하드 디스크에 대한 작업을 수행할 수 없습니다. az vm deallocate를 사용하여 VM의 할당을 취소합니다. 다음 예제에서는 리소스 그룹 myResourceGroup에서 myVM이라는 VM의 할당을 취소합니다.

    az vm deallocate --resource-group myResourceGroup --name myVM
    

    참고 항목

    VM 할당을 취소하여 가상 하드 디스크를 확장해야 합니다. az vm stop을 사용하여 VM을 중지해도 컴퓨팅 리소스는 해제되지 않습니다. 컴퓨팅 리소스를 릴리스하려면 az vm deallocate을 사용합니다.

  2. 이제 az disk list를 사용하여 리소스 그룹에서 Managed Disks 목록을 봅니다. 다음 예제에서는 리소스 그룹 myResourceGroup의 Managed Disks 목록을 표시합니다.

    az disk list \
        --resource-group myResourceGroup  \
        --query '[*].{Name:name,size:diskSizeGB,Tier:sku.tier}' \
        --output table
    

    az disk update를 사용하여 필요한 디스크를 확장합니다. 다음 예제에서는 myDataDisk라는 관리 디스크를 200GB로 확장합니다.

    az disk update \
        --resource-group myResourceGroup \
        --name myDataDisk \
        --size-gb 200
    

    참고 항목

    관리 디스크를 확장하면 업데이트된 크기가 가장 가까운 관리 디스크의 크기로 반올림됩니다. 사용 가능한 관리 디스크 크기 및 계층의 테이블은 Azure Disk Storage 청구 이해를 참조 하세요.

  3. az vm start를 사용하여 VM을 시작합니다. 다음 예제에서는 리소스 그룹 myResourceGroup에서 myVM이라는 VM을 시작합니다.

    az vm start --resource-group myResourceGroup --name myVM
    

디스크 파티션 및 파일 시스템 확장

참고 항목

파티션 크기를 조정하는 데 사용할 수 있는 많은 도구가 있지만 이 문서의 나머지 부분에서 자세히 설명하는 도구는 cloud-init와 같이 자동화된 특정 프로세스에서 사용하는 도구와 동일합니다. 여기서 설명한 대로 fdisk와 같은 일부 도구의 이전 버전에서는 GPT를 지원하지 않았기 때문에 gdisk 패키지가 포함된 growpart 도구는 GPT(GUID 파티션 테이블) 디스크와 일반적으로 호환됩니다.

변경된 디스크 크기 검색

앞에서 언급한 절차를 사용하여 가동 중지 시간 없이 데이터 디스크를 확장한 경우 디바이스가 다시 검사될 때까지 보고된 디스크 크기가 변경되지 않습니다. 이는 일반적으로 부팅 프로세스 중에만 발생합니다. 이러한 다시 검사는 필요 시 다음 절차에 따라 호출할 수 있습니다. 이 예제에서는 데이터 디스크가 현재 /dev/sda이고 256GiB에서 512GiB로 크기가 조정된 이 문서의 메서드를 사용합니다.

  1. fdisk -l /dev/sda의 첫 번째 출력 줄에서 현재 인식된 크기를 식별합니다.

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 256 GiB, 274877906944 bytes, 536870912 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    
  2. 이 디바이스에 대해 다시 검색한 파일에 1 문자를 삽입합니다. 예제에서 sda에 대한 참조를 확인합니다. 다른 디스크 디바이스의 크기를 조정하면 디스크 식별자가 변경됩니다.

    echo 1 | sudo tee /sys/class/block/sda/device/rescan
    
  3. 이제 새 디스크 크기가 인식되는지 확인합니다.

    sudo fdisk -l /dev/sda
    
    Disk /dev/sda: 512 GiB, 549755813888 bytes, 1073741824 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disklabel type: dos
    Disk identifier: 0x43d10aad
    
    Device     Boot Start       End   Sectors  Size Id Type
    /dev/sda1        2048 536870878 536868831  256G 83 Linux
    

이 문서의 나머지 부분에서는 OS 수준에서 볼륨 크기를 늘리는 절차에 대한 예제에 OS 디스크를 사용합니다. 확장된 디스크가 데이터 디스크인 경우 데이터 디스크 디바이스를 식별하는 데 이전 지침을 사용하고, 필요에 따라 데이터 디스크 디바이스(예: /dev/sda), 파티션 번호, 볼륨 이름, 탑재 지점 및 파일 시스템 형식 대체를 지침으로 따릅니다.

모든 Linux OS 지침은 일반 지침으로 간주해야 하며 모든 배포에 적용될 수 있지만, 일반적으로 명명된 마켓플레이스 게시자의 규칙과 일치합니다. Red Hat 또는 Red Hat 호환성 클레임을 기반으로 하는 배포에 대한 패키지 요구 사항에 대한 Red Hat 문서를 참조하세요.

OS 디스크의 크기 늘리기

다음 지침은 보증된 Linux 보증 배포판에 적용됩니다.

참고 항목

계속하기 전에 VM의 전체 백업 복사본을 만들거나 최소한 OS 디스크의 스냅샷을 만드세요.

Ubuntu 16.x 이상에서는 크기 조정 작업을 위한 약간의 여유 공간이 있는 경우 OS 디스크 및 파일 시스템의 루트 파티션이 cloud-init에 의해 루트 디스크의 모든 사용 가능한 연속 공간을 활용하도록 자동으로 확장됩니다. 이 경우 시퀀스는 간단합니다.

  1. 이전에 설명한 대로 OS 디스크의 크기를 늘립니다.
  2. VM을 다시 시작한 다음 루트 사용자 계정을 사용하여 VM에 액세스합니다.
  3. OS 디스크에 늘어난 파일 시스템 크기가 표시되는지 확인합니다.

다음 예제와 같이 OS 디스크의 크기는 포털에서 100GB로 조정되었습니다. /에 탑재된 /dev/sda1 파일 시스템이 이제 97GB로 표시됩니다.

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  314M     0  314M   0% /dev
tmpfs          tmpfs      65M  2.3M   63M   4% /run
/dev/sda1      ext4       97G  1.8G   95G   2% /
tmpfs          tmpfs     324M     0  324M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     324M     0  324M   0% /sys/fs/cgroup
/dev/sda15     vfat      105M  3.6M  101M   4% /boot/efi
/dev/sdb1      ext4       20G   44M   19G   1% /mnt
tmpfs          tmpfs      65M     0   65M   0% /run/user/1000
user@ubuntu:~#

가동 중지 시간 없는 클래식 VM SKU 지원을 확장합니다.

클래식 VM SKU를 사용하는 경우 가동 중지 시간 없는 디스크 확장을 지원하지 않을 수 있습니다.

다음 PowerShell 스크립트를 사용하여 사용할 수 있는 VM SKU를 확인합니다.

Connect-AzAccount
$subscriptionId="yourSubID"
$location="desiredRegion"
Set-AzContext -Subscription $subscriptionId
$vmSizes=Get-AzComputeResourceSku -Location $location | where{$_.ResourceType -eq 'virtualMachines'}

foreach($vmSize in $vmSizes){
    foreach($capability in $vmSize.Capabilities)
    {
       if(($capability.Name -eq "EphemeralOSDiskSupported" -and $capability.Value -eq "True") -or ($capability.Name -eq "PremiumIO" -and $capability.Value -eq "True") -or ($capability.Name -eq "HyperVGenerations" -and $capability.Value -match "V2"))
        {
            $vmSize.Name
       }
   }
}