Storage > Block Storage > 개요

블록 스토리지는 인스턴스 기본 디스크 외에 추가로 연결하여 사용할 수 있는 가상 디스크입니다.

  • 연결된 인스턴스를 삭제하더라도 블록 스토리지는 삭제되지 않습니다.
  • 블록 스토리지는 여러 개의 인스턴스에서 동시에 연결하여 사용할 수 없습니다.
  • 연결이 해제된 블록 스토리지는 다른 인스턴스에 연결하여 쓸 수 있습니다.
  • 블록 스토리지는 같은 가용성 영역 안에 있는 인스턴스에만 연결 가능합니다.

블록 스토리지는 여러 상황에서 쓰입니다.

  • 기본 디스크의 저장 공간이 부족할 때 블록 스토리지를 추가로 장착하여 인스턴스의 저장공간을 늘일 수 있습니다.
  • 인스턴스를 삭제하기 전에 인스턴스의 기본 디스크에 있는 데이터를 영구 보관하기 위해 블록 디스크를 장착하고 데이터를 복사할 수 있습니다.

블록 스토리지를 사용하려면 먼저,

  1. 블록 스토리지를 생성하고,
  2. 그 블록 스토리지를 대상 인스턴스에 연결한 후에,
  3. 블록 스토리지를 파티션, 포맷, 마운트하여 사용합니다.

블록 디스크는 인스턴스 실행 중에도 연결할 수 있습니다. 연결된 블록 디스크는 빈 디스크이므로 사용하기 전에 인스턴스의 운영체제에 따라 파티셔닝, 포맷, 마운트 작업을 직접 진행해야 합니다.

빈 블록 스토리지 사용하기

리눅스

인스턴스에 접속한 후 아래의 과정을 진행합니다.

[참고] 이 예제에서 나오는 모든 명령은 반드시 root 권한으로 실행해야 합니다.

파티션 생성하기

블록 스토리지가 인스턴스에 연결되면 빈 디스크 장치로 등록됩니다. 등록된 디스크 목록은 리눅스의 lsblk 명령어를 통해 확인할 수 있습니다.

# lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0    0  20G  0 disk
├─vda1 253:1    0   2G  0 part [SWAP]
└─vda2 253:2    0  18G  0 part /
vdb    253:16   0  10G  0 disk

위의 예제는 기본 디스크인 vda와 추가 디스크인 vdb가 연결되어 있음을 나타냅니다. lsblk의 출력 결과를 보면 vda에 파티션이 생성되어 있지만 vdb는 비어 있는 것을 알 수 있습니다.

[참고] 디스크 장치의 이름은 vda, vdb, vdc, ... 와 같이 인스턴스에 블록 스토리지를 연결한 순서대로 알파벳 문자가 하나씩 올라가게 됩니다. 위의 예제에서 vdb 디스크는 두번째로 연결된 디스크를 의미합니다. 장치의 이름은 콘솔의 스토리지 목록 화면에서 확인할 수 있습니다.

먼저 빈 디스크 장치인 vdb에 파티션을 생성합니다. 다음와 같이 fdisk 유틸리티를 이용하여 디스크 전체를 파티션 하나로 만듭니다. 필요에 따라 디스크 하나를 여러 파티션으로 나눌 수도 있습니다.

# fdisk /dev/vdb
Command (m for help): n

Partition number (1-4): 1
First cylinder (1-20805, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-20805, default 20805): 20805
Command (m for help): w

쉘에서 fdisk /dev/{장치 이름}을 입력하면 장치의 파티션 관리 명령을 내릴 수 있는 프롬프트가 나옵니다. 이 프롬프트에서 사용할 수 있는 명령 리스트를 보려면 m을 입력합니다. 이 예제에서는 새로운 파티션을 생성할 것이므로 "New Partition"을 의미하는 n을 입력합니다. 그러면 아래와 같이 생성할 파티션의 타입을 물어봅니다. 이 예제에서는 "Primary"를 의미하는 p를 입력합니다. 파티션과 관련된 더 자세한 정보는 마스터 부트 레코드 문서를 참고합니다.

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

다음으로 파티션의 타입을 결정하면 생성할 파티션의 갯수를 물어봅니다. 이 예제에서는 파티션 한개를 생성할 것이므로 1을 입력하고 넘어갑니다.

Partition number (1-4, default 1): 1

다음으로 파티션의 크기를 결정합니다. 생성한 블록 스토리지의 크기에 따라 입력할 수 있는 범위가 달라집니다. 이 예제에서는 전체 디스크를 사용하는 파티션을 생성할 것이므로 기본값을 사용하겠습니다.

First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set

기본적인 파티션 설정이 끝났습니다. 지금까지 입력한 설정을 디스크에 반영하기 위해서 w를 입력합니다.

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

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

이것으로 파티션 생성 과정이 끝났습니다.

파티션 포맷하기

생성한 파티션을 사용하려면 포맷을 해야 합니다. lsblk 명령으로 포맷할 파티션을 찾습니다.

[root@host-192-168-0-67 ~]# lsblk /dev/vdb
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb    253:16   0  10G  0 disk
└─vdb1 253:17   0  10G  0 part /mnt/vdb

위의 예제에서 vdb 디스크에 vdb1 이라는 파티션이 생성된 것을 확인할 수 있습니다. 일반적으로 리눅스에서 파티션의 이름은 "장치이름 + 숫자" 형태입니다.

이제 vdb1 파티션을 포맷해보도록 하겠습니다. 리눅스에서는 mkfs 명령어를 통해 파티션을 포맷합니다. 파티션을 포맷할 때 반드시 사용할 파일 시스템을 지정해야 합니다. 이 예제에서는 널리 쓰이는 리눅스 파일 시스템 중의 하나인 xfs를 이용하여 포맷을 하겠습니다. 리눅스에서 사용가능한 파일 시스템에 대해서는 파일 시스템을 참고합니다.

# mkfs -t xfs /dev/vdb1

디스크 마운트

파일 시스템까지 만들어진 디스크는 마운트 과정을 거쳐야 접근할 수 있습니다. 간편하게 mount 명령어으로 디스크를 마운트 할 수도 있으나 인스턴스가 재부팅되면 마운트가 풀립니다. 이 예제에서는 /etc/fstab 파일에 마운트할 디스크를 추가하여 인스턴스 부팅 과정에서 자동으로 마운트하는 방법을 설명합니다.

아래는 /etc/fstab 파일을 내용을 출력한 것입니다.

# /etc/fstab
# Created by anaconda on Tue Nov 17 18:37:50 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=3d9cc015-610e-4482-9071-fbf998d68121 /                       xfs     defaults,nodev,noatime        1 1

디스크 하나가 이미 등록된 것을 확인할 수 있습니다. 등록된 디스크는 인스턴스의 기본 디스크 (root disk)입니다.

디스크를 등록하려면 디스크의 장치 고유 아이디가 필요합니다. 장치 고유 아이디는 아래와 같이 blkid 명령어를 통해 확인할 수 있습니다.

# blkid /dev/vdb1
/dev/vdb1: UUID="5a4004f4-3ba6-4484-9459-7c2b321b727f" TYPE="xfs"

출력 내용 중 UUID에 해당하는 항목이 바로 장치 고유 아이디 입니다.

마운트 대상 디렉터리를 생성합니다. 마운트 대상 디렉터리는 어떠한 것이어도 상관없습니다. 이 예제에서는 /mnt/vdb로 하겠습니다.

mkdir -p /mnt/vdb

마운트 대상 디렉터리가 준비되었으면 다음과 같이 디스크를 등록합니다.

# echo "UUID=5a4004f4-3ba6-4484-9459-7c2b321b727f xfs defaults,nodev,noatime 1 2" >> /etc/fstab

마지막으로 /etc/fstab의 내용을 반영해야 합니다. mount -a 명령어를 통해 /etc/fstab에 등록된 모든 디스크를 마운트하도록 합니다.

# mount -a

df 명령어로 정상적으로 마운트 되었는지 확인합니다.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        18G  1.3G   17G   7% /
devtmpfs        912M  4.0K  912M   1% /dev
tmpfs           921M     0  921M   0% /dev/shm
tmpfs           921M   89M  832M  10% /run
tmpfs           921M     0  921M   0% /sys/fs/cgroup
/dev/vdb1        10G   33M   10G   1% /mnt/vdb

df 명령의 결과에서 새 파티션이 마운트되어 있는 것을 확인할 수 있습니다.

각 명령어에 대한 자세한 설명은 리눅스의 man 명령을 사용하시기 바랍니다.

[참고] 위의 과정을 한번에 처리하려면 아래의 스크립트를 참고하시기 바랍니다. 아래의 스크립트는 Cent OS에서 테스트 되었습니다.

#!/bin/bash

DEVICES=(`lsblk -s -d -o name,type | grep disk | awk '{print $1}'`)

for DEVICE_NAME in ${DEVICES[@]}
do
    MOUNT_DIR=/mnt/$DEVICE_NAME
    FS_TYPE=xfs

   mkdir -p $MOUNT_DIR

    echo -e "n\np\n1\n\n\nw" | fdisk /dev/$DEVICE_NAME
    PART_NAME="/dev/${DEVICE_NAME}1"
    mkfs -t $FS_TYPE -f $PART_NAME > /dev/null

    UUID=`blkid $PART_NAME -o export | grep UUID | cut -d'=' -f 2`
    echo "UUID=$UUID $MOUNT_DIR $FS_TYPE defaults,nodev,noatime 1 2" >> /etc/fstab

    mount -a
done

윈도우

윈도우에서 볼륨을 추가하는 방법은 크게 두 가지가 있습니다. 첫 번째는 GUI 기반의 서버 관리자를 사용하는 것이고, 두 번째는 CLI 기반의 PowerShell을 사용하는 것입니다. 이 문서에서는 각각의 방법을 간략하게 소개해드리겠습니다.

서버 관리자를 사용하여 볼륨 추가하기

윈도우 인스턴스에 연결된 블록 스토리지는 오프라인 상태의 디스크로 표시됩니다. 이 디스크를 사용하기 위해서는 온라인 상태로의 변경 및 볼륨 생성 과정이 필요합니다. 먼저 온라인 상태로의 전환 과정은 다음과 같습니다.

  1. 인스턴스에 접속한 후 시작 화면에서 서버 관리자를 클릭해서 실행합니다.
  2. 서버 관리자 > 대시보드 화면에서 파일 및 저장소 서비스를 선택합니다.
  3. 파일 및 저장소 서비스 > 서버 화면에서 볼륨 > 디스크를 선택합니다.
  4. 오프라인 상태의 새 디스크를 우클릭하면 메뉴 팝업이 나타납니다. 이 중 온라인 상태로 전환 항목을 선택합니다.
  5. 온라인 상태로 전환을 묻는 팝업이 나타나면 "예"를 눌러 진행합니다.
  6. 디스크 목록을 새로고침하여 새 디스크가 온라인 상태로 전환되었음을 확인합니다.

디스크가 온라인 상태로 전환되면 새 볼륨을 만들 수 있습니다. 새 볼륨을 생성하는 과정은 다음과 같습니다.

  1. 디스크 목록에서 새 디스크를 우클릭하면 메뉴 팝업이 나타납니다. 이 중 새 볼륨 항목을 선택합니다.
  2. 새 볼륨 마법사 대화창이 열리면 볼륨을 생성할 디스크를 선택합니다.
  3. 생성할 볼륨의 크기를 지정합니다.
  4. 드라이브 문자를 선택합니다.
  5. 볼륨의 파일 시스템을 선택합니다.
  6. 마지막으로 설정한 항목들을 확인한 후 "만들기"를 선택하여 볼륨 생성을 진행합니다.

만들어진 볼륨은 디스크 관리 프로그램을 통해 사용하도록 설정합니다.

  1. 시작 버튼을 우클릭하면 메뉴 팝업이 나타납니다. 이 중 디스크 관리 항목을 선택합니다.
  2. 디스크 관리의 디스크 목록에서 볼륨을 생성한 디스크를 우클릭하면 메뉴 팝업이 나타납니다. 이 중 드라이브 문자 및 경로 변경을 선택합니다.
  3. 새 볼륨의 드라이브 문자 및 경로를 추가합니다.

이제 윈도우 탐색기에서 디스크가 추가된 것을 확인 할 수 있습니다. 디스크 관리에 대해 보다 자세한 설명은 윈도우 공식 가이드를 참조하시기 바랍니다.

[참고] 윈도우의 디스크 형식은 다음 두 가지로 나뉩니다. MBR: 예전부터 사용되는 디스크 형식이며, 2TB 이하의 디스크에서 사용합니다. GPT: 2TB 이상의 디스크에서 사용하는 새로운 디스크 형식입니다. 서버 관리자를 통해 설정한 디스크는 기본적으로 GPT 형식이 됩니다.

PowerShell를 사용하여 볼륨 추가하기

윈도우에서 제공하는 PowerShell을 통해서도 볼륨을 추가할 수 있습니다. 먼저 시작 화면에서 PowerShell을 선택하여 실행합니다.

Get-Disk 명령을 통해 현재 인스턴스에 연결된 디스크 목록을 출력합니다. 아래의 결과에서 RAW로 표시된 디스크가 새로 추가할 디스크입니다.

PS C:\Users\Administrator> Get-Disk
Number Friendly Name                            OperationalStatus                    Total Size Partition Style
------ -------------                            -----------------                    ---------- ---------------
0      Red Hat VirtIO SCSI Disk Device          Online                                    50 GB MBR
1      Red Hat VirtIO SCSI Disk Device          Offline                                   10 GB RAW

Initialize-Disk 명령을 통해 디스크를 초기화 합니다. 각 옵션에 대한 설명은 다음과 같습니다. -Number: 초기화할 디스크의 번호를 지정합니다. -PartitionStyle: 디스크 형식을 지정합니다. 이 예제에서는 서버 관리자에서의 경우와 마찬가지로 디스크 형식을 GPT로 지정합니다.

PS C:\Users\Administrator> Initialize-Disk -Number 1 -PartitionStyle GPT
Number Friendly Name                            OperationalStatus                    Total Size Partition Style
------ -------------                            -----------------                    ---------- ---------------
1      Red Hat VirtIO SCSI Disk Device          Offline                                   10 GB RAW

New-Partition 명령을 통해 파티션을 생성합니다. 각 옵션에 대한 설명은 다음과 같습니다. -DiskNumber: 파티션을 생성할 디스크 번호를 선택합니다. -AssignDriveLetter: 생성한 파티션에 드라이브 문자를 자동으로 할당하도록 설정합니다. * -UseMaximumSize: 파티션의 크기로 디스크 가용 용량 전체를 선택합니다.

PS C:\Users\Administrator> New-Partition -DiskNumber 1 -AssignDriveLetter -UseMaximumSize
   Disk Number: 1
PartitionNumber  DriveLetter Offset                                        Size Type
---------------  ----------- ------                                        ---- ----
2                D           34603008                                   9.97 GB Basic

Format-Volume 명령을 통해 파티션을 포맷합니다. 각 옵션에 대한 설명은 다음과 같습니다. -FileSystem: 사용할 파일 시스템 형식을 지정합니다. 이 예제에서는 NTFS로 지정합니다. -Confirm: 사용자 확인을 위한 프롬프트 출력여부를 지정합니다. 이 예제에서는 묻지 않도록 False로 설정합니다.

PS C:\Users\Administrator> Format-Volume -DriveLetter D -FileSystem NTFS -Confirm:$false

DriveLetter       FileSystemLabel  FileSystem       DriveType        HealthStatus        SizeRemaining             Size
-----------       ---------------  ----------       ---------        ------------        -------------             ----
D                                  NTFS             Fixed            Healthy                   9.92 GB          9.97 GB

이제 윈도우 탐색기에서 디스크가 추가된 것을 확인 할 수 있습니다. PowerShell에 대한 보다 자세한 설명은 윈도우 PowerShell 공식 가이드를 참고하시기 바랍니다.

[참고] 위의 과정을 한번에 처리하려면 아래의 스크립트를 참고하시기 바랍니다.

PS C:\Users\Administrator> Get-Disk |
   Where PartitionStyle -eq 'RAW' |
   Initialize-Disk -PartitionStyle GPT -PassThru |
   New-Partition -AssignDriveLetter -UseMaximumSize |
   Format-Volume -FileSystem NTFS -Confirm:$false

블록 스토리지 스냅숏

블록 스토리지 스냅숏 기능을 이용하면 사용자가 직접 블록 스토리지의 데이터를 복사하는 것보다 빠르게 블록 스토리지 백업이 가능합니다. 블록 스토리지가 인스턴스에 연결되어 있는 상태에서도 블록 스토리지 스냅숏 생성은 가능하지만, 데이터의 정합성과 안정성을 위해 인스턴스에서 연결을 해제하고 블록 스토리지 스냅숏을 생성하는 것을 권장합니다. (블록 스토리지를 인스턴스에서 연결 해제하기 전에 안정성 향상을 위해 마운트 해제 작업을 하기 바랍니다.)

블록 스토리지의 스냅샷은 읽기 전용으로 되어 있으므로 인스턴스에 직접 연결하여 사용할 수 없습니다. 스냅샷을 사용하려면 스냅샷으로부터 블록 스토리지를 생성하고, 생성된 블록 스토리지를 인스턴스에 연결합니다.

[주의] 블록 스토리지 스냅숏을 갖는 블록 스토리지는 삭제할 수 없습니다. 블록 스토리지를 삭제하려면 그 블록 스토리지의 모든 스냅숏을 삭제하시기 바랍니다.

과금

블록 스토리지는 생성한 순간 부터 사용한 저장 공간 만큼 과금됩니다. 빈 블록 스토리지나 스냅샷으로 최종 생성되는 블록 스토리지의 크기만큼 과금됩니다.