관리 메뉴

드럼치는 프로그래머

[Linux] 리눅스-LVM 본문

★─Programing/☆─Linux

[Linux] 리눅스-LVM

드럼치는한동이 2007. 8. 6. 17:16

문제

리눅스 사용자가 부딪치게되는 가장 큰 문제중 하나는 리눅스를 설치시 각 파티션에 얼마만큼 공간을 할당할지 결정하는 일이다. 이 문제는 당신이 많은 서버를 관리하는 시스템 관리자이거나 디스크 공간이 부족해짐을 안 중급/고급 리눅스 사용자이거나 관계없이 해당된다. 이런 문제가 낯설지 않을 것이다. 그러면 보통 문제를 해결하려는 노력이 시작된다. 사용자는 파티션간에 심볼링크를 걸거나 parted같은 파티션 크기조정 도구를 사용하는 등 깔끔하지않은 방법들을 사용하여 (아마 몇날 밤을 보낸후) 이 문제를 해결한다. 그러나 이는 임시방편이고 다시 같은 문제에 부딪치게 된다.
얼마나 이 문제가 해결되길 바랬는가!! 당신은 필요할 때마다 디스크공간을 자유롭게 추가하고 줄일 수 있는 시스템을 바랄 것이다. 당신이 항상 인터넷에 연결된 많은 서버 시스템을 관리한다면 이런 것이 더 절실히 바랄 것이다. 시스템이 몇분만 꺼져있어도 손실이 발생한다. 심지어 고객이 다른 사이트로 옮겨갈 위험도 있다. 또, 이럴때마다 파티션표(partition table) 항목을 수정하고 시스템을 재시작하는 것도 바람직하지 않다. 이런 상황에 LVM이 구세주로 등장한다.

LVM 소개

리눅스 LVM은 삶을 매우 쉽게 만든다. LVM은 파티션과 하드디스크에 비해 저장 공간을 높은 차원에서 보게 한다. 어떻게 사용하는지는 아래서 다룬다. LVM은 2.4.x 대에 정식 커널 소스에 포함되었다. LVM를 사용하기전에 개념과 용어를 살펴보자.
LVM 용어
  • 물리볼륨(Physical Volume)

    물리볼륨 은 일반적으로 하드디스크 파티션이나 RAID 장치와 같이 하드디스크 파티션과 비슷하게 보이는 장치를 지칭한다.
  • 논리볼륨(Logical Volume)

    여러 물리볼륨이 논리볼륨 을 이룬다. LVM에서 논리볼륨은 LVM를 사용하지않는 시스템의 하드디스크 파티션과 유사하다. 논리볼륨은 /home이나 /usr와 같은 파일시스템을 포함할 수 있다.
  • 볼륨그룹(Volume Group)

    이런 논리볼륨이 모여서 볼륨그룹 을 이룬다. LVM에서 볼륨그룹은 LVM을 사용하지않는 시스템의 물리적 하드디스크와 유사하다. 볼륨그룹은 여러 논리볼륨을 모아서 관리상 하나의 단위로 만든다.

어떻게 LVM이 동작하나

이제 LVM의 용어를 알아보았으니, 실제로 어떻게 동작하는지 알아보자. 물리볼륨은 물리적 범위 (PE, Physical Extent) 라는 기본 단위로 나눠진다. 물리적 범위의 크기는 자유롭지만, 같은 볼륨그룹에 속한 물리볼륨끼리는 같다. 한 물리볼륨안에서 PE는 유일한 번호를 가진다. PE는 LVM이 물리적 저장공간을 가리키는 최소 단위이다.
각각의 논리볼륨은 논리적 범위 (LE, Logical Extent) 라는 가리킬 수 있는 기본 단위들로 나눠진다. 같은 볼륨그룹에서 논리적 범위의 크기는 물리적 범위의 크기와 같다. 또, 한 볼륨그룹안에 있는 모든 논리볼륨의 LE 크기도 당연히 같다.
각 PE는 물리볼륨에서 유일한 번호를 가지지만, 논리볼륨에서는 가질 수 없다. 이는 논리볼륨이 여러 물리볼륨으로 구성되므로 PE ID가 겹칠 수 있기 때문이다. 그래서 LE와 LE와 연결된 PE를 구별할 LE ID가 필요하다. 이미 말했듯이 LE와 PE는 1:1대응한다. 저장공간을 접근하여 실제 자료를 물리적 저장공간에 쓸때 LE ID를 사용한다.
아마도 논리볼륨과 볼륨그룹에 대한 모든 메타정보가 저장되는 장소가 궁금할 것이다. LVM을 사용하지 않는 시스템의 비유를 들자면 파티션에 대한 정보는 파티션표에 저장된다. LVM에서 볼륨그룹 지시자영역 (VGDA, Volume Group Descriptor Area) 은 파티션표와 같은 기능을 한다. VGDA는 각 물리볼륨의 처음부분에 저장된다.
VGDA에는 다음과 같은 정보가 있다 :-
  1. PV 지시자(descriptor) 한개
  2. VG 지시자 한개
  3. LV 지시자들
  4. 여러 PE 지시자들.
시스템이 부팅할때 LV와 VG들이 활성화되고 VGDA가 메모리로 읽혀진다. VGDA는 LV가 실제로 어디에 저장되있는지 알려준다. 시스템이 저장장치에 접근할때 실제 입출력을 할 물리적 위치를 알아내기위해 (VGDA의 도움으로) 대응 과정을 거친다.

이제 작업을 해보자

어떻게 LVM을 사용하는지 살펴보자 :-

1 단계 - 커널 설정하기

LVM을 설치하기전에 필요한 사항이 있다:-
커널이 LVM 모듈을 포함하여 컴파일되있어야 한다.
	다음과 같이 커널을 컴파일한다:-
	# cd /usr/src/linux
	# make menuconfig

	하위메뉴에서:-
	Multi-device Support (RAID and LVM) -->

	다음 두 옵션을 킨다:-
	[*] Multiple devices driver support (RAID and LVM)
과
	<*> Logical volume manager (LVM) Support.
	

2 단계 - 디스크에 남은 공간 확인하기

다음 명령어를 사용한다:-
# df -h
Filesystem            	Size  	 Used   Avail  	Use% 	Mounted on
/dev/hda1		3.1G     2.7G	398M	87%	/
/dev/hda2		4.0G	 3.2G	806M	80%	/home
/dev/hda5		2.1G	 1.0G	1.1G	48%	/var

3 단계 - 하드디드크에 LVM 파티션 만들기

fdisk나 다른 파티션 도구를 사용하여 LVM 파티션을 만든다. linux LVM의 파티션 번호는 8e이다.
# fdisk /dev/hda
 입력 	p (파티션표를 출력) 
 입력 	n (새로운 파티션을 만듬)
Linux LVM 파티션을 만든후 파티션표를 출력해보았다. 다음과 같이 보일 것이다:-
 Device Boot      Start       End    Blocks   Id   System
/dev/hda1   *         1       506   4064413+  83  Linux
/dev/hda2           507       523    136552+   5  Extended
/dev/hda5           507       523    136521   82  Linux swap
/dev/hda6 	    524       778   2048256   8e  Linux LVM
/dev/hda7           779      1033   2048256   8e  Linux LVM

4 단계 - 물리볼륨 만들기

# pvcreate /dev/hda6
pvcreate -- -physical volume "/dev/hda6" successfully created

# pvcreate /dev/hda7
pvcreate- -- physical volume "/dev/hda7" successfully created
위 명령어는 또 파티션 처음부분에 볼륨그룹 기술자를 만든다.

5 단계 - 볼륨그룹 만들기

새로운 볼륨그룹을 만들고 다음과 같이 두 물리그룹을 추가한다.
# vgcreate test_lvm /dev/hda6 /dev/hda7
vgcreate- -- INFO: using default physical extent size 4 MB
vgcreate- -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate- -- doing automatic backup of volume group "test_lvm"
vgcreate- -- volume group "test_lvm" successfully created and activated
그러면 물리볼륨 /dev/hda6과 /dev/hda7을 포함하는 test_lvm이란 볼륨그룹이 만들어진다. 물리적 범위 크기 4MB가 목적에 맞지 않다면 이 명령어에 물리적 범위 크기를 지정할 수도 있다.
이제 볼륨그룹을 활성화한다.
# vgchange -ay test_lvm

"vgdisplay" 명령어는 시스템에 만든 볼륨그룹에 관한 정보를 보여준다.
# vgdisplay
--- Volume group ---
VG Name test_lvm
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 1
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 3.91 GB
PE Size 4 MB
Total PE 1000
Alloc PE / Size 256 / 1 GB
Free PE / Size 744 / 2.91 GB
VG UUID T34zIt-HDPs-uo6r-cBDT-UjEq-EEPB-GF435E

6 단계 - 논리볼륨 만들기

lvcreate 명령어는 볼륨그룹에 논리볼륨을 만든다.
# lvcreate -L2G -nlogvol1 test_lvm

7 단계 - 파일시스템 만들기

이제 논리볼륨에 파일시스템을 만들어야 한다. 여기서는 논리볼륨에 reiserfs 저널링 파일시스템을 사용하기로 한다.
# mkreiserfs /dev/test_lvm/logvol1 
mount 명령어로 새로 만든 파일시스템을 마운트한다.
# mount -t reiserfs /dev/test_lvm/logvol1 /mnt/lv1

Step 8 - /etc/fstab와 /etc/lilo.conf에 항목 추가하기

다음 항목을 /etc/fstab에 추가하여 부팅시 파일시스템이 마운트되게 한다.
/dev/test_lvm/logvol1 /mnt/lv1 reiserfs defaults 1 1 
아직 새로 컴파일한 커널로 기존의 커널을 교체하지않았다면 지금 복사한다. 이제 LVM 사용여부를 결정할 수 있다.
  image   = /boot/lvm_kernel_image
  label   = linux-lvm
  root    = /dev/hda1
  initrd  = /boot/init_image
  ramdisk = 8192
위 내용을 추가한후 다음 명령어로 lilo를 재설치한다.
# /sbin/lilo

Step 9 - 논리볼륨 크기 변경하기

lvextent 명령어로 논리볼륨의 크기를 쉽게 늘릴 수 있다.
# lvextend -L+1G /dev/test_lvm/logvol1
lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB
lvextend -- doing automatic backup of volume group "test_lvm"
lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended
비슷하게 아래와 같이 논리볼륨의 크기를 줄일 수 있다.
# lvreduce -L-1G /dev/test_lvm/lv1
lvreduce -- -Warning: reducing active logical volume to 2GB
lvreduce- -- This may destroy your data (filesystem etc.)
lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y
lvreduce- -- doing automatic backup of volume group "test_lvm"
lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced

결론

이제 LVM이 매우 확장가능하며 사용하기 쉬움을 알았다. 볼륨그룹이 만들어지면, 논리볼륨의 크기를 매우 쉽게 필요한만큼 바꿀 수 있다.
원본 : 리눅스-LVM

'★─Programing > ☆─Linux' 카테고리의 다른 글

[Linux] /etc 분석..  (0) 2007.08.06
[Linux] mount 사용법  (0) 2007.08.06
[Linux] Linux 파일 시스템 구조  (0) 2007.08.01
[Linux] cron과 at 사용해보기  (0) 2007.08.01
[Linux] /etc/fstab 각 필드 정보  (0) 2007.08.01
Comments