다음을 통해 공유


Linux를 실행하는 가상 머신을 SCSI에서 NVMe로 변환

이 문서에서는 Linux를 실행하는 VM(가상 머신)을 SCSI에서 NVMe 스토리지로 변환하는 프로세스에 대해 설명합니다. NVMe로 마이그레이션하면 향상된 성능과 확장성을 누릴 수 있습니다.

SCSI와 NVMe 비교

Azure VM은 SCSI(Small Computer System Interface)와 NVMe라는 두 가지 유형의 스토리지 인터페이스를 지원합니다. SCSI 인터페이스는 컴퓨터와 주변 디바이스 간의 실제 연결 및 데이터 전송을 제공하는 레거시 표준입니다. NVMe는 연결 및 데이터 전송을 제공한다는 점에서 SCSI와 유사하지만 NVMe는 서버와 스토리지 시스템 간의 데이터 전송을 위한 더 빠르고 효율적인 인터페이스입니다.

참고 항목

신뢰할 수 있는 시작으로 구성된 VM은 SCSI에서 NVMe로 이동할 수 없습니다.

SCSI 인터페이스 VM 지원

Azure는 SCSI 스토리지를 제공하는 VM 제품 버전에서 SCSI 인터페이스를 계속 지원합니다. 그러나 앞으로 일부 새 VM 시리즈에는 SCSI 스토리지가 옵션으로 포함되지 않습니다.

VM에서 변경되는 부분

호스트 인터페이스를 SCSI에서 NVMe로 변경해도 원격 스토리지(OS 디스크 또는 데이터 디스크)는 변경되지 않지만 운영 체제에서 디스크를 보는 방식이 변경됩니다.

SCSI 사용 VM NVMe 사용 VM
OS 디스크 /dev/sda /dev/nvme0n1
임시 디스크 /dev/sdb /dev/sda
첫 번째 데이터 디스크 /dev/sdc /dev/nvme0n2

다음 섹션에서는 이러한 성능 향상을 최대한 활용하고 클라우드 컴퓨팅 환경에서 경쟁 우위를 유지할 수 있도록 Azure Boost를 사용하여 Azure VM을 SCSI에서 NVMe로 변환하는 가이드를 제공합니다.

VM(가상 머신)을 SCSI에서 NVMe로 마이그레이션

SCSI에서 NVMe로 마이그레이션하려면 몇 가지 단계를 따라야 합니다.

  1. 가상 머신 시리즈가 NVMe를 지원하는지 확인
  2. 운영 체제에서 NVMe 준비 상태 확인
  3. 가상 머신을 NVMe로 변환
  4. 운영 체제 확인

1. 가상 머신 시리즈가 NVMe를 지원하는지 확인

NVMe 연결 디스크를 지원하는 지원되는 가상 머신은 가용성 테이블의 Azure Boost 개요 사이트에 설명되어 있습니다.

Important

VM 유형이 나열되지 않은 경우 VM 유형을 변경합니다.

2. 운영 체제에서 NVMe 준비 상태 확인

운영 체제는 NVMe 디바이스를 지원해야 합니다. 예를 들어 부팅 중에 사용되는 임시 파일 시스템인 디바이스 드라이버 및 initrdm을 준비해야 합니다. 또한 SCSI 디바이스 이름(/dev/sdX)을 사용하는지 확인할 때 파일 시스템의 탑재 지점의 유효성을 검사해야 합니다.

이 프로세스를 더 쉽게 만들기 위해 사전 유효성 검사 작업을 수행하는 bash 스크립트를 만들었습니다.

2.1 VM의 컨트롤러 유형 확인

2.1.1 PowerShell을 사용하여 컨트롤러 유형 확인
PS C:\Users\user1> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users\user1> $vm.StorageProfile.DiskControllerType
SCSI
PS C:\Users\user1>
2.1.2 Azure CLI를 사용하여 컨트롤러 유형 확인
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Azure Portal을 사용하여 컨트롤러 유형 확인

컨트롤러를 확인하는 Azure Portal의 스크린샷.

2.2 실행 전 검사 스크립트 실행

bash 스크립트는 시스템에서 자동으로 아무것도 변경하지 않습니다. 실행할 명령에 대한 권장 사항만 제공합니다.

권장 사항은 다음과 같습니다.

  • NVMe 모듈
  • GRUB 구성
  • /etc/fstab에서 디바이스를 확인합니다.

스크립트를 시작하려면 다음 명령(curl)을 사용합니다.

curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
As an alternative you can also use wget:
wget --no-verbose -O - https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
Third option is to download the script from the [GitHub repository](https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/NVMe-Preflight-Check) and run it manually.

nvme-conversion-vm:/home/azureuser # curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
------------------------------------------------
START of script
------------------------------------------------
------------------------------------------------
OK NVMe Module is installed and available on your VM
------------------------------------------------
------------------------------------------------
ERROR NVMe Module is not loaded in the initramfs image.

     mkdir -p /etc/dracut.conf.d
     echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
     dracut -f -v

------------------------------------------------
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 nvme_core.io_timeout=240"
------------------------------------------------
OK GRUB contains timeouts.
------------------------------------------------
------------------------------------------------
OK fstab file doesn't contain device names
------------------------------------------------
Please crosscheck your /etc/fstab file
------------------------------------------------
END of script
------------------------------------------------
nvme-conversion-vm:/home/azureuser #

이 예제에서 initrd 및 커널은 NVMe에 대해 준비되지 않았습니다. dracut 명령을 실행하면 운영 체제가 활성화됩니다.

nvme-conversion-vm:/home/azureuser # mkdir -p /etc/dracut.conf.d
nvme-conversion-vm:/home/azureuser # echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
nvme-conversion-vm:/home/azureuser # dracut -f -v
dracut: Executing: /usr/bin/dracut -f -v
...
dracut: *** Creating initramfs image file '/boot/initrd-5.14.21-150500.55.65-default' done ***
nvme-conversion-vm:/home/azureuser # reboot

3. 가상 머신을 NVMe로 변환

운영 체제를 변환하려면 여러 단계가 필요합니다.

NVMe 기능을 포함하도록 OS 디스크의 메타데이터를 변경합니다. SCSI 컨트롤러를 NVMe로 변경합니다. 이 프로세스는 PowerShell 스크립트를 사용하여 자동화됩니다.

3.1 PowerShell 스크립트 다운로드

GitHub 리포지토리에서 PowerShell 스크립트를 다운로드하려면 다음 명령을 사용합니다.

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-VM-update.ps1" -OutFile ".\azure-nvme-VM-update.ps1"

3.2. Virtual Machine 변환

스크립트 실행을 변환하기 위해 GitHub 리포지토리에서도 자세한 설명서를 사용할 수 있습니다.

예를 들어 재구성 후에 VM을 자동으로 시작할지 여부를 결정할 수 있습니다.

.\azure-nvme-VM-update.ps1 -subscription_id XXXXXXXX-a961-4fb7-88c0-757472230e6c -resource_group_name nvme-conversion -vm_name nvme-conversion-vm -disk_controller_change_to NVMe -vm_size_change_to Standard_E64bds_v5
INFO - OS Disk found
INFO - Access token generated
INFO - Getting VM info
INFO - Getting all VM SKUs available in Region swedencentral
INFO - This will take about a minute ...
INFO - Found VM SKU - Checking for Capabilities
INFO - VM supports NVMe
INFO - Checking for TrustedLaunch
INFO - Checking if VM is stopped and deallocated
INFO - Stopping VM
   Tenant: 72f988bf-86f1-41af-91ab-2d7cd011db47
SubscriptionName SubscriptionId                      Account                Environment
---------------- --------------                      -------                -----------
XX-XX-XX-XX      XXXXXXX-a961-4fb7-88c0-757472230e6c xxxxxx@microsoft.com   AzureCloud

OperationId : cf02d28c-c711-4fe5-89fc-854fba31b67a
Status : Succeeded
StartTime : 07.06.2024 15:18:35
EndTime : 07.06.2024 15:19:17
Error :
Name :

INFO - Setting OS Disk to SCSI/NVMe
INFO - Getting VM config to prepare new config
INFO - Setting new VM size
INFO - Setting disk controller for VM
INFO - Updating the VM configuration

RequestId :
IsSuccessStatusCode : True
StatusCode : OK
ReasonPhrase :

INFO - Not starting VM

3.3 결과 확인

3.3.1 Azure Portal에서 결과 확인

Azure Portal의 스크린샷

3.3.2 PowerShell에서 결과 확인
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. 운영 체제 확인

4.1 디바이스 확인

nvme 명령이 누락된 경우 nvme 명령을 사용하여 디바이스를 확인할 수 있습니다. "nvme-cli" 패키지를 설치합니다.

nvme list

출력에는 OS 디스크와 데이터 디스크가 표시됩니다. OS 디스크 및 데이터 디스크의 스크린샷.

4.2 NVMe용 udev 파일 가져오기(선택 사항)

SCSI 가상 머신에서 waagent(Azure 에이전트)에 통합된 udev 규칙은 데이터 디스크를 식별하는 링크를 /dev/disk/azure/scsi1/lunX 만들었습니다. SCSI는 더 이상 사용되지 않으므로 규칙이 적용되지 않습니다.

NVMe 사용 udev 규칙을 배포하는 데 사용할 수 있는 두 가지 옵션 중 하나를 사용하면 디렉터리에 /dev/disk/azure/data/by-lun새 기호 링크가 표시됩니다. 이 디렉터리가 대체됩니다 /dev/disk/azure/scsi1.

nvme-conversion-vm:/usr/lib/udev/rules.d # ls -l /dev/disk/azure/data/by-lun/
total 0
lrwxrwxrwx 1 root root 19 Jun 7 13:52 0 -> ../../../../nvme0n2
lrwxrwxrwx 1 root root 19 Jun 7 13:52 1 -> ../../../../nvme0n3
nvme-conversion-vm:/usr/lib/udev/rules.d #
4.2.1 udev 파일 수동 다운로드

새 udev 규칙 파일을 다운로드하려면 다음 명령을 사용합니다. curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/88-azure-data-disk.rules --output /usr/lib/udev/rules.d/88-azure-data-disk.rules 를 실행 udevadm control --reload-rules && udevadm trigger 하여 udev 규칙을 다시 로드합니다.

4.2.2 Azure NVMe 유틸리티를 사용하여 패키지 설치 준비 완료

/results/cjp256/azure-nvme-utils/여러 배포의 인덱스에 미리 컴파일된 패키지를 사용할 수 있습니다. 모든 주요 배포에서 Azure NVMe 유틸리티를 사용하도록 설정하고 통합하기 위해 노력하고 있습니다.