EBS부터 Linux Mount까지

hyeongjun Jo·2023년 2월 28일
1

DevOps

목록 보기
3/8
post-thumbnail

AWS EBS?

AWS를 공부하는 친구와 이것 저것 얘기하다가 EBS에 대한 얘기가 나왔습니다. 데이터를 저장소인데 무엇일까요?

EBS

EBS는 Elastic Block Storage의 약자로 AWS에서 제공하는 블록 수준 스토리지 서비스입니다.

EC2(Elastic Compute Cloud) 인스턴스를 만들고 중지하거나 삭제한다면 기존에 EC2가 가지고 있던 데이터가 삭제되는 문제점이 있습니다. 이 데이터들을 바깥에 따로 보관한다면 그런 걱정을 할 필요 없겠죠.

제가 직접 한 번 인스턴스를 생성하고 EBS를 연결해 보도록 하겠습니다.

인스턴스를 구성할 때 네트워크 설정을 마친 뒤 스토리지 구성을 보면
기본적으로 루트 볼륨이 설정되어 있습니다. 여기서 새 볼륨을 추가하면

그림과 같이 8GB의 EBS 볼륨을 추가하게 됩니다.
루트 볼륨은 뭐고 EBS 볼륨은 뭘까요? 자세히 살펴보겠습니다.

볼륨 1은 (AMI루트)라고 나와있습니다. 이것은 컴퓨터를 실행하기 위해서 필요한 스토리지입니다. 쉽게 말해서 컴퓨터가 켜지고 실행되기 위해서는 OS가 필요한데 이 OS는 2차 스토리지에 설치되어 있어야 합니다. 이런 컴퓨터의 기본 프로그램들을 AWS AMI 스냅샷으로부터 바로 받아와서 컴퓨터 부팅에 사용하는 것입니다.

여기서 중요한 점은 볼륨 1인 루트 볼륨의 스토리지 유형도 EBS로 나타납니다. 결국 인스턴스가 기본적으로 사용하는 2차 메모리도 EBS입니다.

제가 추가한 볼륨 2는 스토리지 유형이 EBS이고 디바이스 이름은 /dev/sdb입니다. 리눅스는 스토리지를 파일단위(특수파일)로 관리하죠? 그 디바이스 파일을 /deb/sdb를 사용하는 것입니다. 이 파일은 나중에 파일시스템을 포맷할 때 사용해야 합니다. 자세한 내용은 뒤에서 설명하겠습니다.
이 외에도 크기와 볼륨 유형, IOPS(Input/output Operations Per Second), 종료시 삭제, 암호화 여부를 묻습니다. 종료시 삭제를 아니요로 설정하면 인스턴스의 생명주기와 별도로 EBS 볼륨이 관리됩니다.

이렇게 인스턴스 설정을 한 뒤 생성을 해보겠습니다.

인스턴스가 정상적으로 실행되었고 볼륨에 생성한 볼륨과 root볼륨이 있는 것을 확인했습니다. Name을 new와 root로 지정해서 구분하겠습니다.

root 볼륨은 자동으로 마운트되어 사용할 수 있지만 (운영체제가 설치되고 컴퓨터가 부팅하기 위해서 자동으로 마운트) 새로 생성한 빈 ebs 볼륨은 인스턴스와 연결(attach)만 되어있고 사용할 수는 없는 상태입니다. 이것을 사용하려면 파일시스템을 포맷하고 마운트하는 작업이 필요합니다. 그럼 여기서 파일시스템은 뭐고 마운트는 뭘까요?

파일시스템

파일시스템(File System)은 운영체제에서 파일을 저장하고 관리하는 방식입니다. 파일 시스템은 파일이나 디렉토리를 생성하고 저장하며, 디스크 공간을 효율적으로 사용하기 위한 알고리즘을 제공합니다. 일반적으로 파일 시스템은 블록 단위로 데이터를 저장하며, 파일 시스템의 종류에 따라 데이터를 저장하는 방식이나 알고리즘 등이 다를 수 있습니다. 예를 들어, Linux 운영체제에서는 ext4, XFS 등의 파일 시스템이 주로 사용되고 있으며, Windows 운영체제에서는 NTFS, FAT32 등의 파일 시스템이 사용됩니다

파티션

하드디스크에 빈 공간이 있다고 막 저장하지 않는다는 것이죠. 운영체제가 파일을 관리하는 시스템이 스토리지에서 설정되어 있어야 하는 것입니다. 여기서 말하는 스토리지는 하나의 파티션을 의미합니다. 하드디스크는 여러개의 파티션을 나뉠 수 있습니다. 대표적으로 Windows에서 C드라이브와 D드라이브로 나누어 데이터를 저장하는 것이 파티션을 나눈 것입니다.

블록

넘어가기 전에 설명하고 싶은 것이 있습니다. 이전에 제가 EBS가 어느 수준의 스토리지라고 했죠? 블록 수준이라고 했습니다. 여기서 블록은 뭘까요? 블록은 섹터들의 집합으로 보통 4KB를 사용합니다. 파일시스템은 블록을 최소단위로 데이터들을 Input Output 합니다. EBS도 블록을 최소단위로 데이터를 저장하기 때문에 블록 수준의 스토리지라고 하는 것입니다. 이와 반대로 EFS는 파일 수준의 스토리지입니다.

섹터(Sector)란?
하드디스크가 원통형으로 생긴 것은 다들 알 것으로 생각한다. 하드디스크는 데이터를 저장할 때 원통으로 생긴 저장소 중 하나의 원판(플래터)을 트랙으로 나누고 트랙을 섹터로 나누는데 이 때 하나의 섹터를 데이터를 저장하는 최소 단위로 사용한다. 보통 512Byte를 사용하는데 이것은 운영체제가 데이터를 읽고 쓰는데 너무 작기 때문에 여러 섹터를 묶어 하나의 블록이라는 단위를 만들고 I/O의 최소단위로 쓰는 것이다. 블록은 윈도우 운영체제에서 클러스터라 부르기도 한다.

하지만 EBS는 여러 파티션으로 나눌 수 있지만 하나의 파티션으로 사용하는 것이 일반적입니다. 이제는 마운트에대해 알아보겠습니다.

마운트?

마운트는 왜 할까요? 꼭 필요한 걸까요? 어느 블로거의 표현을 빌리자면 마운트는 배를 정박하는 것과 같은 개념입니다. 배는 디스크의 파티션이고, 파일시스템은 이 배의 선장, 디렉토리는 선착장입니다. 마운트를 하지않으면 해당 하드디스크의 공간을 운영체제가 사용할 수 없습니다.

빈 하드디스크 하나가 있습니다. 이것을 리눅스 운영체제 컴퓨터와 연결하면 자연스럽게 빈 공간이 뿅 생길 것 같지만 (윈도우는 자동으로 마운트가 되기 때문에 뿅 생기긴 한다) 리눅스 운영체제는 이 하드디스크가 추가되었는지 이 기기가 뭔지 모릅니다. 그래서 이 새로생긴 배(디스크파티션)에 선장(파일시스템)을 배치하고 배들이 정박되어 있는 선착장(디렉토리)에 정박해야 합니다.

마운트를 하는 과정을 알아봅시다.

  1. 디스크 추가
    당연히 사용하려면 디스크(선박)가 있어야죠?

  2. 디스크 파티션을 나눈 뒤 사용할 시스템에 맞춰 타입 정하기
    (전투함인지, 수송함인지, 그냥 뗏목인지)
    세상에 수 많은 배가 있듯이, 시스템도 수 많은 시스템(XFS, FAT32..)이 있습니다. 그리고 당연히 그 시스템에 맞는 디스크 파티션을 만들어야겠죠?
    대표적으로 fdisk 명령어를 사용합니다.

  3. 용도에 맞게 파일시스템 포맷하기
    (전투함이면 전투함을 사용할 줄 아는 선장을 배치해야하고, 수송함이면 수송함에 특화된 선장을 배치해야겠죠?)
    당연한 거죠. 전투함에 일반 선박 선장을 배치하면 제대로 조종을 할 수 있겠습니까?
    대표적으로 mkfs 명령어를 사용합니다.

  4. 디스크를 마운트 할 마운트 포인트(디렉토리)를 만들어 둔다
    (선박이 선착할 수 있는 선착장을 마련한다)
    선착장이 없으면 배가 선착할 수가 없겠죠? 그리고 일반 파일 공간을 선착장이라고
    마련하면 배가 선착할 수 없겠죠? 배가 들어갈 크기의 공간 "디렉토리"정도가 필요할 것입니다.
    mkdir 명령어를 이용해서 간단하게 디렉토리를 만듭시다.

  5. 마운트하기
    이제 배가 선착하는 마운트 명령을 내립니다.
    mount 명령어를 이용해 디렉토리와 디바이스 파일을 일시적으로 마운트하거나
    /etc/fstab 파일을 수정해 영구적으로 마운트할 수 있습니다.

여기서 더깊게 들어가면 글이 길어지므로 자세한 내용은 추후에 따로 블로깅 하겠습니다.

이제 EBS가 왜 마운트해야 사용할 수 있는지 알았으니 다시 AWS EBS로 넘어와서 인스턴스에 연결해 봅시다.

EBS volume의 Mount

여담으로 인스턴스에 처음 연결하면 습관처럼 하는 것이 sudo yum update -y 입니다. 왜 업데이트를 해야하는지 생각해보신적 있으신가요? 인스턴스가 AMI으로부터 운영체제, 소프트웨어 패키지들을 현재 인스턴스의 root 볼륨에 마운트했지만 최신 버전의 패키지가 아닐 수도 있기 때문에 최신 버전으로의 업데이트를 추천하는 것입니다. AMI가 최신 버전의 소프트웨어 패키지들을 가지고 있으면 최고겠지만 현실적으로 그럴 수가 없습니다.

lsblk(list block devices)을 통해 사용 가능한 디스크 디바이스 및 마운트 포인트(해당하는 경우)를 출력합니다.

루트 디바이스는 xvda1이라는 파티션이 하나 있는 /dev/xvda입니다. 연결된 볼륨은 파티션이 없고 아직 탑재되지 않은 /dev/xvdb입니다.

볼륨에 파일 시스템이 있는지 확인합니다. 새 볼륨은 원시 블록 디바이스이므로 볼륨을 탑재하고 사용하기 전에 해당 볼륨에서 파일 시스템을 생성해야 합니다. 스냅샷에서 생성된 볼륨에는 이미 파일 시스템이 있을 수 있습니다. 기존 파일 시스템 위에 새 파일 시스템을 생성하면 해당 작업으로 데이터가 덮어쓰기됩니다.

file -s 명령을 사용하면 파일 시스템 유형 등의 특정 디바이스 정보를 확인할 수 있습니다.

data가 출력되면 파일시스템이 없는 것입니다.

lsblk -f 명령으로도 파일시스템을 확인할 수 있습니다. /dev/xvdb에는 파일시스템이 없습니다.

파일시스템 포맷

EBS 볼륨은 파티셔닝을 보통 생략하기 때문에 바로 파일시스템을 포맷해보겠습니다.
mkfs 명령을 통해 linux에서 주로 사용되는 xfs 파일시스템을 포맷합니다.

마운트포인트(디렉토리) 생성

/data라는 새로운 디렉토리를 만들고 볼륨을 마운트하겠습니다.

마운트

마운트한 뒤 마운트 정보를 출력하는 mount 명령을 입력했습니다.

마운트가 성공적으로 이루어진 것을 볼 수 있습니다.

마운트를 해제할 때는 unmount 명령을 이용해 손쉽게 해제할 수 있습니다.

df 명령을 이용해 시스템이 사용할 수 있는 디스크 공간을 확인해보겠습니다.

EBS에서 만든 8GB의 공간을 사용할 수 있는 것을 확인할 수 있습니다!

하지만 앞서 말했지만 mount 명령은 일시적 마운트라서 인스턴스가 꺼졌다가 켜지면 인스턴스는 마운트했던 것을 까먹습니다.
따라서 /etc/fstab파일(file system table)을 수정해 영구적 마운트를 해야합니다. 진짜 인스턴스 재부팅후 언마운트 됐는지 확인해보기 위해 /data에 파일 abc를 만들고 재부팅해보겠습니다.

재부팅 후

마운트포인트가 사라졌고 /data에 아무 파일이 없는 것을 확인할 수 있습니다.

영구적 마운트

이제 부팅때마다 귀찮게 마운트하는 것을 방지하기위해 얼른 /etc/fstab을 수정하도록 합시다.

현재 /etc/fstab 파일의 모습입니다. xvdb의 UUID를 복사해서 붙여놓고 위의 형식과 같게 작성해봅시다.

/etc/fstab을 잘못건들인다면 부팅이 안될 수도 있으니 수정에 조심해야합니다.
이제 재부팅해서 다시 확인해봅시다! 두구두구

오늘은 AWS의 EBS와 Linux에서 파일시스템의 mount에 대해 알아보았습니다. 피드백은 언제나 환영입니다.


참고:

profile
DevOps Engineer

0개의 댓글