'LVM'에 해당되는 글 1건

  1. 2007/09/04 LVM2 구현

LVM2 구현

컴퓨터/System 2007/09/04 19:02
1. 개요
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