LVM2(Logical Volume Manager)는 기존의 LVM에서 write기능을 보완한 강력한 file system management 기법이다.
새로운 하드디스크 추가, 파티션 추가/삭제, 파티션 동적 할당과 같은 기존의 경직된 물리적인 디스크 관리 방법에서 보다 유연하게 대처할 수 있는 방법을 제시한다.
이 문서는 gentoo에서 구현했지만 다른 일반적인 배포판에도 패키지 설치를 제외하고는 무리없이 적용 되어질걸로 보인다.
2. 현재상황 및 시스템 상태
kernel : gentoo-2.6.18
커널설정에서 Device Drivers -> Multi-device support (RAID and LVM) 항목이 커널이미지 또는 모듈로 설정되어 있는지 확인한다.
2.6이상의 최신커널은 자동 포함되어 있다.
ddong ~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdb2 966M 74M 843M 9% /
udev 220M 2.7M 218M 2% /dev
/dev/hdb3 950M 17M 886M 2% /home
/dev/hdb5 4.6G 1.7G 2.8G 38% /usr
/dev/hdb6 1.9G 153M 1.6G 9% /var
/dev/hdb7 4.6G 4.4G 200M 92% /vz
shm 220M 0 220M 0% /dev/shm
/vz 의 사용량이 거의 full로 가득찼기때문에 새로운 파티션을 생성한후 lvm2 로 교체한다.
3. 구현
먼저, lvm2 패키지를 설치한다.
fdisk 작업후 재부팅없이 커널에 적용시키기 위해 parted 패키지를 설치한다.
ddong ~ # emerge lvm2
ddong ~ # emerge parted
기존의 /vz 데이터를 백업하기위한 임시 파티션을 생성한다.
lvm2에서 사용할 파티션 역시 생성한다.
ddong ~ # fdisk /dev/hdb
ddong ~ # partprobe
ddong ~ # fdisk -l /dev/hdb
Disk /dev/hdb: 30.0 GB, 30060527616 bytes
255 heads, 63 sectors/track, 3654 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 1 125 1004031 82 Linux swap / Solaris
/dev/hdb2 126 250 1004062+ 83 Linux
/dev/hdb3 251 373 987997+ 83 Linux
/dev/hdb4 374 3654 26354632+ 5 Extended
/dev/hdb5 374 982 4891761 83 Linux
/dev/hdb6 983 1226 1959898+ 83 Linux
/dev/hdb7 1836 1958 987966 83 Linux
/dev/hdb8 1227 1835 4891761 8e Linux LVM
/dev/hdb9 1959 2567 4891761 8e Linux LVM
/dev/hdb10 2568 2696 987966 83 Linux
Partition table entries are not in disk order
/dev/hdb8, /dev/hdb9를 LVM2로 구현한다.
linux lvm의 파티션 타입은 8e 이다.
/dev/hdb10에 백업을 위한 파티션을 생성한다.
ddong ~ # mke2fs -j /dev/hdb10
ddong ~ # mkdir /bak
ddong ~ # tar czfp /bak/vz.tar.gz /vz/*
Linux LVM 구현에 앞서 잠시 용어들을 살펴보면..
physical volume (물리적 볼륨, PV) :
하드디스크를 의미한다. /dev/hdb8, /dev/hdb9 같은.
volume group (볼륨그룹,VG) :
LVM에 사용되는 최상위 추상화 계층이다.
하나의 VG는 여러 PV로 이뤄진다. 즉, PV의 그룹이다.
logical volume (논리적 볼륨, LV) :
LVM이 아닌곳에서의 디스크 파티션과 동일한 개념이다.
LV는 VG에서 새로운 파티션을 생성한다. 이는 하나의 block device처럼 동작한다.
physical extent (물리 확장, PE) :
PV를 구성하는 할당단위.
PE의 갯수는 PV용량에서 PE블록의 크기를 나눈 값이다.
예를들어, PV의 크기가 1G이고 PE 블록의 크기가 4M 이면 PE는 모두 250개이다.
logical extent (논리 확장, LE) :
LV를 구성하는 각각의 조각이고 확장의 크기는 해당 VG의 모든 LV와 같다 ???
먼저, PV를 생성한다.
ddong ~ # pvcreate /dev/hdb8 /dev/hdb9
Physical volume "/dev/hdb8" successfully created
Physical volume "/dev/hdb9" successfully created
ddong ~ # pvdisplay
--- NEW Physical volume ---
PV Name /dev/hdb8
VG Name
PV Size 4.66 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID TedQzG-pPrc-0Cur-2b7l-12DM-vJAx-yE46Yl
--- NEW Physical volume ---
PV Name /dev/hdb9
VG Name
PV Size 4.66 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID aj0WDY-zQP8-0n8y-SlCt-Omxd-xcbO-y9xEJx
VG를 생성한다.
ddong ~ # vgcreate vg01 /dev/hdb8 /dev/hdb9
Volume group "vg01" successfully created
ddong ~ # vgdisplay
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 9.33 GB
PE Size 4.00 MB
Total PE 2388
Alloc PE / Size 0 / 0
Free PE / Size 2388 / 9.33 GB
VG UUID ykFYiT-33IL-4YQS-MFWF-ce11-4SnH-QVv13V
생성한 VG를 활성화 한다.
ddong ~ # vgchange -a y vg01
0 logical volume(s) in volume group "vg01" now active
LV를 생성한다.
ddong ~ # lvcreate -L 9.3G -n vz vg01
/dev/cdrom1: open failed: Read-only file system
Rounding up size to full physical extent 9.30 GB
Logical volume "vz" created
Read-only file system 메시지는 무시해도 좋다.
ddong ~ # lvdisplay
--- Logical volume ---
LV Name /dev/vg01/vz
VG Name vg01
LV UUID dXdX04-zmYg-LCqb-pgyO-icQw-ghkr-0tYzU2
LV Write Access read/write
LV Status available
# open 0
LV Size 9.30 GB
Current LE 2381
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0
여기까지 진행되면 /dev에 장치파일이 자동적으로 생성된다.
만약, 생성되지 않았다면 partprobe를 실행시킨다.
ddong ~ # ls -l /dev/vg01/vz
lrwxrwxrwx 1 root root 19 Sep 4 17:36 /dev/vg01/vz -> /dev/mapper/vg01-vz
ddong ~ # ls -l /dev/mapper/vg01-vz
brw------- 1 root root 253, 0 Sep 4 17:36 /dev/mapper/vg01-vz
lvm 디스크 파티션 설정이 모두 끝났다.
LV에 파일시스템을 생성한다.
ddong ~ # mke2fs -j /dev/vg01/vz
LV를 /vz/ 로 마운트 시키고 백업해 둔 vz.tar.gz 파일 압축을 해제한다.
/etc/fstab 파일도 수정한다.
ddong ~ # mount /dev/vg01/vz /vz
ddong ~ # tar xjfp /bak/vz.tar.bz2 -C /vz
ddong ~ # umount /bak
ddong ~ # fdisk /dev/hdb (/bak 파티션을 제거한다)
ddong ~ # partprobe
ddong ~ # cat /etc/fstab
/vz의 용량을 더 늘려보자.
PV를 생성해서 VG에 추가해주고 LV를 원하는 용량을 + 해주면 된다.
ddong ~ # fdisk /dev/hdb (새로운 PV에 할당할 파티션을 생성, /dev/hdb10)
ddong ~ # partprobe
ddong ~ # pvcreate /dev/hdb10
ddong ~ # vgextend vg01 /dev/hdb10
ddong ~ # lvextend -L+2.8G /dev/vg01/vz
Rounding up size to full physical extent 2.80 GB
Extending logical volume vz to 12.10 GB
Logical volume vz successfully resized
lv용량을 줄이려고 할때는 lvreduce 명령어를 사용한다.
옵션이나 사용방식은 lvextend와 동일하다.
ddong ~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdb2 966M 74M 843M 9% /
udev 220M 2.7M 218M 2% /dev
/dev/hdb3 950M 17M 886M 2% /home
/dev/hdb5 4.6G 1.7G 2.8G 38% /usr
/dev/hdb6 1.9G 153M 1.6G 9% /var
/dev/mapper/vg01-vz 9.2G 1.9G 6.9G 17% /vz
shm 220M 0 220M 0% /dev/shm
LV의 용량을 늘였지만 파티션 사이즈는 그대로이다.
resize2fs로 파티션 크기를 늘여준다.
man resize2fs를 참조한다.
ddong ~ # resize2fs /dev/vg01/vz
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/vg01/vz is mounted on /vz; on-line resizing required
Performing an on-line resize of /dev/vg01/vz to 3172352 (4k) blocks.
The filesystem on /dev/vg01/vz is now 3172352 blocks long.
ddong ~ #
ddong ~ # df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdb2 966M 74M 843M 9% /
udev 220M 2.7M 218M 2% /dev
/dev/hdb3 950M 17M 886M 2% /home
/dev/hdb5 4.6G 1.7G 2.8G 38% /usr
/dev/hdb6 1.9G 153M 1.6G 9% /var
/dev/mapper/vg01-vz 12G 1.9G 9.5G 17% /vz
shm 220M 0 220M 0% /dev/shm
완성된 LVM 형태.
ddong ~ # vgdisplay -v
Finding all volume groups
Finding volume group "vg01"
--- Volume group ---
VG Name vg01
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 12.13 GB
PE Size 4.00 MB
Total PE 3105
Alloc PE / Size 3098 / 12.10 GB
Free PE / Size 7 / 28.00 MB
VG UUID ykFYiT-33IL-4YQS-MFWF-ce11-4SnH-QVv13V
--- Logical volume ---
LV Name /dev/vg01/vz
VG Name vg01
LV UUID dXdX04-zmYg-LCqb-pgyO-icQw-ghkr-0tYzU2
LV Write Access read/write
LV Status available
# open 1
LV Size 12.10 GB
Current LE 3098
Segments 3
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Physical volumes ---
PV Name /dev/hdb8
PV UUID TedQzG-pPrc-0Cur-2b7l-12DM-vJAx-yE46Yl
PV Status allocatable
Total PE / Free PE 1194 / 0
PV Name /dev/hdb9
PV UUID aj0WDY-zQP8-0n8y-SlCt-Omxd-xcbO-y9xEJx
PV Status allocatable
Total PE / Free PE 1194 / 0
PV Name /dev/hdb10
PV UUID e5BOdL-OYmV-ydVv-ice0-pbAH-58Eg-rTcgmm
PV Status allocatable
Total PE / Free PE 717 / 7
ddong ~ # lvscan
ACTIVE '/dev/vg01/vz' [12.10 GB] inherit
ddong ~ # pvscan
PV /dev/hdb8 VG vg01 lvm2 [4.66 GB / 0 free]
PV /dev/hdb9 VG vg01 lvm2 [4.66 GB / 0 free]
PV /dev/hdb10 VG vg01 lvm2 [2.80 GB / 28.00 MB free]
Total: 3 [12.13 GB] / in use: 3 [12.13 GB] / in no VG: 0 [0 ]
ddong ~ # vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg01" using metadata type lvm2
4. 참조 url
http://tldp.org/HOWTO/LVM-HOWTO/
http://wiki.kldp.org/wiki.php/DocbookSgml/LVM-HOWTO
http://kldp.org/node/20674

댓글을 달아 주세요