Linux

LVM 용량 확장 (온라인중)

minjunc 2019. 12. 30. 16:20

아래 내용은 LV 확장을 테스트 한 내용으로
ext2 파일시스템을 사용중인경우,
온라인중 증설이 불가합니다
ext3,ext4,xfs 는 온라인중에 용량의 증설이 가능
(서비스중에 그냥 작업이 가능함)

 
실제 작업시 e2fsck 는 해본적이없습니다
여러번 작업해보았으나 e2fsck 불필요했음

 

주의사항은
용량을 증설하는것은 가능하지만
줄이는것은 데이타의 손실이 발생할 확률이 굉장히 높기때문에 특히나 운영중이던 시스템에는 권장하지않는다
용량을 줄이기를 원한다면 서비스를 내리고
해당 파티션에 존재하는 필요 데이터를 모두 백업받은 후
새롭게 파일시스템을 생성해야 안전하다(첨부터 새로 만들어야 안전)

 

확장 방법은 아래와 같습니다
1. 파티셔닝을 한다.
2. pv생성을 한다.
3. vg확장을 한다.
4. lv확장을 한다.
5. 파일시스템에 따라 파티션에 적용을 시킨다.

 

(조금자세히)

1. 파티셔닝을 하는것은 fdisk 나 parted 등
편한것으로 파티셔닝을 해주면 되는데
2. 생성한 파티션을 pvcreate 하고
3. 생성한 pv를 그대로 vg에 추가시킨다음
4. vgs 를 보면 free가 추가되어있는것이 확인된다.
5. 용량을 증설할 lv에 lvextend를 하면
lvs 에는 용량이 증가한것이 확인이 되지만
df에는 변함이 없다
6. 파일시스템이 ext3/ext4 면
resize2fs /dev/mapper/VG-LVNAME
하면 df에도 용량이 증설된것을 확인 할 수 있고
추가로 필요한 작업은 없다.
파일시스템이 xfs 면 resize2fs 가 안되고
xfs_growfs /dev/mapper/VG-LVNAME
하면 된다.
마찬가지로 추가작업은 필요없다.

※ resize2fs, xfs_growfs 명령어를 수행했을 때
프롬프트가 안떨어지고 한참 있는 경우가 있으나
겁먹지 말고 느긋하게 기다려주시면 됩니다
경험상 15분정도 기다려본적이 있는데 아무문제없이
잘 된적이 있음(증설하는 용량이 클수록 오래걸릴 수 있습니다)

[방법(테스트로그 포함)]

fdisk로 파티셔닝후에 진행한다

pvcreate /dev/sdb1
(pvdisplay나 pvs로 확인할 수 있다.)
vgcreate VG01 /dev/sdb1 /dev/sdc1 /dev/sdd1 .........(이하 그룹에 포함시킬 물리볼륨을 추가로 써준다.)

lvcreate -l 100%FREE VG01 -n LV_Name /dev/sdb1 /dev/sdc1 /dev/sdd1 ...
lvcreate -L 100G VG01 -n LV_Name
-l 옵션은 백분율과 함께 어디에서 할당해주는건지 플래그를 붙여준다.(FREE/PVS/VG/LV/ORIGIN)
-L 옵션은 실제 사용하는 용량을 적어준다.
-n 옵션으로 논리볼륨에 이름을 수동으로 설정 한다.
(lvdisplay나 lvs로 확인 할 수 있다.)


예시> 50GB 디스크 2개(sdb,sdc)를 LVM으로 묶어 /data에 마운트 시킨다.

파티션은 일반 LINUX 타입으로 생성했다. 50G 두개 디스크로 100G의 파티션을 사용하는 중에 50G 디스크 한개를 추가 시켰다가 다시 하나를 제거하고 있다.

[root@localhost /]# pvcreate /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
[root@localhost /]# pvcreate /dev/sdc1
  Labels on physical volume "/dev/sdc1" successfully wiped
[root@localhost /]# pvs
  PV              VG       Fmt        Attr        PSize           PFree
/dev/sdb1               lvm2     ---     50.00g     50.00g
/dev/sdc1               lvm2     ---     50.00g     50.00g
[root@localhost /]# vgcreate VG01 /dev/sdb1 /dev/sdc1
 Volume group "VG01" successfully created
[root@localhost /]# vgs
  VG          #PV          #LV          #SN          Attr          VSize          VFree
  VG01         2                0              0            wz--n-     99.9g          99.9g
[root@localhost /]# lvcreate -l 100%FREE -n LV_Name
  Logical volume "LV_Name" created
[root@localhost /]# lvs
   LV              VG          Attr               LSize          Pool          Origin          Data%          Meta%          Move          Log     Cpy%Sync          Convert
LV_Name   VG01      -wi-a-----      99.9g
[root@localhost /]# pvcreate /dev/sdd1
  Labels on physical volume "/dev/sdd1" successfully wiped
[root@localhost /]# pvs
  PV              VG       Fmt        Attr        PSize           PFree
/dev/sdb1   VG01  lvm2         ---        50.00g                   0
/dev/sdc1   VG01   lvm2         ---        50.00g                   0
/dev/sdd1               lvm2         ---        50.00g        50.00g
[root@localhost /]# vgextend VG01 /dev/sdd1
 Volume group "VG01" successfully extended
[root@localhost /]# vgs
  VG          #PV          #LV          #SN          Attr          VSize          VFree
  VG01         3                1              0            wz--n-     149.99g          50.00g
[root@localhost /]# lvextend /dev/VG01/LV_Name -l 100%VG /dev/sdd1
 Size of Logical volume VG01/LV_Name changed from 99.99 GiB (25598 extents) to 149.99 GiB (38397 extents).
 Logical volume data successfully resized
[root@localhost /]# lvs
   LV              VG          Attr               LSize          Pool          Origin          Data%          Meta%          Move          Log     Cpy%Sync          Convert
LV_Name   VG01      -wi-a-----      149.99g
[root@localhost /]# e2fsck -f /dev/VG01/LV_Name
[root@localhost /]# resize2fs /dev/VG01/LV_Name
-------------------------------------------------------------
lvextend
:
ext2 일때만 umount/mount 수행하고
ext3, ext4 일때는 umount/mount 안해도 됨
100GB -> 110GB
# umount
# lvextend -L +10G /dev/VG01/LV_Name
# e2fsck -f /dev/VG01/LV_Name
# resize2fs /dev/VG01/LV_Name 110G
# resize2fs /dev/VG01/LV_Name
# mount
-------------------------------------------------------------