Linux VM에 디스크 추가

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

이 문서에서는 유지 관리 또는 크기 조정으로 인해 VM이 다시 프로비전되더라도 데이터를 유지할 수 있도록 VM에 영구 디스크를 연결하는 방법을 보여 줍니다.

VM에 새 디스크 연결

VM에 새 빈 데이터 디스크를 추가하려는 경우 az vm disk attach 명령에 --new 매개 변수를 사용합니다. VM이 가용성 영역에 있는 경우 VM과 동일한 영역에 디스크가 자동으로 생성됩니다. 자세한 내용은 가용성 영역 개요를 참조하세요. 다음 예제에서는 크기가 50GB이고 이름이 myDataDisk인 디스크를 만듭니다.

az vm disk attach \
   -g myResourceGroup \
   --vm-name myVM \
   --name myDataDisk \
   --new \
   --size-gb 50

짧아진 대기 시간

일부 지역에서는 디스크 연결 대기 시간이 감소하여 최대 15%까지 향상됨을 알 수 있습니다. 이는 계획되거나 계획되지 않은 장애 조치(failover)가 VM 간에 있거나, 워크로드 크기를 조정하거나, Azure Kubernetes Service와 같은 대규모 상태 저장 워크로드를 실행하는 경우에 유용합니다. 그러나 이 성능 향상은 명시적 디스크 연결 명령인 az vm disk attach로 제한됩니다. az vm update와 같이 암시적으로 연결을 수행할 수 있는 명령을 호출하면 성능이 향상되지 않습니다. 이 성능 향상을 확인하기 위해 명시적 연결 명령을 호출하는 것 외에는 아무 작업도 수행할 필요가 없습니다.

짧은 대기 시간은 현재 다음 지역을 제외한 모든 퍼블릭 지역에서 사용할 수 있습니다.

  • 캐나다 중부
  • 미국 중부
  • 미국 동부
  • 미국 동부 2
  • 미국 중남부
  • 미국 서부 2
  • 독일 북부
  • Jio 인도 서부
  • 북유럽
  • 서유럽

기존 디스크 연결

기존 디스크를 연결하려면 디스크 ID를 찾아 az vm disk attach 명령에 ID를 전달합니다. 다음 예제에서는 myResourceGroup에서 이름이 myDataDisk인 디스크를 쿼리한 다음 이름이 myVM인 VM에 연결합니다.

diskId=$(az disk show -g myResourceGroup -n myDataDisk --query 'id' -o tsv)

az vm disk attach -g myResourceGroup --vm-name myVM --name $diskId

디스크 포맷 및 탑재하기

Linux VM에서 사용할 수 있도록 새 디스크를 분할, 포맷 및 탑재하려면 VM에 SSH합니다. 자세한 내용은 Azure에서 Linux와 함께 SSH를 사용하는 방법을 참조하세요. 다음 예제에서는 azureuser를 사용자 이름으로 하는 공용 IP 주소 10.123.123.25를 사용하여 VM에 연결합니다.

ssh azureuser@10.123.123.25

디스크 찾기

VM에 연결한 후 디스크를 찾습니다. 이 예제에서는 lsblk를 사용하여 디스크를 나열합니다.

lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"

다음 예제와 유사하게 출력됩니다.

sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     1:0:1:0      14G
└─sdb1               14G /mnt
sdc     3:0:0:0      50G

여기서는 50G 용량인 디스크 sdc가 바로 찾던 디스크입니다. 여러 디스크를 추가하고 크기만으로 어떤 디스크인지 확실하지 않은 경우 포털에서 VM 페이지로 이동하여 디스크를 선택하고 데이터 디스크에서 디스크의 LUN 번호를 확인할 수 있습니다. 포털의 LUN 번호를 LUN인 출력의 HTCL 부분의 마지막 번호와 비교합니다. 또 다른 옵션은 /dev/disk/azure/scsi1 디렉터리의 콘텐츠를 나열하는 것입니다.

ls -l /dev/disk/azure/scsi1

출력은 다음 예와 유사해야 합니다.

lrwxrwxrwx 1 root root 12 Mar 28 19:41 lun0 -> ../../../sdc

디스크 포맷하기

디스크를 parted로 포맷하는 경우 디스크 크기가 2TiB(tebibytes) 이상일 경우 GPT 분할을 사용해야 하며 2TiB 미만이면 MBR이나 GPT 분할을 사용할 수 있습니다.

참고 항목

배포판에 사용할 수 있는 최신 버전 parted을 사용하는 것이 좋습니다. 디스크 용량이 2TiB 이상인 경우 GPT 분할을 사용해야 합니다. 디스크 용량이 2TiB 미만이라면 MBR 또는 GPT 분할을 사용할 수 있습니다.

다음 예제에서는 대부분의 VM에서 첫 번째 데이터 디스크가 일반적으로 사용하는 환경인 /dev/sdc에서 parted을 사용합니다. sdc을 디스크에 맞는 옵션으로 바꿉니다. XFS 파일 시스템을 사용하여 형식을 지정하기도 합니다.

sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1

partprobe 유틸리티를 사용하여 커널이 새 파티션 및 파일 시스템을 인식하는지 확인합니다. partprobe를 사용하지 않으면 blkid 또는 lslbk 명령이 새 파일 시스템의 UUID를 즉시 반환하지 않을 수 있습니다.

디스크 탑재

이제 mkdir을 사용하여 파일 시스템을 탑재할 디렉터리를 만듭니다. 다음 예제는 /datadrive에 디렉터리를 만듭니다.

sudo mkdir /datadrive

mount를 사용하여 파일 시스템을 탑재합니다. 다음 예제에서는 /dev/sdc1 파티션을 /datadrive 탑재 지점에 탑재합니다.

sudo mount /dev/sdc1 /datadrive

탑재 유지

다시 부팅 후 드라이브가 자동으로 다시 탑재되도록 하려면 /etc/fstab 파일에 추가해야 합니다. 또한 /etc/fstab의 UUID(범용 고유 식별자)를 사용하여 디바이스 이름(예: /dev/sdc1) 대신 드라이브를 조회하는 것을 권장합니다. 부팅하는 동안 OS에서 디스크 오류를 검색하는 경우 UUID를 사용하여 지정된 위치에 탑재되어 있는 잘못된 디스크를 회피합니다. 나머지 데이터 디스크에는 동일한 디바이스 ID가 할당됩니다. 새 드라이브의 UUID를 찾으려면 blkid 유틸리티를 사용합니다.

sudo blkid

출력은 다음 예제와 유사합니다.

/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"

참고 항목

/etc/fstab 파일을 부적절하게 편집하면 부팅할 수 없는 시스템이 발생할 수 있습니다. 확실하지 않은 경우 배포판의 설명서에서 이 파일을 올바르게 편집하는 방법에 대한 자세한 내용을 확인하세요. 또한 편집하기 전에 /etc/fstab 파일의 백업을 만드는 것이 좋습니다.

다음, 텍스트 편집기에서 /etc/fstab 파일을 엽니다. 이전 단계에서 만든 /dev/sdc1 디바이스의 UUID 값과 /datadrive의 탑재 지점을 사용하여 파일 끝에 줄을 추가합니다. 이 문서의 예제를 사용하면 새 줄은 다음과 같습니다.

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2

파일 편집을 마쳤으면 편집기를 저장하고 닫습니다.

또는 다음 명령을 실행하여 /etc/fstab 파일에 디스크를 추가할 수 있습니다.

echo "UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,nofail   1   2" >> /etc/fstab

참고 항목

나중에 fstab을 편집하지 않고 데이터 디스크를 제거하면 VM이 부팅되지 않을 수 있습니다. 대부분의 배포는 nofail 및/또는 nobootwait fstab 옵션을 제공합니다. 이러한 옵션을 사용하면 디스크가 부팅 시 탑재되지 않더라도 시스템을 부팅할 수 있습니다. 이러한 매개 변수에 대한 자세한 내용은 배포 설명서를 참조하세요.

nofail 옵션은 파일 시스템이 손상되었거나 디스크가 부팅 시 존재하지 않더라도 VM이 시작되도록 합니다. 이 옵션이 없으면 FSTAB 오류로 인해 Linux에 SSH를 사용할 수 없음(영문)에 설명되어 있는 동작이 발생할 수 있습니다.

Fstab을 수정하여 부팅 실패가 발생한 경우 Azure VM 직렬 콘솔을 사용하여 VM에 대한 콘솔 액세스를 사용할 수 있습니다. 기타 세부 정보는 직렬 콘솔 설명서를 참조하세요.

Azure에서 Linux에 대한 TRIM/UNMAP 지원

일부 Linux 커널은 디스크에서 사용되지 않은 블록을 버릴 수 있도록 TRIM/UNMAP 작업을 지원합니다. 이 기능은 Azure에 삭제된 페이지가 더 이상 유효하지 않으며 폐기될 수 있음을 알리는 데 주로 유용합니다. 이 기능은 관리되지 않는 표준 디스크 및 디스크 스냅샷과 같이 사용된 스토리지의 양에 따라 청구되는 디스크의 비용을 절감할 수 있습니다.

Linux VM에서 TRIM 지원을 사용하는 두 가지 방법이 있습니다. 평소와 같이 권장되는 방법에 대해 배포에 확인하세요.

  • /etc/fstabdiscard 탑재 옵션을 사용합니다. 예:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   xfs   defaults,discard   1   2
    
  • 경우에 따라 discard 옵션을 사용하면 성능이 저하될 수 있습니다. 또는 fstrim 명령을 명령줄에서 수동으로 실행하거나, 또는 정기적으로 실행하기 위해 crontab에 추가할 수 있습니다.

sudo apt install util-linux
sudo fstrim /datadrive

문제 해결

Linux VM에 데이터 디스크를 추가할 때 디스크가 LUN 0에 존재하지 않으면 오류가 발생할 수 있습니다. Azure 플랫폼에서 적절한 LUN을 확인하도록 하지 않고 az vm disk attach -new 명령을 사용하여 디스크를 수동으로 추가한 후 LUN을 지정하는 경우(--lun) 디스크가 LUN 0에 이미 존재하거나 이 위치에 상주하게 될지 잘 확인해야 합니다.

lsscsi출력의 코드 조각을 보여 주는 다음 예제를 참조하세요.

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

두 개의 데이터 디스크가 LUN 0 및 LUN 1에 존재합니다(lsscsi 출력의 첫 번째 열에 [host:channel:target:lun]이 자세히 나와 있음). 두 디스크는 VM 내에서 액세스할 수 있어야 합니다. 첫 번째 디스크는 LUN 1에 추가되고, 두 번째 디스크는 LUN 2에 추가되도록 수동으로 지정한 경우 VM 내에서 디스크가 제대로 확인되지 않을 수 있습니다.

참고 항목

Azure host 값은 이 예제에서 5이지만, 이 값은 선택한 스토리지 형식 따라 다를 수 있습니다.

이러한 디스크 동작은 Azure 문제가 아니라 Linux 커널이 SCSI 사양을 따르는 방식입니다. Linux 커널이 SCSI 버스에서 연결된 디바이스를 검색할 때 시스템이 추가 디바이스를 계속 검색하기 위해서는 디바이스가 LUN 0에 있어야 합니다. 따라서 다음을 수행해야 합니다.

  • 데이터 디스크를 추가한 후에 lsscsi 의 출력을 검토하여 디스크가 LUN 0에 있는지 확인합니다.
  • 디스크가 VM 내에서 올바르게 표시되지 않으면 디스크가 LUN 0에 있는지 확인합니다.

다음 단계

  • Linux VM을 올바르게 구성했는지 확인하려면 Linux 컴퓨터 성능 최적화 권장 사항을 검토합니다.
  • 더 많은 디스크를 추가하여 스토리지 용량을 확장하고 추가 성능이 필요할 경우 RAID 구성을 수행합니다.