IT/Linux

GCP 콘솔에서 Disk 크기를 확장 한 뒤, LVM을 사용하여 리눅스 볼륨 확장 할당하기.

고슴도치 엔지니어 2022. 10. 4. 18:00

업무 중 Nexus 서버의 디스크 용량을 확장 해야 할 일이 생겼습니다.

 

당연한 이야기지만 클라우드 환경에서 디스크 용량을 수정한다고 VM의 OS에 그게 바로 반영 되지는 않습니다.

 

따라서 웹콘솔이던 IaC 환경이던 클라우드 상의 디스크 용량을 수정 한 뒤

 

VM에 접속해서 LVM을 통해 디스크 용량을 확장 해 줘야 합니다.

 

여기서는 GCP와 리눅스(우분투20.04) 환경 기준으로 설명 하겠습니다.

 

 

GCP 디스크 관리에서 수정 버튼을 사용하여 원하는 디스크의 용량을 수정 합니다.

 

해당하는 VM에 접속해서 아래 명령어들로 작업을 진행 합니다.(sudo 권한이 있는 계정으로 진행해야 합니다.)

 

$ sudo fdisk -l   # 정상적으로 확장된 용량이 인식되고 있는지 확인

~~~~~~~
Disk /dev/sdb: 300 GiB, 322122547200 bytes, 629145600 sectors
Disk model: PersistentDisk  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: PersistentDisk  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 3BBD2D1D-8757-4A79-A99C-AE201FAD30DB

Device      Start      End  Sectors  Size Type
/dev/sda1  227328 20971486 20744159  9.9G Linux filesystem
/dev/sda14   2048    10239     8192    4M BIOS boot
/dev/sda15  10240   227327   217088  106M EFI System

Partition table entries are not in disk order.

Disk /dev/mapper/nexus-install: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/mapper/nexus-datalog: 89.102 GiB, 96632569856 bytes, 188735488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
~~~~~~~

 

 

$ sudo pvscan   # 현재 pv 상태 확인

 


$ sudo pvresize /dev/sdb  # /dev/sdb PV를 resize 

 

 

$ sudo pv scan   # resize 후 pv 상태 확인

PV /dev/sdb   VG nexus           lvm2 [<300.00 GiB / 0    free]
Total: 1 [<300.00 GiB] / in use: 1 [<300.00 GiB] / in no VG: 0 [0   ]


$ sudo vgextend nexus /dev/sdb  # vg 용량 확장

 

$ sudo vgdisplay   # vg 상태 확인

 


$ sudo lvextend -l +100%FREE /dev/nexus/datalog   # lv에 확장한 용량을 100% 할당한다.

 

$ sudo lvdisplay   # lv 상태 확인, datalog 디렉토리가 290GB로 확장 된 것 확인(원래 90GB 였음)

  --- Logical volume ---
  LV Path                /dev/nexus/install
  LV Name                install
  VG Name                nexus
  LV UUID                EPz1cE-WWhr-gv5H-ssPT-V2df-SzPM-H6e4Ch
  LV Write Access        read/write
  LV Creation host, time bg-cmn-dev-nex, 2022-07-13 13:59:37 +0900
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/nexus/datalog
  LV Name                datalog
  VG Name                nexus
  LV UUID                AhCuNz-Z26o-X4B5-YuQt-8oK5-P1qu-nJUXot
  LV Write Access        read/write
  LV Creation host, time bg-cmn-dev-nex, 2022-07-13 14:00:06 +0900
  LV Status              available
  # open                 1
  LV Size                <290.00 GiB
  Current LE             74239
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

 

 

$ df -h   # df 명령어로 제대로 OS Filesystem이 확장된 용량을 인식하고 있는지 확인

/dev/root                  9.6G  3.8G  5.8G  40% /
devtmpfs                   2.0G     0  2.0G   0% /dev
tmpfs                      2.0G     0  2.0G   0% /dev/shm
tmpfs                      393M  996K  392M   1% /run
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                      2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/loop3                  68M   68M     0 100% /snap/lxd/22753
/dev/sda15                 105M  5.2M  100M   5% /boot/efi
tmpfs                      393M     0  393M   0% /run/user/1001
/dev/mapper/nexus-install   10G  700M  9.4G   7% /nexus
/dev/mapper/nexus-datalog   90G   79G   12G  88% /datalog
/dev/loop10                 62M   62M     0 100% /snap/core20/1611
/dev/loop9                  56M   56M     0 100% /snap/core18/2560
/dev/loop6                  64M   64M     0 100% /snap/core20/1623
/dev/loop2                  48M   48M     0 100% /snap/snapd/16778
/dev/loop11                 56M   56M     0 100% /snap/core18/2566
/dev/loop0                 299M  299M     0 100% /snap/google-cloud-cli/72
/dev/loop8                  48M   48M     0 100% /snap/snapd/17029
/dev/loop5                 300M  300M     0 100% /snap/google-cloud-cli/74

 

df 명렁어로 확인 해 보았을때 /dev/mapper/nexus-datalog의 용량의 90GB로 확장된 용량이 아니라 기존 용량만 인식하고 있다. 따라서 아래 명령어를 추가로 실행 해 준다

 

$ sudo xfs_growfs /dev/nexus/datalog

meta-data=/dev/mapper/nexus-datalog isize=512    agcount=4, agsize=5897984 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=23591936, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=11519, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 23591936 to 76020736

 

 

!! 만약 파일시스템 타입이 xfs가 아니라 ext4 등의 다른 타입이라면

아래 명령어를 사용 한다!!

$ sudo resize2fs /dev/nexus/datalog

 

 

$ df -h

Filesystem                 Size  Used Avail Use% Mounted on
/dev/root                  9.6G  3.7G  5.9G  39% /
devtmpfs                   2.0G     0  2.0G   0% /dev
tmpfs                      2.0G     0  2.0G   0% /dev/shm
tmpfs                      393M  968K  392M   1% /run
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                      2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/loop0                  56M   56M     0 100% /snap/core18/2560
/dev/loop2                  62M   62M     0 100% /snap/core20/1611
/dev/loop1                  56M   56M     0 100% /snap/core18/2566
/dev/loop3                  68M   68M     0 100% /snap/lxd/22753
/dev/loop4                  64M   64M     0 100% /snap/core20/1623
/dev/loop5                 300M  300M     0 100% /snap/google-cloud-cli/74
/dev/loop6                 299M  299M     0 100% /snap/google-cloud-cli/72
/dev/loop7                  48M   48M     0 100% /snap/snapd/16778
/dev/loop8                  48M   48M     0 100% /snap/snapd/17029
/dev/sda15                 105M  5.2M  100M   5% /boot/efi
/dev/mapper/nexus-datalog  290G   80G  210G  28% /datalog
/dev/mapper/nexus-install   10G  700M  9.4G   7% /nexus
tmpfs                      393M     0  393M   0% /run/user/1001
tmpfs                      393M     0  393M   0% /run/user/1005

 

/dev/mapper/nexus-datalog 용량이 290GB로 정상적으로 인식 되는 것을 확인.