Linux VM에 디스크 추가Add a disk to a Linux VM

이 문서에서는 유지 관리 또는 크기 조정으로 인해 VM이 다시 프로비전되더라도 데이터를 유지할 수 있도록 VM에 영구 디스크를 연결하는 방법을 보여 줍니다.This article shows you how to attach a persistent disk to your VM so that you can preserve your data - even if your VM is reprovisioned due to maintenance or resizing.

VM에 새 디스크 연결Attach a new disk to a VM

VM에 새 빈 데이터 디스크를 추가하려는 경우 az vm disk attach 명령에 --new 매개 변수를 사용합니다.If you want to add a new, empty data disk on your VM, use the az vm disk attach command with the --new parameter. VM이 가용성 영역에 있는 경우 VM과 동일한 영역에 디스크가 자동으로 생성됩니다.If your VM is in an Availability Zone, the disk is automatically created in the same zone as the VM. 자세한 내용은 가용성 영역 개요를 참조하세요.For more information, see Overview of Availability Zones. 다음 예제에서는 크기가 50GB이고 이름이 myDataDisk인 디스크를 만듭니다.The following example creates a disk named myDataDisk that is 50 Gb in size:

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

기존 디스크 연결Attach an existing disk

기존 디스크를 연결하려면 디스크 ID를 찾아 az vm disk attach 명령에 ID를 전달합니다.To attach an existing disk, find the disk ID and pass the ID to the az vm disk attach command. 다음 예제에서는 myResourceGroup에서 이름이 myDataDisk인 디스크를 쿼리한 다음 이름이 myVM인 VM에 연결합니다.The following example queries for a disk named myDataDisk in myResourceGroup, then attaches it to the VM named myVM:

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에 연결하여 새 디스크 탑재Connect to the Linux VM to mount the new disk

Linux VM에서 사용할 수 있도록 새 디스크를 분할, 포맷 및 탑재하려면 VM에 SSH합니다.To partition, format, and mount your new disk so your Linux VM can use it, SSH into your VM. 자세한 내용은 Azure에서 Linux와 함께 SSH를 사용하는 방법을 참조하세요.For more information, see How to use SSH with Linux on Azure. 다음 예제에서는 사용자 이름 azureuser를 사용하여 공용 DNS 항목이인 VM에 연결합니다.The following example connects to a VM with the public DNS entry of with the username azureuser:


VM에 연결하고 나면 디스크를 연결할 준비가 되었습니다.Once connected to your VM, you're ready to attach a disk. 먼저 dmesg를 사용하여 디스크를 찾습니다(새 디스크를 찾는 데 사용하는 방법은 다를 수 있습니다).First, find the disk using dmesg (the method you use to discover your new disk may vary). 다음 예제에서는 dmesg를 사용하여 SCSI 디스크를 필터링합니다.The following example uses dmesg to filter on SCSI disks:

dmesg | grep SCSI

다음 예제와 유사하게 출력됩니다.The output is similar to the following example:

[    0.294784] SCSI subsystem initialized
[    0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    7.110271] sd 2:0:0:0: [sda] Attached SCSI disk
[    8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk
[ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk


Fdisk의 최신 버전을 사용 하거나 parted 하는 것이 좋습니다는 해당 배포에 사용할 수 있습니다.It is recommended that you use the latest versions of fdisk or parted that are available for your distro.

여기서 sdc는 원하는 디스크입니다.Here, sdc is the disk that we want. parted를 사용하여 디스크를 분할합니다. 디스크 크기가 2테비바이트(TiB) 이상이면 GPT 분할을 사용해야 하고, 2TiB 미만이면 MBR 또는 GPT 분할을 사용하면 됩니다.Partition the disk with parted, if the disk size is 2 tebibytes (TiB) or larger then you must use GPT partitioning, if it is under 2TiB, then you can use either MBR or GPT partitioning. MBR 분할을 사용하는 경우 fdisk를 사용할 수 있습니다.If you're using MBR partitioning, you can use fdisk. 파티션 1에 기본 디스크를 만들고, 나머지는 기본값을 적용합니다.Make it a primary disk on partition 1, and accept the other defaults. 다음 예제에서는 /dev/sdc에서 fdisk 프로세스를 시작합니다.The following example starts the fdisk process on /dev/sdc:

sudo fdisk /dev/sdc

새 파티션을 추가하려면 n 명령을 사용합니다.Use the n command to add a new partition. 이 예제에서는 주 파티션에 대해 p를 선택하고 기본 값의 나머지를 적용합니다.In this example, we also choose p for a primary partition and accept the rest of the default values. 다음 예제와 유사하게 출력됩니다.The output will be similar to the following example:

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x2a59b123.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759

p를 입력하여 파티션 테이블을 인쇄한 다음, w를 사용하여 디스크에 테이블을 쓰고 종료합니다.Print the partition table by typing p and then use w to write the table to disk and exit. 출력은 다음 예제와 비슷해야 합니다.The output should look similar to the following example:

Command (m for help): p

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2a59b123

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    10485759     5241856   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

사용 된 커널 업데이트를 알아보려면 아래 명령의:Use the below command to update the kernel:


이제 mkfs 명령을 사용하여 파티션에 파일 시스템을 씁니다.Now, write a file system to the partition with the mkfs command. 파일 시스템 형식 및 디바이스 이름을 지정합니다.Specify your filesystem type and the device name. 다음 예제에서는 이전 단계에서 만든 /dev/sdc1 파티션에 ext4 파일 시스템을 만듭니다.The following example creates an ext4 filesystem on the /dev/sdc1 partition that was created in the preceding steps:

sudo mkfs -t ext4 /dev/sdc1

다음 예제와 유사하게 출력됩니다.The output is similar to the following example:

mke2fs 1.42.9 (4-Feb-2014)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310464 blocks
65523 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

이제 mkdir을 사용하여 파일 시스템을 탑재할 디렉터리를 만듭니다.Now, create a directory to mount the file system using mkdir. 다음 예제에서는 /datadrive에 디렉터리를 만듭니다.The following example creates a directory at /datadrive:

sudo mkdir /datadrive

mount를 사용하여 파일 시스템을 탑재합니다.Use mount to then mount the filesystem. 다음 예제에서는 /dev/sdc1 파티션을 /datadrive 탑재 지점에 탑재합니다.The following example mounts the /dev/sdc1 partition to the /datadrive mount point:

sudo mount /dev/sdc1 /datadrive

다시 부팅 후 드라이브가 자동으로 다시 탑재되도록 하려면 /etc/fstab 파일에 추가해야 합니다.To ensure that the drive is remounted automatically after a reboot, it must be added to the /etc/fstab file. 또한 /etc/fstab에 UUID(Universally Unique IDentifier)를 사용하여 디바이스 이름(예: /dev/sdc1) 대신 드라이브를 가리키는 것이 좋습니다.It is also highly recommended that the UUID (Universally Unique IDentifier) is used in /etc/fstab to refer to the drive rather than just the device name (such as, /dev/sdc1). 부팅하는 동안 OS에서 디스크 오류를 검색하는 경우 UUID를 사용하여 지정된 위치에 탑재되어 있는 잘못된 디스크를 회피합니다.If the OS detects a disk error during boot, using the UUID avoids the incorrect disk being mounted to a given location. 그런 다음, 남아 있는 데이터 디스크를 동일한 디바이스 ID에 할당합니다.Remaining data disks would then be assigned those same device IDs. 새 드라이브의 UUID를 찾으려면 blkid 유틸리티를 사용합니다.To find the UUID of the new drive, use the blkid utility:

sudo blkid

출력은 다음 예제와 유사합니다.The output looks similar to the following example:

/dev/sda1: UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="ext4"


/etc/fstab 파일을 부적절하게 편집하면 부팅할 수 없는 시스템이 발생할 수 있습니다.Improperly editing the /etc/fstab file could result in an unbootable system. 확실하지 않은 경우 배포 설명서에서 이 파일을 제대로 편집하는 방법에 대한 자세한 내용을 확인하세요.If unsure, refer to the distribution's documentation for information on how to properly edit this file. 또한 편집하기 전에 /etc/fstab 파일의 백업을 만드는 것이 좋습니다.It is also recommended that a backup of the /etc/fstab file is created before editing.

텍스트 편집기에서 다음과 같이 /etc/fstab 파일을 엽니다.Next, open the /etc/fstab file in a text editor as follows:

sudo vi /etc/fstab

이 예제에서는 이전 단계에서 만든 /dev/sdc1 디바이스의 UUID 값과 탑재 지점 /datadrive를 사용합니다.In this example, use the UUID value for the /dev/sdc1 device that was created in the previous steps, and the mountpoint of /datadrive. /etc/fstab 파일의 끝에 다음 줄을 추가합니다.Add the following line to the end of the /etc/fstab file:

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


나중에 fstab을 편집하지 않고 데이터 디스크를 제거하면 VM이 부팅되지 않을 수 있습니다.Later removing a data disk without editing fstab could cause the VM to fail to boot. 대부분의 배포는 nofail 및/또는 nobootwait fstab 옵션을 제공합니다.Most distributions provide either the nofail and/or nobootwait fstab options. 이러한 옵션을 사용하면 디스크가 부팅 시 탑재되지 않더라도 시스템을 부팅할 수 있습니다.These options allow a system to boot even if the disk fails to mount at boot time. 이러한 매개 변수에 대한 자세한 내용은 배포 설명서를 참조하세요.Consult your distribution's documentation for more information on these parameters.

nofail 옵션은 파일 시스템이 손상되었거나 디스크가 부팅 시 존재하지 않더라도 VM이 시작되도록 합니다.The nofail option ensures that the VM starts even if the filesystem is corrupt or the disk does not exist at boot time. 이 옵션이 없으면 FSTAB 오류로 인해 Linux에 SSH를 사용할 수 없음(영문)에 설명되어 있는 동작이 발생할 수 있습니다.Without this option, you may encounter behavior as described in Cannot SSH to Linux VM due to FSTAB errors

Azure VM의 직렬 콘솔에서 부팅 오류가 발생 했습니다 fstab을 수정 하는 경우 VM에 대 한 콘솔 액세스에 사용할 수 있습니다.The Azure VM Serial Console can be used for console access to your VM if modifying fstab has resulted in a boot failure. 자세한 내용은 합니다 직렬 콘솔 설명서합니다.More details are available in the Serial Console documentation.

Azure에서 Linux에 대한 TRIM/UNMAP 지원TRIM/UNMAP support for Linux in Azure

일부 Linux 커널은 디스크에서 사용되지 않은 블록을 버릴 수 있도록 TRIM/UNMAP 작업을 지원합니다.Some Linux kernels support TRIM/UNMAP operations to discard unused blocks on the disk. 이 기능은 삭제된 페이지가 더 이상 유효하지 않으며 폐기될 수 있음을 Azure에 알리기 위해 표준 스토리지에서 주로 유용하며, 큰 파일을 만들고 삭제하는 경우 비용을 절약할 수 있습니다.This feature is primarily useful in standard storage to inform Azure that deleted pages are no longer valid and can be discarded, and can save money if you create large files and then delete them.

Linux VM에서 TRIM 지원을 사용하는 두 가지 방법이 있습니다.There are two ways to enable TRIM support in your Linux VM. 평소와 같이 권장되는 방법에 대해 배포에 확인하세요.As usual, consult your distribution for the recommended approach:

  • /etc/fstabdiscard 탑재 옵션을 사용합니다. 예:Use the discard mount option in /etc/fstab, for example:

    UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /datadrive   ext4   defaults,discard   1   2
  • 경우에 따라 discard 옵션을 사용하면 성능이 저하될 수 있습니다.In some cases, the discard option may have performance implications. 또는 fstrim 명령을 명령줄에서 수동으로 실행하거나, 또는 정기적으로 실행하기 위해 crontab에 추가할 수 있습니다.Alternatively, you can run the fstrim command manually from the command line, or add it to your crontab to run regularly:


    sudo apt-get install util-linux
    sudo fstrim /datadrive


    sudo yum install util-linux
    sudo fstrim /datadrive

문제 해결Troubleshooting

Linux VM에 데이터 디스크를 추가할 때 디스크가 LUN 0에 존재하지 않으면 오류가 발생할 수 있습니다.When adding data disks to a Linux VM, you may encounter errors if a disk does not exist at LUN 0. Azure 플랫폼에서 적절한 LUN을 확인하도록 하지 않고 azure vm disk attach-new 명령을 사용하여 디스크를 수동으로 추가한 후 LUN을 지정하는 경우(--lun) 디스크가 LUN 0에 이미 존재하거나 이 위치에 상주하게 될지 잘 확인해야 합니다.If you are adding a disk manually using the azure vm disk attach-new command and you specify a LUN (--lun) rather than allowing the Azure platform to determine the appropriate LUN, take care that a disk already exists / will exist at LUN 0.

lsscsi출력의 코드 조각을 보여 주는 다음 예제를 참조하세요.Consider the following example showing a snippet of the output from 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]이 자세히 나와 있음).The two data disks exist at LUN 0 and LUN 1 (the first column in the lsscsi output details [host:channel:target:lun]). 두 디스크는 VM 내에서 액세스할 수 있어야 합니다.Both disks should be accessible from within the VM. 첫 번째 디스크는 LUN 1에 추가되고, 두 번째 디스크는 LUN 2에 추가되도록 수동으로 지정한 경우 VM 내에서 디스크가 제대로 확인되지 않을 수 있습니다.If you had manually specified the first disk to be added at LUN 1 and the second disk at LUN 2, you may not see the disks correctly from within your VM.


Azure host 값은 이 예제에서 5이지만, 이 값은 선택한 스토리지 형식 따라 다를 수 있습니다.The Azure host value is 5 in these examples, but this may vary depending on the type of storage you select.

이러한 디스크 동작은 Azure 문제가 아니라 Linux 커널이 SCSI 사양을 따르는 방식입니다.This disk behavior is not an Azure problem, but the way in which the Linux kernel follows the SCSI specifications. Linux 커널이 SCSI 버스에서 연결된 디바이스를 검색할 때 시스템이 추가 디바이스를 계속 검색하기 위해서는 디바이스가 LUN 0에 있어야 합니다.When the Linux kernel scans the SCSI bus for attached devices, a device must be found at LUN 0 in order for the system to continue scanning for additional devices. 따라서 다음을 수행해야 합니다.As such:

  • 데이터 디스크를 추가한 후에 lsscsi 의 출력을 검토하여 디스크가 LUN 0에 있는지 확인합니다.Review the output of lsscsi after adding a data disk to verify that you have a disk at LUN 0.
  • 디스크가 VM 내에서 올바르게 표시되지 않으면 디스크가 LUN 0에 있는지 확인합니다.If your disk does not show up correctly within your VM, verify a disk exists at LUN 0.

다음 단계Next steps