linux LVM

이제 정상적으로 생성된 LVM을 관리하는 방법에 대해서 알아보도록 하자.
앞에서 설명했지만 LVM은 효과적인 디스크 관리를 위한 시스템이다.
어떻게 볼륨들을 관리하는지에 대해서 알아보도록 하자.

볼륨 사이즈 조정하기

VG 용량 조절하기

처음에 나왔던 그림을 잘 이해했다면 VG위에 LV를 만든다는것을 알것이다.
만약에 3G짜리 볼륨그룹(VG)이 있다고 가정하자. 거기에 3G 짜리 LV를 만들어서 사용중이라면
LV을 더 늘리는 것은 불가능하다. 따라서 이때는 VG를 먼저 늘리고 그다음에 LV를 늘려줘야 한다.
VG를 늘리는것은 PV만 추가해 주면 된다. 즉 물리적인 파티션이나 디스크를 VG에 포함시켜주면 된다.
먼저 현재 VG상태를 보도록 하자.

[root@linuxstudy ~]# vgdisplay 
  --- Volume group ---
  VG Name               VG0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.81 GB
  PE Size               4.00 MB
  Total PE              719
  Alloc PE / Size       384 / 1.50 GB
  Free  PE / Size       335 / 1.31 GB
  VG UUID               Xyye0d-VZGJ-gFfX-KLhU-LSe4-KK6r-2HkGP1
   
[root@linuxstudy ~]# 

총 2.81GB 의 VG에 남은 용량은 1.31GB 이다.
용량을 늘리기 위해서는 PV가 있어야 한다.
새로운 하드 디스크를 추가했다고 가정해 보겠다.(/dev/sdc)
먼저 PV를 생성해 준다. 이번에는 파티션 작업을 하지 않고 바로 디스크를 통째로 PV로 만들어 본다.

pvcreate  /dev/sdc

정상적으로 생성이 되었다면 만들어둔 VG를 확장해 보겠다.

vgextend VG0 /dev/sdc

VG가 정상적으로 늘어났는지 vgdisplay 명령으로 살펴보도록 하자.

[root@linuxstudy ~]# vgdisplay 
  --- Volume group ---
  VG Name               VG0
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  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               10.80 GB
  PE Size               4.00 MB
  Total PE              2766
  Alloc PE / Size       384 / 1.50 GB
  Free  PE / Size       2382 / 9.30 GB
  VG UUID               Xyye0d-VZGJ-gFfX-KLhU-LSe4-KK6r-2HkGP1
   
[root@linuxstudy ~]# 

남아있는 용량이 9.3GB로 늘어났다..^^;

반대로 VG용량을 줄이고자 한다면 vgreduce 명령을 이용하면 된다.

vgreduce VG명 PV장치명

 

LV용량 조절하기

LV를 늘리거나 줄이고자 한다면 lvextend ,lvreduce 명령을 이용하면 된다.
예제) /dev/VG0/lvm_home 의 용량을 1G를 추가하는 과정이다.

[root@linuxstudy ~]# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/VG0/lvm_home
  VG Name                VG0
  LV UUID                VOfpxj-oF6N-bSZ8-TW7c-15GZ-1tSX-DAa8bd
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.50 GB
  Current LE             384
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
[root@linuxstudy ~]# lvextend -L +1g /dev/VG0/lvm_home 
  Extending logical volume lvm_home to 2.50 GB
  Logical volume lvm_home successfully resized
[root@linuxstudy ~]# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/VG0/lvm_home
  VG Name                VG0
  LV UUID                VOfpxj-oF6N-bSZ8-TW7c-15GZ-1tSX-DAa8bd
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                2.50 GB
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

 

1.5Gdptj 2.5G로 용량이 늘어났다.
주의
LV의 용량을 늘였다고 바로 사용이 가능한것은 아니다.
이미 마운트 시켜둔 /home 에 대해서 한번 살펴보도록 하자.
/dev/VG0/lvm_home 은 /home에 마운트가 되어 있었다.
아래를 보도록 하자.

[root@linuxstudy ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             6.7G  976M  5.4G  16% /
tmpfs                 125M     0  125M   0% /dev/shm
/dev/mapper/VG0-lvm_home
                      1.5G  2.3M  1.4G   1% /home
[root@linuxstudy ~]# 

LV를 늘렸음에도 불구하고 아직도 1.5G 이다.
파일시스템 레벨에서의 resize가 이루어지지 않았기 때문이다.
아래와 같이 resize를 해주도록 하자.

[root@linuxstudy ~]# umount /dev/VG0/lvm_home 
[root@linuxstudy ~]# resize2fs /dev/VG0/lvm_home 
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/VG0/lvm_home to 655360 (4k) blocks.
The filesystem on /dev/VG0/lvm_home is now 655360 blocks long.

[root@linuxstudy ~]# mount /dev/VG0/lvm_home /home
[root@linuxstudy ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             6.7G  976M  5.4G  16% /
tmpfs                 125M     0  125M   0% /dev/shm
/dev/mapper/VG0-lvm_home
                      2.5G  2.3M  2.4G   1% /home
[root@linuxstudy ~]# 

주의

ext2 파일시스템인 경우에는 online resize가 안된다.
따라서 resize 하기 전에 반드시 umount 시켜줘야 한다.
커널2.6대의 ext3 파일시스템은 online 확장이 가능하다. 즉 mount 가 되어 있더라도 바로 사이즈를 조절할 수 있다.
ext2,ext3가 아닌 경우에는 각각의 파일시스템의 특성이 있으니 확인하고 작업을 하도록 하자.

 

LV용량을 줄이기 위해서 lvreduce 명령을 사용하도록 하자.
예제) 만들어진 LV 에서 1G를 줄인다.

lvreduce -L -1G /dev/VG0/lvm_home 

 

스냅샷

LVM의 재미난 기능중에 하나인 snapshot 을 사용해 보도록 하자.
snapshot이란 디스크 상태를 고정시켜 주는 기능이다. 어렵게 들릴지 모르겠지만 예를 들어보도록 하겠다.
리눅스 시스템은 다중 사용자 시스템이다. 그래서 항상 시스템은 변경 사항이 많다.
관리자는 중요 데이터에 대해서 백업 작업을 한다. 그런데 백업하는 시점에서 변경사항이 발생한다면?
그 백업은 완벽한 백업이 될 수가 없을 것이다. 원하는 데이터가 포함이 안되어 있을 수도 있으니깐..^^;
이런 경우에 유용하게 사용할수 있는것이 바로 LVM의 snapshot 기능이다.
스냅샷을 만드는 과정을 살펴보도록 하자. 생성하는 과정은 LV생성과정과 거의 비슷하다.

lvcreate -L 3.5G -s -n homesnap /dev/VG0/lvm_home

이미 만들어진 LV /dev/VG0/lvm_home 에 대한 스냅샷을 만드는 과정이다.
스냅샷 볼륨의 사이즈는 보통 타겟 LV 사이즈와 동일하게 해주는것이 좋다.
물론 실제로는 많은 사이즈가 필요한 것은 아니다
제대로 만들어 졌는지 lvdisplay 명령으로 확인해 보도록 하자.

[root@linuxstudy home]# lvdisplay 
  --- Logical volume ---
  LV Name                /dev/VG0/lvm_home
  VG Name                VG0
  LV UUID                VOfpxj-oF6N-bSZ8-TW7c-15GZ-1tSX-DAa8bd
  LV Write Access        read/write
  LV snapshot status     source of
                         /dev/VG0/homesnap [active]
  LV Status              available
  # open                 1
  LV Size                3.50 GB
  Current LE             896
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Name                /dev/VG0/homesnap
  VG Name                VG0
  LV UUID                I9rdO2-axrE-9ymP-8LvK-7Y9h-j73m-Xz6UWU
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/VG0/lvm_home
  LV Status              available
  # open                 0
  LV Size                3.50 GB
  Current LE             896
  COW-table size         3.50 GB
  COW-table LE           896
  Allocated to snapshot  0.00% 
  Snapshot chunk size    4.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
   
[root@linuxstudy home]# 

만들어진 snapshot 을 마운트 해보자.

mount /dev/VG0/homesnap /mnt

/home 과 동일한 내용이 있는지 확인해 보자.
snapshot은 명령을 내린 시점의 /home 을 정확하게 기록을 하고 있고 변경되지 않는다.
따라서 완벽한 백업을 원한다면 snapshot을 만들어서 마운트한 /mnt 을 백업을 해주면 된다.

마치며

LVM은 여러분의 디스크 관리를 쉽게 도와준다. 더이상 Disk Full 에러 메시지를 만나지 않도록 하자..^^;

Leave a Comment