Block Storage 추가
이번 문서는 오라클 클라우드 Free Tier 계정을 생성하고 로그인한 상황을 전제로 합니다. 만약에 현재 오라클 클라우드 계정이 없는 상태라면, 다음 문서를 참조하여 오라클 클라우드 계정을 만들고 OCI 콘솔에 로그인하시기 바랍니다.
이번 문서에서는 OCI 콘솔에서 OCI Linux VM 인스턴스에 Block Storage를 추가하고 마운트하는 과정을 소개합니다. OCI Linux VM 인스턴스에 Block Storage를 추가하는 과정은 다음과 같은 목차로 진행됩니다.
0. OIC Block Volume
OCI Block Volume은 네트워크 스토리지입니다. Block Storage는 한 번에 1개 OCI Compute 인스턴스에 장착될 수도 있고, 한 번에 여러 OCI Compute 인스턴스에 마운트되어 공유 스토리지로 사용될 수 있습니다.
OCI Block Volume 서비스는 블록 스토리지를 제공하고 관리하는 네트워크 스토리지 서비스입니다. OCI Compute 인스턴스는 이 Block Storage를 마운트하여 스토리지를 확장하여 사용할 수 있습니다. Block Volume을 Cloud Compute를 위한 HDD라고 생각해도 좋습니다. Block Volume을 HDD와 같이 OCI Compute 인스턴스에 연결해서 사용하고 마운트하여 사용할 수 있습니다. HDD와 차이점은 Block Volume은 네트워크 스토리지라는 것뿐입니다. Block Volume 서비스로 다음과 같은 작업을 할 수 있습니다.
- 블록 볼륨 생성
- 블록 볼륨 인스턴스에 추가
- 블록 볼륨 인스턴스에 연결
- 블록 볼륨 이동
- 블록 볼륨 백업
Block Volume은 한 번에 1개의 인스턴스에 전용으로 연결될 수도 있고, 여러 인스턴스에 공용 스토리지로 연결될 수도 있습니다. 공유 스토리지에 사용될 경우 OCI Compute 인스턴스에는 Clusterware가 설치 및 설정됩니다. 기존에 인스턴스에 연결하여 사용 중이던 Block Volume을 분리하여 다른 인스턴스에 연결할 수 있습니다. A 인스턴스에 연결되어 데이터를 저장하던 Block Volume을 A 인스턴스에서 떼어낸 후, B 인스턴스에 연결할 수 있습니다. 이때 데이터 유실은 발생하지 않습니다.
1. 사전 준비
이 문서에서 다루는 OCI Compute 인스턴스에 Block Storage를 추가하는 절차는 다음과 같은 자원이 이미 만들어져 있다는 가정으로 진행됩니다.
1.1 OCI 자원 준비
다음 자원이 없다면 “자원 생성 참조 문서“를 참조하여 해당 자원을 생성하시기 바랍니다.
자원 유형 | 자원 이름 | 소속 Compartment | 자원 생성 참조 문서 |
---|---|---|---|
Compartment | sanbox | root | Compartment 추가 |
VCN | demo_vcn | root > sandbox | 간편 VCN 만들기 |
Compute VM | demo_linux_vm | root > sandbox | Oracle Linux VM 인스턴스 생성 |
2. OCI VM에 Block Volume 추가
이 문서에서는 OCI Linux VM에 Block Storage를 추가하는 절차는 다음은 순서로 살펴보겠습니다.
- Block Volume 생성
- Block Volume을 인스턴스에 추가
- Block Volume을 인스턴스에 연결
- Block Volume 포맷
- Block Volume 마운트
위 과정을 모두 마치면 다음과 같은 상태가 만들어집니다.
2.1 Block Volume 생성
Block Volume을 만들기 위해서는 OCI Console에서 다음 메뉴 패스로 Block Volume 관리 페이지로 이동해야 합니다.
Block Volume 관리 페이지에서 앞으로 생성할 Block Volume을 할당할 Compartment로 sandbox(root/sandbox)를 선택합니다. 그리고 “Create Block Volume” 버튼을 클릭합니다.
“Create Block Volume” 버튼을 클릭하면 __Create Block Volume” 생성 입력 폼이 나타납니다. 입력 폼에 다음과 같은 입력값을 설정합니다.
입력 항목 | 설정값 | 설명 |
---|---|---|
Name | demo_vol01 | |
Create In Compartment | sandbox | Block Volume을 할당할 Compartment |
Availability Domain | fttO:US-ASHBURN-AD-1 | 리전에 따라 달라지는 값입니다. 데모에서는 편의상 AD-1로 통일합니다. |
Size(In GB) | 1024 | 기본값인 1TB를 사용합니다. |
Compartment For Backup Policies | sandbox | |
Backup Policy | Bronze | 이 항목의 선택은 제약이 없습니다. 다른 값 선택이 앞으로 진행에 영향이 없습니다. |
Volume Porformance | Balanced | 기본값을 사용합니다. 다른 값 선택이 앞으로 진행에 영향이 없습니다. |
Encryption | Encrypt Using Oracle-Managed Keys | 기본값을 사용합니다. |
위 항목을 입력한 결과는 다음 이미지와 같습니다. 위 항목을 모두 입력하고 Create Block Volume 버튼을 클릭합니다.
Block Volume은 다음 이미지와 같이 생성됩니다. Block Volume은 다음 이미지와 같이 아이콘 색깔이 변하면서 만들어집니다.
2.2 Block Volume 연결
demo_linux_vm Compute 인스턴스에 Block Volume을 연결하기 위해서 다음 메뉴 패스를 이용하여 demo_linux_vm 인스턴스 상세 페이지로 이동합니다.
demo_linux_vm 상세 페이지에서 왼쪽 메뉴에서 “Attached Block Volumes” 링크합니다. 그리고 다음 이미지와 같이 “Attach Blcok Volume” 버튼을 클릭합니다.
“Attach Blcok Volume” 버튼을 클릭하면, “Attach Blcok Volume” 입력 폼이 나타납니다. 이 입력 폼에 다음과 같은 설정값을 입력합니다.
입력항목 | 설정값 | 설명 |
---|---|---|
Choose how you want to attach your block volume | ISCSI 선택 | |
Access | READ/WRITE | 1개 Compute에 전용으로 연결되는 모드 |
Select Volume | 체크 | |
BLOCK VOLUME Compartment | sandbox | |
BLOCK VOLUME | demo_vol01 | |
Device Path | /dev/oracleoci/oraclevdb |
위 입력값을 설정하면 다음 이미지와 형태가 됩니다. 모든 값을 입력하고 “Attach” 버튼을 클릭합니다.
“Attach” 버튼을 클릭하면 demo_linux_vm 상세 페이지의 Attached Block Volume 블록에 앞에서 지정한 Block Volume 목록이 만들어진 것을 확인할 수 있습니다.
Attached Block Volume 블록의 목록에서 demo_vol01의 오른쪽 마지막 메뉴 아이콘을 클릭하고 “iSCSI Command & Information” 메뉴를 클릭합니다.
“iSCSI Command & Information” 메뉴를 클릭하면 다음 이미지와 같이 Block Volume을 연결하고 제거하는 iscsiadm 명령이 출력됩니다.
위 이미지에서 출력된 Attach Commands의 3개 명령을 복사하여, demo_linux_vm 인스턴스에 ssh 접속하여 실행해야 합니다. 아래 이미지는 demo_linux_vm에 ssh 접속하여 다음 fdsik
명령을 입력하여 현재 OS가 인식하는 디스크 파이션 목록을 출력한 결과입니다.
sudo fdisk -l
아래 이미지에서 위 명령의 실행 결과를 보면, 현재 boot volume인 /dev/sda만이 인식하고 있음을 알 수 있습니다.
앞에서 복사한 3개 iscsiadm 명령을 순서대로 demo_linux_vm 접속 터미널에 실행합니다. 그리고 위에서 실행한 sudo fdisk -l
명령을 다시 실행합니다. 아래 이미지에서 iscsiadm 명령 3개를 모두 실행한 다음에 /dev/sdb를 인식하고 있는 것을 확인할 수 있습니다.
2.3 Block Volume 포멧
블럭 장치 목록을 보여주는 리눅스 명령어인 “lsblk -f”을 실행하면, 현재 /dev/sdb를 인식할 뿐 어떤 정보도 확인할 수 없습니다. 이제는 /dev/sdb을 포맷할 순서입니다.
/dev/sdb를 다음 명령을 입력하여 포맷합니다.
sudo mkfs -t <fs type> /dev/sdb
sudo mkfs -t xfs /dev/sdb
위 명령을 실행하여 /dev/sdb를 포맷한 다음에 “lsblk -l”를 실행하면 다음 이미지와 같이 파일 시스템 타입과 UUID가 등록된 것을 확인할 수 있습니다. 이제는 블록을 특정 디렉터리로 마운트할 차례입니다.
2.3 Block Volume 마운트
블록을 마운트할 디렉터리를 생성합니다. 이 문서에서는 /dev/sdb를 /demo_mnt/demo_vol01/에 마운트할 것입니다. 다음 명령을 입력하여 /demo_mnt/demo_vol01/ 디렉터리를 만듭니다.
[opc@demo-linux-vm ~]$ sudo mkdir -p /demo_mnt/demo_vol01
그리고 /etc/fstab을 다음 명령으로 오픈합니다.
sudo vi /etc/fstab
그리고 마지막 줄에 다음 설정을 입력합니다.
/dev/oracleoci/oraclevdb /demo_mnt/demo_vol01 xfs defaults,_netdev,nofail 0 2
위 설정 파일은 시스템이 부팅될 때, 파일 시스템을 마운트하는 정보를 제공합니다. 설정의 의미는 다음과 같습니다.
설정 값 | 의미 |
---|---|
/dev/oracleoci/oraclevdb | 마운트 대상 블록 장치 |
/demo_mnt/demo_vol01 | 블록을 마운트할 위치 |
xfs | 파일 포맷 |
defaults,_netdev,nofail | 기본설정,네트웍 볼륨,볼륨마운트 오류 시 에러 보고하지 않음 |
0 | 덤프를 설정하지 않음 |
2 | 우선순위 2순위 설정, boot volume을 1순위로 설정, 1순위 점검 후 점검 |
다음 이미지와 같이 설정하고 저장합니다.
다음 명령을 입력하여 /etc/fstab에 설정된 볼륨을 마운트합니다.
sudo mount -a
2.5 Block Volume 마운트 포인트 소유권 변경
/etc/fstab 파일의 모든 볼륨을 마운트하면, /demo_mnt/demo_vol01 디렉터리가 root로 마운트 된 것을 확인할 수 있습니다. 다음 명령을 입력하여 /demo_mnt/demo_vol01의 소유권은 root에서 opc로 변경합니다.
[opc@demo-linux-vm ~]$ sudo chown opc:opc /demo_mnt/demo_vol01/
[opc@demo-linux-vm ~]$ ls -al /demo_mnt/demo_vol01/
합계 0
drwxr-xr-x. 2 opc opc 6 3월 8 10:16 .
drwxr-xr-x. 3 root root 24 3월 8 10:18 ..
다음 이미지에서는 /demo_mnt/demo_vol01 디렉터리의 소유권을 root:root에서 opc:opc로 변경하고 해당 디렉터리에 log 파일을 만드는 과정입니다. log 파일 소유권이 opc:opc로 설정된 것을 확인할 수 있습니다.
/demo_mnt/demo_vol01에 설정은 시스템을 재시작(rebookt)해도 그래도 유지됩니다. Oracle Linux 7이 재시작할 때, /etc/fstab에 등록된 파일 시스템이 마운트됩니다. 이때 앞에서 설정한 마운트 포인트의 소유권 설정이 그래도 유지되는 것을 확인할 수 있습니다.
2.6 /etc/fstab에 UUID 등록
Boot Volume을 제외하고 마운트할 볼륨이 2개 이상일 경우에 서버를 재시작할 때, Block Volume Path가 변경되어 마운트 장치가 변경되는 이슈가 발생할 수 있습니다. 이러한 문제를 피하기 위해서, 2개 이상의 block volume을 연결할 경우에 /etc/fstab에 uuid를 사용할 것을 권장합니다. block volume의 uuid는 다음 명령으로 확인할 수 있습니다.
sudo lsblk -f
위 명령을 실행하면 각 볼륨 장차의 파일 포맷, uuid 및 마운트 위지 정보가 출력됩니다.
/etc/fstab에 마운트 정보를 다음과 같이 입력합니다.
## /dev/oracleoci/oraclevdb /demo_mnt/demo_vol1 xfs defaults,_netdev,nofail 0 2
UUID=47dd6348-4357-421d-a089-40f2c05b8822 /demo_mnt/demo_vol1 xfs defaults,_netdev,nofail 0 2
다음 명령을 입력하여 볼륨을 마운트하고 소유권 변경을 수행합니다.
[opc@demo-linux-vm ~]$ sudo mount -a ## 파일 시스템 마운트
[opc@demo-linux-vm ~]$ sudo chown opc:opc /demo_mnt/demo_vol01/ ## 마운트 포인트 소유권 변경
[opc@demo-linux-vm ~]$
2.7 전체 터니멀 작업 로그
Block Volume을 demo_linux_vm에 연결한 후, 인스턴스에 ssh 접속한 다음에 터미널에 입력하는 모든 명령 로그는 다음과 같습니다.
$ ssh -i ./id_rsa opc@150.136.57.41 ## demo_linux_vm에 ssh 접속
The authenticity of host '150.136.57.41 (150.136.57.41)' can't be established.
ECDSA key fingerprint is SHA256:Q7YlJql7MZqf6mp/ZQnP/0cQtcX6756U+pHEqAqy+CU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '150.136.57.41' (ECDSA) to the list of known hosts.
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ sudo fdisk -l ## 블록 파이션 조회
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sda: 50.0 GB, 50010783744 bytes, 97677312 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: gpt
Disk identifier: 23A7AABA-6B11-4E98-A2CE-4962B4F7BCC3
# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 17188863 8G Linux swap
3 17188864 97675263 38.4G Microsoft basic
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ ## 3개 iscsiadm 명령 실행
[opc@demo-linux-vm ~]$ sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:dd5529e3-b556-4603-b563-83d2ccfc5128 -p 169.254.2.2:3260
New iSCSI node [tcp:[hw=,ip=,net_if=,iscsi_if=default] 169.254.2.2,3260,-1 iqn.2015-12.com.oracleiaas:dd5529e3-b556-4603-b563-83d2ccfc5128] added
[opc@demo-linux-vm ~]$ sudo iscsiadm -m node -o new -T iqn.2015-12.com.oracleiaas:dd5529e3-b556-4603-b563-83d2ccfc5128 -p 169.254.2.2:3260
New iSCSI node [tcp:[hw=,ip=,net_if=,iscsi_if=default] 169.254.2.2,3260,-1 iqn.2015-12.com.oracleiaas:dd5529e3-b556-4603-b563-83d2ccfc5128] added
[opc@demo-linux-vm ~]$ sudo iscsiadm -m node -o update -T iqn.2015-12.com.oracleiaas:dd5529e3-b556-4603-b563-83d2ccfc5128 -n node.startup -v automatic
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ sudo fdisk -l ## 블록 파이션 조회, /dev/sdb 연결됨
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
Disk /dev/sda: 50.0 GB, 50010783744 bytes, 97677312 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: gpt
Disk identifier: 23A7AABA-6B11-4E98-A2CE-4962B4F7BCC3
# Start End Size Type Name
1 2048 411647 200M EFI System EFI System Partition
2 411648 17188863 8G Linux swap
3 17188864 97675263 38.4G Microsoft basic
Disk /dev/sdb: 1099.5 GB, 1099511627776 bytes, 2147483648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
[opc@demo-linux-vm ~]$ lsblk -f ## 블록 파이션 정보 조회
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb
sda
├─sda2 swap 02789b15-4058-485e-86a6-38522a5c00c6 [SWAP]
├─sda3 xfs 53bb89bf-50e3-4358-9f5e-e9c5ac8d535c /
└─sda1 vfat F831-6C7E /boot/efi
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ sudo mkfs -t xfs /dev/sdb ## 블록 포멧
meta-data=/dev/sdb isize=256 agcount=4, agsize=67108864 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=0 finobt=0, sparse=0, rmapbt=0, reflink=0
data = bsize=4096 blocks=268435456, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=131072, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[opc@demo-linux-vm ~]$ lsblk -f ## 블록 파이션 정보 조회
NAME FSTYPE LABEL UUID MOUNTPOINT
sdb xfs 47dd6348-4357-421d-a089-40f2c05b8822
sda
├─sda2 swap 02789b15-4058-485e-86a6-38522a5c00c6 [SWAP]
├─sda3 xfs 53bb89bf-50e3-4358-9f5e-e9c5ac8d535c /
└─sda1 vfat F831-6C7E /boot/efi
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ sudo mkdir -p /demo_mnt/demo_vol01 ## 마운트 포인트 생성
[opc@demo-linux-vm ~]$ sudo vi /etc/fstab
[opc@demo-linux-vm ~]$ ## /etc/fstab에 마운트 정보 추가후 저장
[opc@demo-linux-vm ~]$ sudo mount -a ## 파일 시스템 마운트
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ ls -al /demo_mnt/demo_vol01/ ## 마운트 포인트 조회
합계 0
drwxr-xr-x. 2 root root 6 3월 8 10:16 .
drwxr-xr-x. 3 root root 24 3월 8 10:18 ..
[opc@demo-linux-vm ~]$ sudo chown opc:opc /demo_mnt/demo_vol01/ ## 마운트 포인트 소유권 변경
[opc@demo-linux-vm ~]$ ls -al /demo_mnt/demo_vol01/
합계 0
drwxr-xr-x. 2 opc opc 6 3월 8 10:16 .
drwxr-xr-x. 3 root root 24 3월 8 10:18 ..
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ ls -al >> /demo_mnt/demo_vol01/log ## 쓰기 테스트
[opc@demo-linux-vm ~]$ cat /demo_mnt/demo_vol01/log
합계 20
drwx------. 5 opc opc 4096 3월 8 10:23 .
drwxr-xr-x. 3 root root 17 3월 8 09:58 ..
-rw-r--r--. 1 opc opc 18 6월 13 2019 .bash_logout
-rw-r--r--. 1 opc opc 193 6월 13 2019 .bash_profile
-rw-r--r--. 1 opc opc 231 6월 13 2019 .bashrc
drwxrwxr-x. 3 opc opc 18 3월 8 10:09 .cache
drwxrwxr-x. 3 opc opc 18 3월 8 10:09 .config
drwx------. 2 opc opc 29 3월 8 09:58 .ssh
-rw-------. 1 opc opc 801 3월 8 10:23 .viminfo
[opc@demo-linux-vm ~]$ ls -al /demo_mnt/demo_vol01
합계 4
drwxr-xr-x. 2 opc opc 17 3월 8 10:29 .
drwxr-xr-x. 3 root root 24 3월 8 10:18 ..
-rw-rw-r--. 1 opc opc 475 3월 8 10:29 log
[opc@demo-linux-vm ~]$
[opc@demo-linux-vm ~]$ sudo reboot ## 운영체제 재시작
Connection to 150.136.57.41 closed by remote host.
Connection to 150.136.57.41 closed.
=====세션 종료
$ ssh -i ./id_rsa opc@150.136.57.41 ## 재접속
Last login: Sun Mar 8 10:09:46 2020 from 175.212.219.38
[opc@demo-linux-vm ~]$ ls -al /demo_mnt/demo_vol01 ## 소유권 유지 확인
합계 4
drwxr-xr-x. 2 opc opc 17 3월 8 10:29 .
drwxr-xr-x. 3 root root 24 3월 8 10:18 ..
-rw-rw-r--. 1 opc opc 475 3월 8 10:29 log
[opc@demo-linux-vm ~]$ cat /demo_mnt/demo_vol01/log
합계 20
drwx------. 5 opc opc 4096 3월 8 10:23 .
drwxr-xr-x. 3 root root 17 3월 8 09:58 ..
-rw-r--r--. 1 opc opc 18 6월 13 2019 .bash_logout
-rw-r--r--. 1 opc opc 193 6월 13 2019 .bash_profile
-rw-r--r--. 1 opc opc 231 6월 13 2019 .bashrc
drwxrwxr-x. 3 opc opc 18 3월 8 10:09 .cache
drwxrwxr-x. 3 opc opc 18 3월 8 10:09 .config
drwx------. 2 opc opc 29 3월 8 09:58 .ssh
-rw-------. 1 opc opc 801 3월 8 10:23 .viminfo
[opc@demo-linux-vm ~]$
3. Block Volume 연결 끊기 및 제거
Blokc Volume을 제거하는 방법은 다음과 같습니다.
- unmount
- /etc/fstab에 설정 제거
- OCI Console에서 block volume 연결 끊기
- OCI Console에서 block volue 삭제
3.1 unmount
마운트 포인트를 지정하여 해당 block volume을 언마운트합니다.
umount <mount_point>
다음과 같이 해당 마운트를 해지합니다.
3.2 /etc/fstab에 설정 제거
/etc/fstab 파일에 해당 마운트 설정을 제거합니다.
sudo vi /etc/fstab
위 명령으로 /etc/fstab 파일을 오픈하고 block volume 설정을 제거합니다. 아래 이미지는 /etc/fstab 파일에 마운트 정보를 주석 처리한 상태입니다.
3.3 OCI Console에서 block volume 연결 끊기
다음 메뉴 패스로 Block Volume 상세 페이지로 이동합니다.
다음 그림과 같이 Attached Instance 목록에서 현재 연결을 해제할 인스턴스의 오른쪽 메뉴를 클릭하고 Detach From Instance 메뉴를 클릭합니다.
Detach From Instance 메뉴를 클릭하면 다음과 같은 Detach Block Volume 창이 오픈됩니다.
이 창에서 DETACH COMMANDS 명령을 복사하여 대상 Compute 인스턴스에서 실행합니다.
위 iscsiadm 명령을 해당 compute 인스턴스의 터미널에서 실행하면 해당 볼륨은 compute 인스턴스에서 완전히 사라집니다. 그리고 Detach Block Volume 창의 “Continue Detachment“을 클릭합니다. 그러면 Block Volume 상세 페이지에서 Attached Instance가 사라집니다.
3.4 OCI Console에서 block volue 삭제
Block Volume 상세 페이지에서 Terminate 버튼을 클릭하면, Block Volume은 완전히 삭제됩니다. 이 볼륨의 모든 데이터는 소멸됩니다.