개인/리눅스

[리눅스] LVM 과 RAID 개념

OmeGa2 2020. 1. 12. 16:36

리눅스에서의 하드디스크

리눅스에서는 디스크를 효율적으로 관리하고 사용하는 방법으로

LVM과 RAID 기술을 사용하고 있습니다.

 

이는 디스크의 파티션을 보다 유연하게 사용할 수 있게 해 주며

데이터의 손실을 방지하고 효율적으로 읽고 쓸 수 있는

방법으로 사용되기도 합니다.

 

이 글에서는 두 가지 기술에 대해 간단하게 알아보려고 합니다.

개인적인 공부를 위해 작성하는 글이기 때문에

지적이나 추가 설명은 언제나 환영입니다.

 

 

 

LVM (Logical Volume Manager)을 사용하는 이유

리눅스 안에서 하나의 디스크를 여러 파티션으로 분할해서 파일 시스템을 사용해

특정 디렉터리와 연결시켜 사용하게 됩니다.

 

이때 하드디스크를 파티션으로 나눌 경우 물리적인 개념이 강해서

고정적인 용량으로 사용하게 됩니다. 따라서 디스크의 추가/제거 시에 별도로

복잡한 작업이 필요하게 되고 데이터 관리가 불편할 수 있습니다.

 

LVM은 파티션을 논리적인 개념인 볼륨으로 나눠서 더 유동적으로

디스크의 용량을 관리할 수 있습니다.

볼륨은 기본적으로 단일 파티션에 상주하게 되지만

다수의 파티션을 하나의 볼륨으로 관리할 수도 있습니다.

그래서 여러 파티션을 합치거나 분할하기에 용이해서 유용하게 사용할 수 있습니다.

 

 

 

 

 

볼륨과 파티션

LVM을 이해하기 위해서는 먼저 볼륨과 파티션을 구분할 수 있어야 합니다.

 

 

  • 파티션

디스크는 파티션이라는 논리적인 크기로 분할 / 통합해서 사용합니다.

하나의 디스크를 여러 개로 분할하기도 하며

여러 개의 디스크를 하나의 파티션으로 통합하기도 합니다.

 

파티션은 고정적이고 물리적인 개념이 강하며 한 번 크기를 설정하면 변경하거나

추가하기 힘들고 OS는 각 파티션을 별도의 디스크처럼 인식합니다.

 

 

  • 볼륨

파일 시스템으로 포맷된 디스크 상의 저장 영역이라고도 하며 

파티션과 비슷한 개념이지만 엄연히 다릅니다.

 

볼륨은 디스크의 단일 파티션에 상주하게 되며 파티션보다 논리적이고 유동적인 개념입니다. 

우리는 하나의 디스크를 여러 개의 파티션으로 나누어 사용합니다.

이때 볼륨은 파티션마다 하나씩 존재하기도 하며,

여러 파티션에 하나만 존재할 수도 있습니다.

 

 

ex) 

물리디스크 파티션 볼륨 1  볼륨 2 
하드디스크 파티션 1 C: 드라이브 LVM (가상)
파티션 2  D: 드라이브

 

디스크를 2개의 파티션으로 나누었을 때,

각각의 파티션마다 1개의 볼륨을 가져 총 2개의 볼륨을 가질 수도 있고

2개의 파티션이 1개의 볼륨을 가질 수도 있습니다.

 

 

 

 

 

 

LVM의 기능

리눅스에서 디스크를 사용하는 방법은 가장 기본적으로

디스크를 파티션으로 나누어 각각의 디렉터리에 파일 시스템으로 마운트 한 뒤

지정된 위치에 데이터를 저장해서 사용하게 됩니다.

(디스크 → 파티션 → 파일시스템 (/home))

 

LVM은 커널에 구현된 기능으로 디스크를 좀 더 효율적으로 사용할 수 있습니다.

LVM은 파티션 대신 볼륨이라는 단위로 저장장치를 다루며

물리 디스크를 볼륨 그룹으로 묶어 다시 논리 그룹으로 나누어 파일 시스템을 만듭니다.

(디스크 파티션 볼륨그룹 논리그룹 파일시스템 (/home))

 

LVM을 적용하게 되면 디스크를 변경, 추가할 때 물리적인 부분을 건드릴 필요가 없어

여러 디스크를 하나로 뭉쳐서 사용할 수도 있으며

하나의 디스크를 여러 디스크인 것처럼 나누어 사용할 수 있습니다.

사용 중인 파티션의 크기를 바꿀 수도 있고

디스크를 추가한 뒤 간단한 작업을 통해 용량을 확장시킬 수 있습니다.

 

물리 디스크 물리 디스크
파티션 파티션
물리 볼륨 물리 볼륨
파일 시스템 논리 그룹 (LVM)
논리 볼륨 (LVM)
파일 시스템

 

 

 

 

 

LVM의 구성

디스크를 좀 더 유연하게 사용하기 위해

물리적인 파티션을 논리적인 볼륨으로 바꿔서 사용합니다.

LVM에서는 여러 파티션을 하나의 논리적인 볼륨으로 묶은 뒤

다시 필요한 크기만큼 나눠서 사용할 수 있습니다.

 

  • PV (Physical Volume)

물리적 볼륨으로 디스크를 LVM에서 사용할 수 있게 변환하는 작업을 말합니다.

디스크의 파티션을 PV로 초기화시켜 일정한 크기의 PE로 구성됩니다.

 

  • VG (Volume Group)

PV가 모여 만들어진 그룹을 말합니다.

물리적인 일정한 크기의 PE로 구성된 PV들이 모여 VG가 만들어집니다. 

VG는 다시 LV로 할당할 수 있는 공간을 말하기도 합니다.

 

  • PE (Physical Extent)

PV에서 나누어 사용하는 블록입니다. 보통 1PE의 크기는 4MB이며

VG가 새롭게 나누는 논리적인 LV의 LE와 1:1 대응합니다.

 

 

  • LV (Logical Volume)

VG에서 사용자가 필요한 만큼 할당돼서 만들어지는 공간입니다.

논리적인 파티션이라고 볼 수 있으며 이는 다시 LE로 나누어집니다.

 

  • LE (Logical Extent)

LV가 나누어진 일정한 크기의 블록으로 물리적 크기인 PE와 1:1 대응합니다.

 

# LVM을 적용할 경우

물리 디스크
파티션 1 파티션 2
PV (물리적 볼륨) PV (물리적 볼륨)
PE (4MB) PE (4MB) PE (4MB) PE (4MB)
VG (볼륨 그룹)
LV (논리적 볼륨) LV (논리적 볼륨)
LE (4MB) LE (4MB) LE (4MB) LE (4MB)

 

물리적인 크기를 논리적인 크기로 바꿔서 분할, 결합이 더 유연합니다.

물리적 크기인 PE는 논리적 크기인 LE와 1:1 맵핑하게 됩니다.

 

 

 

 

 

RAID 란

여러 개의 하드디스크가 있을 때 동일한 데이터를 다른 디스크에 중복해서 저장하는 방법입니다.

동일한 데이터를 여러 디스크에 나눠서 저장할 경우

효율적으로 데이터를 관리하며 데이터의 손실을 막을 수도 있습니다.

 

OS에서는 하나의 RAID는 논리적으로 하나의 디스크로 인식해서 처리됩니다.

RAID의 기술은 데이터 기록하는 방식이나 에러를 체크하는 패리티나 ECC 등 구성 방법에

따라 다양한 형태로 존재합니다.

 

 

RAID에서 사용되는 기술

RAID에서 데이터를 나누는 방법에는 여러 가지가 있으며

공통적인 목적으로는 저장장치의 신뢰성을 높이고 빠르게 데이터를 읽어 들이면서

데이터의 손실을 막으려는 목적도 있습니다.

이와 관련된 기술로는 크게 두 가지가 있습니다.

 

  • 스트라이핑 (Striping)

스트라이핑은 라운드 로빈 방식으로 데이터를 기록하는 기술로

대량의 데이터를 순차적으로 읽기/쓰기 할 수 있는 기술입니다.

 

스트라이핑은 여러 디스크에 데이터를 읽고 쓰는 작업을 병렬로 실행합니다.

순차적으로 여러 디스크에 같은 데이터를 기록하게 되며

이는 프로세서가 하나의 디스크에서 데이터를 읽어 들이는 것보다

더 빠르게 데이터를 읽어올 수 있습니다.

 

4개의 디스크에 같은 데이터를 스트라이핑 방식으로 기록하게 된다면

하나의 디스크에 기록하는 것보다 훨씬 빠르게 처리할 수 있습니다.

 

 

  • 미러링 (Mirroring)

미러링은 데이터 손실을 막을 수 있는 방법 중 하나입니다.

 

디스크에 에러가 발생할 경우 해당 데이터들이 손실될 수 있습니다.

이를 방지하기 위해 여러 개의 장치에 데이터를 중복 저장합니다.

 

두 개의 디스크로 미러링을 구현한다면 하나의 디스크에 데이터가 입력되면

자동으로 미러링 된 디스크에도 데이터가 입력됩니다.

그래서 디스크 하나가 망가지더라도 나머지 하나의 디스크에 데이터는 그대로 보존됩니다.

 

미러링은 결함 허용 이라고도 불리며 디스크와 같은 하드웨어뿐만 아니라

소프트웨어에도 구현이 가능한 기술입니다.