...
EBS (Elastic Block Storage)
컴퓨터 본체를 보면, cpu와 램카드, 그래픽카드, SSD, HDD가 다같이 장착되어 컴퓨터가 돌아가게 된다.
EC2 인스턴스가 연산에 관한 (CPU,메모리 등) 처리를 한다고 하면, 데이터를 저장하는 역할(SSD, HDD)은 바로 EBS가 한다고 보면 된다.
즉, EBS는 클라우드에서 사용하는 가상 하드디스크(HDD)라고 말할 수 있다.
EBS는 AWS 클라우드의 Amazone EC2 인스턴스에 사용할 영구 블록 스토리지 볼륨을 제공한다.
그리고 단 몇분 내에 사용량을 많게 또는 적게 확장할 수 있으며, 프로비저닝(빌리는 행위)한 부분에 대해서만 저렴한 비용을 지불 할 수 있다.
EBS ↔ EC2 연결 특징
EBS의 가장 큰 특징은 EC2 인스턴스가 종료되어도 별개로 작동하여 유지가 가능하다는 점이다.
보통 컴퓨터 본체가 꺼지면 하드도 꺼져 당연히 이용을 못하겠지만 EBS는 네트워크로 별개로 연결된 서비스 이기 때문에 가능한 것이다.
그래서 만일 잠시 인스턴스의 처리 기능이 필요하지않고 저장 장치 기능만 필요할떄는, 인스턴스를 정지시켜도 EBS는 독립적으로 살아있기 때문에 스토리지 기능만 이용하는데 인스턴스의 추가 요금을 내지 않아도 된다.
이런식으로 컴퓨팅 로직을 구성하면 몇가지 장점이 있는데,
집 컴퓨터 같은 경우 CPU를 i9으로 업그레이드 한다고 하면 컴퓨터를 끄고 본체를 뜯어서 교체해줘야 하지만,
네트워크로 연결된(묶여있는) 인스턴스와 EBS는 단순히 인스턴스만 다른걸로 EBS와 재연결만 시키면 되기 떄문이다.
또 다른 특징은 인스턴스 입장에서도 여러가지 EBS를 붙일 수 있다는 점이다. 하나의 컴퓨터에 HDD, SSD를 여러개 부착할수 있는 것처럼 인스턴스도 같은 원리이다.
거꾸로 하나의 EBS를 여러 EC2 장착(EBS Multi Attach) 가능하기도 하다. 여러 컴퓨터가 있으면 하나의 하드를 공용 저장소로 사용하는 원리이다.
이것은 당연히 물리적인 컴퓨터에서는 불가능하지만 네트워크(클라우드)에서만 가능한 특징인 셈이다.
EBS는 EC2와 같은 가용영역(AZ)에 존재한다. AZ가 같아야 연길 및 통신이 빠르기 떄문이다.
만일 다른 AZ로 생성해서 EC2에 붙이려고 한다면 에러가 나게 된다.
EBS 볼륨(Volume) 이란?
EBS로 생성한 디스크 하나하나 저장 단위를 말한다.
EBS 볼륨을 인스턴스에 연결한다는 말은 EC2에 물리적 하드 드라이브처럼 사용하겠다는 뜻이다.
쉽게 말하자면, 윈도우에서 흔히 볼수 있는 C 드라이브, D드라이브는 각각 디스크이며 볼륨이라고 보면 된다.
EBS 볼륨 유형 타입
EBS 타입이란 시중에서도 같은 하드 저장 디스크라도 SSD와 HDD, 느브메로 나뉘고 용량에 따라 성능과 가격이 차이나는 것처럼, EBS도 각각 타입으로 나눠놓은 것이다.
EBS는 총 5가지 타입을 제공하는데, 다음과 같다.
- 범용(General Purpose of GP3) : SSD
- 프로비저닝 된 IOPS(Provisioned IOPS or io2) : SSD
- 쓰루풋 최적화(Throughput Optimized HDD or st1)
- 콜드 HDD(SC1)
- 마그네틱(Standard)
각 하드의 성능은 용량과 MAX IOPS 수치를 보면 된다.
IOPS 수치가 높을수록 데이터 통신이 빠르다고 보면 된다. 그래서 프로비전된 IOPS(64000)이 가장 빠르고 좋다.
일반적으로 범용타입인 GP3을 선택하면 되지만, 자신은 요금을 극도로 아끼겠다 하면 마그네틱을 사용하면 된다.
EBS와 Instance Storage
EC2 인스턴스의 저장 타입은 대표적으로 두가지가 있다.
앞서 배운 EBS 기반과 그리고 인스턴스 저장 기반이다.
[EBS 기반]
- EC2가 EBS와 네트워크로 연결
- 그래서 속도가 느림
- 대신 인스턴스가 삭제되더라도 EBS는 남아있음 (영구적 스토리지)
- 하나의 인스턴스에 연결한 EBS 볼륨을 따로 분리해서 다른 인스턴스에 연결 가능 (마치 USB를 뺏다 넣듯이)
[인스턴스 저장 기반 (Instance Storage)]
- EC2안에 storage가 들어있음 (네트워크 연결X)
- 그래서 속도가 빠름
- 안에 들어있는 형태이니, 인스턴스가 삭제되면 storage도 같이 삭제 됨
- EBS처럼 스토어를 분리해서 다른 인스턴스에 연결 불가능
- 보통 영구적이지 않은 데이터를 저장
ex) 캐시 데이터
아래 사진에서 보듯이, EC2를 생성할때, EC2 타입을 고르는 항목에서 인스턴스 스토리지 항목에 EBS 전용 과 1 x 100 (SSD) 라고 써져있는 유형들을 볼 수 있을 것이다.
EBS 전용은 말 그대로 스토리지를 EBS로만 사용할수 있는 EC2 인스턴스 타입이라는 뜻이며, (SSD)라고 명시되어있는 것이 인스턴스 스토리지를 따로 가지고 있다는 뜻이다.
EC2에 EBS Volume 추가하기
EBS 볼륨 장착하기
1. EBS 볼륨 만들기
지금까지 EC2 인스턴스를 생성할때 EBS 볼륨을 같이 설정해서 만들었다면, 이번에는 이미 생성된 EC2 인스턴스에 직접 EBS 볼륨을 추가해서 연결하는 방법을 알아보자.
2. EBS 볼륨을 EC2(리눅스)에 추가하기
볼륨을 인스턴스에 연결했으면, 필히 인스턴스를 재시작을 해주어야 볼륨 추가 적용이 된다.
3. EBS 볼륨 연결 확인하기
ls -asl /dev/xvd* 명령어나 lsblk 명령어를 입력하면 연결된 디스크를 확인할 수 있다.
새로 연결한 /dev/xvdb 라는 볼륨이 보인다.
$ ls -asl /dev/xvd* # 디렉토리 조회
$ lsblk # 파일 시스템 조회
만일 디바이스 명을 /dev/sdf 로 지정했다면, 최신 Linux 커널로 인해 내부적으로 xvdf로 바뀌게 된다.
따라서 장치명이 /dev/xvdf로 나오게 된다.
3. EBS 볼륨을 파일시스템 포맷하기
착각하기 쉬운게 /dev/xvdb는 디렉토리가 아니다.
리눅스에서 /dev는 단순히 외부 디바이스, 하드를 모아둔 곳이지, 하드(EBS 볼륨)를 리눅스에 연결했다고 해서 바로 D: 드라이브 처럼 저장디스크를 바로 사용할수 있는 것이 아니다.
이를 파일시스템으로 포맷해줘야 컴퓨터에서 하드를 쓸수있게 된다.
파일시스템
저장장치에 파일을 어떻게 쓰고, 관리하고, 찾고, 읽을 것인지에 대한 규칙.
이 체계가 있어야만 리눅스에서 파일을 읽고 쓸 수 있게된다.
<비유>
하드디스크 = 도서관
파일시스템 = 도서검색대
파일 = 책
데이터 = 원하는 내용
원하는 내용이 있는 책을 찾기 위해서 도서관에 있는 도서검색대 이용하듯이
원하는 데이터가 들어있는 파일을 찾기 위해 하드디스크 안에 파일시스템이 있어야한다.
<파일 시스템 종류>
Linux : ext, ext2, ext3, ext4, xfs
Windows : FAT12, FAT16, FAT32, exFAT, NTFS
Mac : HFS, HFS+
file -s "장치명" 명령어를 이용하여 볼륨에 파일시스템이 있는지 확인한다
값이 data라고 나타난다면 파일시스템이 존재하지 않는 것이다.
$ file -s <장치명>
$ sudo -s # 루트 권한 획득
$ mkfs -t <볼륨타입> <볼륨장치명> # 해당 볼륨을 파일시스템으로 포맷
$ mkfs -t ext4 /dev/xvdb
다시 file -s 로 해당 장치명 파일시스템확인해 보면 생성됨을 확인 할 수 있다.
3. EBS 볼륨 마운트 설정하기
마운트 작업이란, 보조기억장치(하드디스크, usb 등)을 디렉터리로서 사용할 수 있게 해주는 명령어이다.
윈도우 컴퓨터에 USB를 꼽으면 내컴퓨터 폴더에 USB파일이 뜨면서 자동으로 연결되고, 외장하드를 꼽아도 :E 이런식으로 폴더가 자동으로 만들어지는 것을 봐왔을 것이다.
이렇게 디스크와 같은 물리적인 장치를 특정 위치 즉 디렉터리에 연결시켜주는 것을 마운트라고 한다.
윈도우에서는 이 마운트 작업을 자동으로 해주어서 사용자는 마운트 개념을 몰라도 무리없이 하드를 이용할수 있었지만, 리눅스는 사용자가 직접 수동으로 해주어야 한다.
먼저 마운트 지점 디렉토리를 생성한다.
디바이스를 OS에서 사용자가 직접 이용할수 있게, 연결시켜줄 디렉터리를 하나 만든다고 생각하면 된다. (마치 윈도우의 E: 드라이브 처럼)
$ mkdir /xvdb
$ blkid # 현재 파일시스템들의 UUID와 TYPE을 확인
리눅스에서 사용하는 파일시스템 정보를 정적으로 저장하고 있는 파일인 /etc/fstab을 열어, blkid로 확인했던 파일시스템의 UUID와 TYPE을 복사해서, 아래 사진처럼 형식에 맞게 넣어준다.
$ vi /etc/fstab
이제 mount -a 명령어를 입력하면 auto mount가 되어 재부팅해도 마운트가 유지되게 된다.
$ mount -a # /etc/fstab에 있는 파일시스템 전체를 mount
$ df -h # 리눅스 시스템 디스크 사용량 확인
이제 디스크가 잘 연결(마운트) 되었는지 테스트를 해보자.
/xvdb 디렉토리에 파일을 넣으면 디스크에 파일이 잘 저장됨을 확인할수 있을 것이다.
$ echo "hello" > /xvdb/hello.txt
$ ls -al /xvdb
마치 윈도우의 D: 드라이브를 추가해 파일들을 저장하는 것과 같은 개념이다.
이렇게 EBS를 EC2에 추가로 장착해 이용하는 방법을 살펴 보았다.
EBS 볼륨 확장하기
EBS 볼륨을 장착하여 디스크로서 파일을 저장해보는 것 까지 구현해 보았다.
만일 장착된 EBS 볼륨 저장용량이 부족해서 용량을 늘려야할 상황이 왔다고 가정해보자.
우선 EBS 볼륨 메뉴로 이동한다.
볼륨을 수정하면 사용중 - modify라고 상태가 업데이트되는데, 다시 사용중 으로 될때까지 좀 오래 기다려야 할 것이다.
하지만 AWS 콘솔에서 크기를 수정했다고 해서, 리눅스 인스턴스에서 자동으로 볼륨 크기가 확장되지 않는다.
다음의 명령어를 통해 설정을 해줘야 적용이 된다.
$ sudo xfs_growfs -d {마운트 위치} # XFS 볼륨 유형일 때 - /xvdb 폴더 안의 볼륨을 확장하겠다는 명령어
$ sudo resize2fs {장치명} # ex4 볼륨 유형일 때 - /dev/xvdb 장치명을 가진 볼륨을 확장하겠다는 명령어
그리고 각 파일 시스템에 늘어난 볼륨 크기가 반영되었는지 확인하려면 df -h 명령을 쳐보자
/dev/xvdb가 2.0G에서 2.9G(3G)로 늘어난걸 확인 할 수 있다.
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.