LVM은 별 관심이 없는 기술이었다. 시스템관리자에게나 필요한 기술이지, 나 같은 소프트웨어 개발자에게 필요한 기술은 아니기 때문이다. 알고 있으면 도움이 되겠으나, 몰라도 크게 상관 없는 그런 기술이었다.
요즘(2012년) 클라우드 관련일을 하면서 LVM에 관심을 가지게 됐다. 클라우드의 장점은 자원의 탄력적인 운용이다. 스토리지 역시 이러한 요구사항을 만족해야 했다. 분산 스토리지, ZFS와 같은 볼륨 메니저, (소프트웨어 혹은 하드웨어)RAID등 다양한 기술들이 있는데, 그중 LVM을 먼저 살펴보기로 했다.
리눅스 시스템에서 Volume를 만드는 일반적인 방법은 블록 디바이스에 파일 시스템을 만들어서 마운트하는 거다. 대략 아래와 같이 묘사할 수 있다.
.
블럭 장치인 /dev/sda1, /dev/sda2를 파일 시스템에 마운트 해서 사용하고 잇다.
만약 /dev/sda1 을 /mnt/ftp에 마운트 해서 사용하고 싶다면 아래와 같이 작업을 하면 된다.
이 방식은 파일 시스템과 장치가 직접 맵핑되기 때문에 사용이 직관적이고 구성이 쉽다는 장점이 있다. 반면 유연하지 않다는 단점이 있다. 처음 /dev/sda1의 크기를 10G로 잡았는데, 용량이 부족해서 늘려야 할 경우도 있다. 장치를 새로 마련하는 방법이 있겠는데, 장치를 여러개 묶어서 크기를 늘리는 것도 쉬운일이 아니다. 혹은 파티션을 나눠야 하는 등 해야 할게 많아진다.
특히 대량의 데이터를 사용하는 일이 많은 요즘에는 disk를 함께 묶어서 storage pool를 구성해야 할 필요성이 늘어나고 있다. 물리적인 볼륨을 논리적인 볼륨으로 구성할 수 있어야 한다.
LVM을 이용해서 논리적인 볼륨을 구성 할 수 있다. LVM은 File System과 블럭 디바이스를 추상화 한다. 아래의 그림을 보자.
논리적인 볼륨을 하나 만들어서 블럭 장치들을 하나로 묶어 버린다. 그리고 나서 적절한 크기로 나눠서 사용한다. 논리적이니 만큼 볼륨을 새로 만들거나 기존 볼륨의 크기를 늘리거나 하는 일을 자유롭게할 수 있다.
LVM를 좀 더 자세히 살펴 보자. LVM의 가장 밑에는 물리적 볼륨이 있다. 이것을 PV(Physical Volume)라고 한다. 위 그림은 2개의 PV로 구성돼 있다. 그리고 PV는 PE라는 블럭의 모음으로 구성된다. PE는 Physical Extents의 줄임말 이다.
PV위에는 VG가 있다. Volume Group의 줄임말인데, PV를 논리적으로 묶은 볼륨 그룹이다. 이제 LVM에 Volume를 요청하면, 요청한 크기만큼 LV를 돌려준다. 이 LV를 (/mnt/ftp 등에)마운트 해서 사용하면 된다. 만약 /mnt/ftp의 볼륨크기를 키울려면 남는 PE를 요청해서 LV크기를 늘리면 된다.
Linear Mapping LV 일반적인 방식이다. 블럭 장치에 데이터를 쓰듯이 순차적으로 슨다.
Striped Mapping LV : 두 개의 PV를 striping해서 사용한다. PV의 PE는 적당한 크기의 조각들로 나누어지는데, LVM은 데이터를 두 PV에 분산하여 할당을 한다. 그래서 두개의 PV에서 동시에 데이터를 읽고 쓸수 있게 해서 대역폭을 늘릴 수 있다.
서비스의 중지 없이 백업을 하려고 할때 특히 신경써야 하는게, 백업 도중 데이터 변경이다. 이 문제는 Snapshot LV를 이용해서 해결할 수 있다. 이 기능을 이용하면 특정 시점의 데이터 상태를 고정할 수 있다. 고정하기 원하는 LV를 복사해서 읽기 전용의 새로운 LV를 만드는 방식이다.
Linux에서 LVM을 테스트 해보기로 했다. 지금 사용하고 있는 리눅스 박스에는 LVM을 테스트할 더 이상의 공간이 없기 때문에, VirtualBox를 이용해서 테스트 하기로 했다. 장치를 추가할 수 있기 때문에 간단히 테스트 환경을 구축할 수 있다. 두 개의 SATA 디바이스를 추가했다. 이름은 PV1 PV2, 크기는 2G byte로 했다.
Contents
1. LVM에 관심을 가지게된 이유
1.1. LVM 구조
2. LVM으로 할 수 있는 것들
2.1. Linear Mapping LV 와 Striped Mapping LV
2.2. snapshot LV
3. Linux LVM
3.1. 현재 장치 상태 확인
3.2. pv 확인하기
3.3. pv 만들기
3.4. vg 만들기
3.5. lv 만들기
3.6. mount해서 잘 사용하기
3.7. Volume 관리하기
3.7.1. 볼륨 크기 키우기
3.8. LVM과 iSCSI
1. LVM에 관심을 가지게된 이유
1.1. LVM 구조
2. LVM으로 할 수 있는 것들
2.1. Linear Mapping LV 와 Striped Mapping LV
2.2. snapshot LV
3. Linux LVM
3.1. 현재 장치 상태 확인
3.2. pv 확인하기
3.3. pv 만들기
3.4. vg 만들기
3.5. lv 만들기
3.6. mount해서 잘 사용하기
3.7. Volume 관리하기
3.7.1. 볼륨 크기 키우기
3.8. LVM과 iSCSI
Recent Posts
Archive Posts
Tags