얼마전 업무에 필요하여 KT Ucloud에 서버를 하나 받았어요. (자사 서비스를 애용합시다!?)


단위 볼륨이 1TB 단위로 나온다는데 저는 3TB 볼륨이 필요했어요.

그래서 1TB 볼륨이 3개가 되었어요.

대충 /data, /data2, /data3 로 mount 되어있었고 이는 각각 /dev/xvdb1, /dev/xvdc1, /dev/xvdf1 로 만들어졌더라구요.


저는 지금부터 이것들을 LVM을 이용해서 하나의 볼륨으로 묶을거예요.


LVM이 뭐냐면..뭐 대충 아니까 검색해서 들어왔을거예요.



네 뭐 대충 이런걸 만드는 것입니다.





다수의 볼륨을 하나의 볼륨으로 묶는 LVM 방식에는 Linear 방식과 Striped 방식이 있어요.


또 보통 잘 모르시지만 mirrored 타입도 존재하지요. 그 외에도 다양한 RAID 타입을 지원하는데 사실 구성이 복잡해 질 듯 하면 RAID 컨트롤러에게 의존하는 걸 추천드립니다. 꼭 필요한 것 아니면 LVM이건 SoftRAID건 굳이 추천하고 싶지 않아요. 관리 포인트만 많아집니다. 컨트롤러에 돈 들이시고 RAID Cache를 빵빵하게 박아 고성능의 I/O 작업을 즐기세요. LVM이나 SoftRAID는 생각보다 성능이 고성능은 아닙니다. (물론 튜닝하면 좀 다르지만, 그래봐야 메모리 기반인데 DRAM 메모리와 캐시용 메모리는



어떤 표현 솜씨가 좋은 이가 이런 그림으로 설명해 주었더라구요.


네 그렇다구요.



사실 이번 케이스는 성능이 그다지 필요가 없어서 linear 방식으로 진행해도 무방하지만, 그래도 빠르면 왠지 모르게 더 좋잖아요? 그래서 Striped 방식으로 진행할까 해요.


이번 작업은 CentOS 7 시스템에서 진행하지만 사실 LVM command는 거의 달라진 바가 없기 때문에 예전 버전들에서도 충분히 이용할 수 있습니다.



일단 모든 mount를 해제하고 기존 mount point 들을 모두 날렸습니다.


이제 저에게 할당된 /dev/xvdb1, /dev/xvdc1, /dev/xvdf1 을 정리하고자 합니다. Xen Virdual Disk 의 약자인 xvd 로 시작하니 서버가 Xen 기반인가보다 하고 예상할 수 있습니다.



1. 파티션 변경


이건 생략할께요. 만일 필요하다면 fdisk 에서 t 명령을 이용해 선택한 파티션 볼륨의 타입을 변경할 수 있어요. 우리는 주로 "83" Linux 볼륨을 사용하죠. LVM의 경우 "8e" Linux LVM 을 이용해요. 그러나 83 타입을 이용해도 동일하게 사용 가능합니다. 혹시 아예 다른 타입으로 되어있다면 83이나 8e 타입으로 변경해주어도 좋습니다.


 - 사실 파일시스템의 파티션 타입(system id)을 변경하는 것은 MBR을 위한 플래그 정도의 의미를 가집니다. 물론 심각한 경우 충돌이 발생할 수도 있다지만 주로 사용되는 시스템 범주 내에서는 큰 이슈가 발생하지 않는 듯 합니다. 뭐 7번 타입인 HTFS/NTFS/exFAT 에 ext4를 올려도 잘 올라가는걸 보면..(그러나 무결성 보장은 안됩니다.)



2. LVM 패키지 설치


아니 얘들이 너무 OS를 살짝 깔았어요. LVM 툴이 전혀 없더라구요.


# yum install lvm2 




3. Physical Volume 생성하기


physical volume을 만들거예요. 간단하게.


# pvcreate /dev/xvdb1 /dev/xvdc1 /dev/xvdf1


저는 기존에 ext4 볼륨에 존재해서 wipe 할거냐고 물어봐서 전부 Y를 눌렀어요.


그랬더니 다들 succefully created 라고 뜨면서 성공!!



현재 Physical Volume 상태를 확인하려면


CMD 

 용도

 # pvs

 Physical Volume의 정보를 보여줍니다 

 # pvscan

 Pyiscal Volume의 목록을 보여줍니다. (음?)

 # pvdisplay

Phyiscal Volume의 다양한 속성들을 보여줍니다. (오!!!)



셋 중 마음에 드는 명령어를 사용하면 됩니다. 전 셋 다 봅니다. pvs보다 pvscan이 좀 더 뭐가 나오고, pvdisplay는 진짜 뭐가 많이 나와요.




4. Volume Group 생성하기



vgcreate 명령어를 사용합니다. 형식은 다음과 같습니다.


vgcreate <VG Name> <Physical Voume 1> <Physical Voume 2> <Physical Voume 3> ...


최소한 하나의 Physical Volume 을 추가해야 합니다.


저는 아래와 같이 했습니다.


# vgcreate data_vg /dev/xvdb1 /dev/xvdc1 /dev/xvdf1 


그럼 또 잘 만들어졌다며 "successfully created" 라며 칭찬해 줍니다.


현재 Volume Group 상태를 확인하려면?


네. vgs 나 vgscan 명령어를 사용하세요. vgdisplay 명령어도 있지요.



참고로 볼륨 그룹에 포함된 pv 들을 확인할 땐 pvscan이나 pvdisplay 명령어로 Physical Volume 들이 어느 볼륨 그룹에 할당되어 있는지 확인할 수 있습니다.


vgs 나 vgscan에서 물리볼륨 구성 정보가 안보여서 당황하시면 안돼요. 그럴 땐?


# vgdisplay -v 


vgdisplay 에 -v 옵션으로 verbose 를 넣어 보시면 볼륨 그룹에 할당된 물리 볼륨 정보를 함께 보실 수 있습니다.




5. logical volume 생성하기


다 왔어요. linear 방식으로 한다고 하면 명령어가 간단한데 striped 방식을 쓰려하니 뭔가를 더욱 복잡하게 추가해야 해요. 그럼 문서가 길어지는데 괜히 striped 로 한다고 그랬나봐요. 매우 귀찮습니다.


여기에서 주의 사항이 있어요. 서로 불륨 사이즈가 다른 디스크를 합칠 때는 striped 를 사용하지 마시고 linear 구성으로 이용하세요. 서로 다른 사이즈의 물리 볼륨을 이용해서 striped 구성을 이용하면 <제일 작은 볼륨 크기> * <디스크 갯수> 의 용량으로 디스크가 구성됩니다.


저는 1TB 볼륨 3개 똑같이 있으니까 striped 구성을 하겠다고 주장한 것이예요.


저는 다음의 Command를 이용해서 생성했어요.


# lvcreate -L 2.92T -i3 -I64 -n data_lv data_vg



옵션을 설명하면 다음과 같습니다. -i, -I 옵션 등은 뒤의 "값" 과 붙여서 주세요.


-L 2.92T : 논리 볼륨 크기


-i3 : 스트라이프 수 <- 물리불륨 갯수보다 크면 안됩니다.


-I64 : 스트라이프 크기 - 보통 4K~256K 사이에서 적당하게 정해줍니다. 자기가 해당 볼륨에서 어떤 파일들을 다룰지에 따라 다르겠죠. 용량이 큰 파일을 다룬다면 스트라이프 크기가 큰 것이 유리할 것이고, 자잘한 파일들이나 단순한 문서 파일 저장등을 하려고 만들고 있다면 작은게 유리하죠. 개인적으로는 32~64k 정도 범주면 무난한 듯 합니다.


-n data_lv : data_lv 라는 이름의 논리 볼륨을 만듭니다.


data_vg : 맨 뒤에 볼륨그룹을 적는데 해당 볼륨그룹 내에 논리 볼륨을 생성합니다.



현재 Logical Volume 상태를 확인하려면?


역시 lvs, lvscan, lvdisplay 등을 이용합니다.


lvdisplay 명령어는 lvdisplay, lvdisplay -m 정도의 명령어를 사용합니다. (-m 옵션은 logical volume이 physical volume에 어떻게 mapping 되어있는지 상세 정보를 제공합니다.)



* 그 외에 lvcreate의 다양한 사용방법은 lvcreate 명령어의 man page를 참조하세요. 하단의 Example 항목에 다양한 lvcreate 명령어의 예시를 담고 있어 도움이 됩니다. (Read The *ucking Man page!!!)



5. 파일 시스템 생성


볼륨을 만들었으면 당연히 포맷을 해서 파일시스템을 만들어야죠.


# mkfs.ext4 /dev/data_vg/data_lv



6. mount


/etc/fstab에 정보를 기입합니다.


# vim /etc/fstab


# 저는 아래의 내용을 추가했습니다.


/dev/data_vg/data_lv /data ext4 rw 0 2



그리고 타겟 디렉토리를 만들고


# mkdir /data


마운트 합니다.


# mount /data



Success!!

+ Recent posts