아 빡쎄다 빡쎄... 오늘의 핵심은 셸 스크립트~

인 줄 알았으나 볼륨 관리가 핵심이었다 ^^ 마지막 세션에서 가장 강력한 녀석이 나올 줄이야... 앞부분 싹 까먹음

그냥 넘어가기 너무 찝찝해서 강사님도 퇴근 못하시게 붙들고 질문하고 (넘 감사...) 여기저기 검색을 좀 해봤다.
볼륨...? 소리요...? ← 거의 이정도 수준의 이해력이었음

🧑🏻‍💼 LVM(Logical Volume Manager)

Ubuntu에서 주로 사용하는 볼륨 관리 도구로, 이를 통해 물리적 디스크를 논리적 볼륨으로 결합하고 관리할 수 있다.

기본적인 정의는 이렇다. 하지만... 왜...? 하는 건데...?에 대한 의문이 자꾸 들어서 이해하기가 어려웠다. 그래서 나름대로 왜~ 이렇게 사용하는 것인가에 대한 의문을 찾기 위한 여정을 떠났다.

LVM은 조금 더 쉽게 말하면 여러 개의 HDD의 용량을 합쳐서 하나의 파일 시스템으로 만드는 것이다.

그리고 볼륨 관리의 목적은 아무튼 디스크 공간을 효율적으로 사용하기 위함이다. 이게 이해가 안됐지만... 그림으로 설명된 걸 봐도 이해가 안됐지만... 일단 계속 찾아봤다.

🤔 우리는 볼륨 관리를 왜 하는 걸까?

☑️ 유연성

첫 번째 이유는 바로 용량 관리를 위해서다.

사용하고 있는 하드 디스크의 용량이 부족해지면 보통 기존의 파티션을 조정하거나 새로운 하드 디스크를 추가하게 될 것이다. 이 과정에서 우리가 LVM을 사용한다면 논리 볼륨을 쉽게 확장하거나 축소할 수 있어서, 유연하게 공간을 관리할 수 있다.

그러니까 이 말이… 감이 안 오니까 이해하기 어려웠다. 이 글을 찬찬히 읽어보시면... 이해가 될 수도 있어요.

☑️ 스냅샷 기능

두 번째 이유는 시스템을 백업하고나 복구하기 용이하게 하기 위함이다.

LVM은 특정 시점의 데이터를 스냅샷으로 저장할 수 있다. 이를 통해서 백업이나 복구가 쉽다.

이건 내일 실습하면서 차차 알게될듯. 우선은 넘어가자.

💽 LVM 논리 볼륨 구성

* 출처: Red Hat Documentation

그림 아래서부터 각 구성이 무엇을 의미하는지 살펴보자.

💪🏻 물리적 볼륨(Physical Volumn, PV)

실제 하드디스크나 파티션을 의미한다. 여기에 데이터가 물리적으로 저장되고, 하드디스크의 특정 파티션이나 RAID 배열의 구성 요소 등(먼소린지 모르겠음 일단은 그런갑다 하고 넘어갑시다)이 물리적 볼륨이 될 수 있다고 한다.

LVM에서 물리적 볼륨은 저장 공간의 기본 단위가 된다.

🙄 VDI(가상 디스크 이미지)

Oracle VirtualBox에서 사용하는 가상 디스크 파일 형식, 가상 머신에서 사용할 수 있는 하드 디스크의 역할을 한다. LVM의 기본 저장 단위이다.

실습에서 Oracle VM에서 생성한 VDI도 가상의 하드디스크로 물리적 볼륨에 해당한다.

가상의 하드디스크라... 좀 어려웠음... 기계에 약한 개발자... 정말 부끄러운 일이다. 먼 소린지 잘 알아들을 수 있게 열심히 공부해야징...

암튼, 이것은 무엇이냐면 실제 하드디스크의 용량을 분할하거나 파일 형태로 저장한 것이다. 내가 알고 있는 물리적 하드디스크에서 일정량의 공간을 가상화해 사용할 수 있다.

때문에 VDI는 실제 하드디스크의 특정 위치에 저장되고, 이 파일이 가상 머신에서 하드디스크처럼 작동할 수 있게 한다. 무한대로 만들어서 쓸 수 없단 이야기...

VDI는 물리적 저장 장치, 실제(?) 하드디스크 위에서 만들어지는 것이다.

  • VDI 생성 : 가상의 하드디스크 파일을 만드는 것
  • VDI → 가상 머신이 운영체제와 데이터를 저장하는 데 필요한 공간을 제공

🔊 볼륨 그룹 (Volumn Group, VG)

sudo vgcreate my_vg /dev/sdb

* sdb는 vdi를 통해 만들었던 물리적 볼륨이다.

우리는 위와 같은 명령어를 통해 하나의 볼륨 그룹을 만들 수 있다.

그렇다면 이 볼륨 그룹의 역할은 무엇일까?

👉 여러 개의 물리적 볼륨(PV)를 하나의 논리적 단위로 묶어서 관리할 수 있게 만들어준다.

👉 그리고 이를 통해 VG 내에서 논리적 볼륨(LV)를 생성할 수 있다.

👉 데이터를 관리하기 쉽다 (아까 말한 스냅샷 기능 덕분에)

정말 이게 무슨 말인지, 이게 왜 필요한지 이해가 잘 안 갔다.

하지만 결과적으로 이러한 역할들이 어떤 효과를 주냐하면

👉 성능을 최적화할 수 있다
→ 여러 물리적 볼륨을 묶으면 I/O 성능을 향상시킬 수 있다. 왜냐하면 여러 디스크에서 데이터를 동시에 읽고 쓸 수 있기 때문이다.

👉 여러 PV를 사용해서 RAID와 같은 장애 조치 기능을 구현할 수 있다. → 하나의 디스크가 고장 나더라도 다른 디스크에서 데이터 복구 가능

그래서 우리가 굳이 이렇게 어려운 개념을 배우는 이유가 무엇이냐! 왜 이러한 것들이 발달했냐! 묻는다면 그 이유는 효율을 위해서다.

볼륨 그룹을 만드는 것은 저장소를 효율적으로 관리하고, 필요에 따라서 유연하게 사용 가능하도록 만드는 일이다.

  • 서버 관리에 활용 가능 - 서버에서 다양한 애플리케이션과 서비스를 운영할 때, 각 서비스에 맞는 LV를 생성하여 관리할 수 있다.
  • 데이터베이스 운영에 도움 - 데이터베이스의 데이터 파일과 로그 파일을 서로 다른 LV에 저장하여 성능을 최적화할 수 있다.

😯 데이터 저장을 위한 구조, 하지만 실제 데이터는 저장되지 않는다

PV(물리적 볼륨)은 실제 하드디스크/파티션을 의미한다. 때문에 데이터가 물리적으로 저장된다.

하지만 VG(볼륨 그룹) 그저 하나 이상의 PV를 논리적으로 묶은 것 뿐이다. 데이터를 저장하기 위한 구조를 제공할 뿐, 실제 데이터를 저장하지 않는다.

그렇다면! 실제 데이터는 어디에 저장되는가! 그것은 바로... 논리적 볼륨(LV)에서 벌어진다. LV에에서 사용자가 파일 시스템을 생성하고 실제 데이터를 저장하는데 사용된다.

여기서 슬슬 감이 잡히기 시작함... 그렇다면 마지막으로 LV를 알아보자!

🧠 논리적 볼륨 (Logical Volumn, LV)

그래서 결국 우리는... 논리적 볼륨이 무엇을 하는지, 왜 좋은지를 배우기 위해서 앞 내용을 배운거임. 빌드업은 이런거다 명보야.

논리적 볼륨은 LVM에서 사용자에게 제공되는 가상의 저장 공간이다. 사용자가 파일 시스템을 만들고 저장할 수 있다.

때문에 LV는 실제로 운영 체제에서 마운트하여 사용할 수 있는 드라이브와 같다.

sudo lvcreate -L 10G -n my_lv my_vg

논리적 볼륨을 생성하는 명령어다. 위 명령어에서는 10G 크기의 논리적 볼륨을 생성했다.

그래서 이 친구의 역할은 무엇이냐! 이미 위에서 여러 차례 언급했다.

👉 물리적 볼륨에서 할당된 공간을 기반으로 VG 내에서 생성되는데, 필요에 따라 크기를 조절하여 파일 시스템을 만들고, 데이터를 저장한다.

# 논리적 볼륨에 파일 시스템 생성
sudo mkfs.ext4 /dev/vg_data/lv_storage

# 논리적 볼륨을 마운트하고 사용
sudo mkdir /mnt/storage
sudo mount /dev/vg_data/lv_storage /mnt/storage

# 파일 시스템 상태 확인 명령어
df -h

주석으로 설명해두엇지만, 이렇게 명령어를 통해서 직접 파일 시스템을 생성하고, 논리적 볼륨을 마운트하여 사용할 수 있다.

🛢️ 크기

정말... 이해하는데 어려웠다. 내가 이해하기에 어려워 한 또 다른 이유는 용량 때문이다. 계층 구조처럼 생각하자니 어딘가 이상한거다. 어디에서 무엇이 생성되고, 무엇이 실행되는지를 어느정도 감 잡은 지금은 괜찮지만 대체 VG, LV의 용량은 어디에서 오는지 이해가 안 가서 어려웠다.

💾 물리적 볼륨(PV)의 크기

실제 하드 디스크나 파티션의 크기를 나타낸다고 했다. 500GB의 파티션을 PV로 사용한다면 PV의 크기는 500GB이다.

📀 볼륨 그룹(VG)의 크기

VG의 크기는 PV들의 총합, 여러 PV의 크기를 합한 값이다.

예를 들어서 500GB의 와 1TB의 두 PV가 있다면, 이 두 PV로 구성된 VG의 크기는 1.5TB가 된다.

💿 논리적 볼륨(LV)의 크기

VG 내에서 생성되며 당연히 VG의 크기에 따라 결정된다. 때문에 LV는 VG의 전체 용량 이하로 설정해야 한다.

VG는 이 두 PV의 저장 용량을 합쳐서 산정되고, LV는 VG의 크기만 신경쓴다. VG의 합산된 용량을 나눠받아 파일 시스템을 생성하고, 각각 데이터를 저장하기도 하는 것이다.

VG의 크기는 항상 PV 크기의 합보다 작거나 같아야 한다.

🎓 LVM의 이점

그렇다면 이제 슬슬 이해가 된 것 같다!

앞선 예시에서처럼 500GB와 1TB의 두 개의 PV가 있다고 가정한다.
우리는 이 두 PV를 묶어서 1.5TB의 볼륨 그룹을 생성할 수 있다.
그리고 현재 필요한 데이터 공간은 600GB이다.

당신이라면 어떻게 할 것인가?!

만약 1TB의 PV만을 사용한다면 애매하게 400GB가 남을 것이고, 500GB의 다른 PV를 사용할 수 있다. 그런데 이 때 또 600GB의 데이터 용량이 필요하다면?! 상당히 애매한 상황이 발생할 것이다. 1TB의 PV를 사면 되기야 하겠지만 남은 데이터 공간이 존재하는데...! 이걸 활용할 방법은 없을까?!

👉 두 개의 PV를 묶어서 총 1.5TB의 VG을 생성하면 된다. LVM을 사용하면 VG에서 600GB LV를 생성할 수 있고, 남은 900GB도 자유롭게 사용할 수 있게 된다. 1TB의 PV에서 400GB가 남는 것보다, 두 개를 합쳐서 1.5TB로 관리하는 것이 훨씬 더 유리하다.

LVM을 사용하기 전에 발생한 비효율적인 상황을 LVM이 해결해주는 것이다~ 이제서야 이해가 됨... '유리하다'는 말이 이제 이해가 됨. 그리고 걍 저장공간이라는게 꽂아두면 알아서 합쳐져서 다 쓸 수 있게 되는 게 아니란 것도 알았다 머쓱

이해하는데 정말 오래 걸렸다... 암튼 볼륨... 시스템... 관리... 진짜 어려웠다... 마지막 시간에 정말 당황했지만, 그래도 오늘은 우선 여기까지 공부해두고 내일 수업을 더 열심히 들어봐야겠다. 그래도 알면 알수록 재미는 있는 것 같당. 이런거 알아야 개발자 하는거군아... 열심히 배워야지! 💪🏻

참고문헌

은 다음에 적을래... 이제 쉴래...


본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다

profile
영차영차 😎

0개의 댓글