System Engineering/OS

Linux #6. 리눅스 파일시스템 용량 증설(LVM, 파티션)

ZunoXI 2021. 10. 31.

개요

리눅스 파일 시스템의 용량 증설하기

리눅스 용량 증설

평소 서버 관리를 하다 보면 불가피하게 운영 중인 서버의 용량을 증설해야 할 일이 많이 생긴다. 특히 필자의 환경은 대부분 가상 서버로 운영되는 데이터센터의 환경인데 서버 관리자로서 매번 구글링 하면서 주먹구구식으로 작업하기 번거로워서 이번 기회에 포스팅을 작성하여 해당 방법에 대한 방법을 명시하려 한다. 본 포스팅은 VMware 환경(vSphere 7.0 - ESXi7.0 ver)에서의 리눅스 OS 파일 시스템을 fdisk방법을 이용하여 용량 증설하는 것을 기반으로 한다.

 

 

1. 기존 하드디스크에서의 증설(VM)

 

본 방법은 VM 서버에서의 기존 사용하던 하드디스크 용량 증설 방법이다. 물리적 서버의 경우라면... 파일 시스템 측면에서 하드디스크를 추가하고 이를 스캔하여 논리적 볼륨의 용량을 늘려주는 방법이 있겠지만, 기존에 사용하던 하드디스크 자체를 용량이 더 큰 하드디스크로 교체할 때는 레이드 구성 종류나 데이터 손실 발생 여부 등 점검해야 할 부분이 발생한다. 당연히 백업이 필요한 경우인 것 같은데 분명 이경우에도 더 효율적으로 하는 방법이 있을 것 같지만, 필자는 해당 방법을 모르기 때문에 물리적 서버는 스킵하고 VM의 경우에 대해 설명하려 한다. 

 

하드디스크 현황 확인

 

먼저 fdisk -l로 현재 추가되어있는 하드디스크들을 확인한다.

 

# fdisk -l

 

현재 예시로 사용할 서버는 300GB의 하드디스크가 한 개 존재하며 swap메모리와 root 용량으로만 사용 중인 상태이다.

 

# fdisk /dev/sda
			 
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/sda: 336.9 GB, 536870912000 bytes, 1048576000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: dos
Disk identifier: 0x000b5b4d

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   629145599   313523200   8e  Linux LVM
			 

Command (m for help): q

 

 

기존 부여되어있던 하드디스크 증설

 

 

먼저 서버를 끄고 위와 같은 해당 VM 설정창으로 들어간다.(사진은 vCenter 7.0 기준의 VM설정창) VM을 사용하는 환경이라면 위와 비슷한 설정 화면일 텐데 해당 '하드디스크 1'의 300GB를 변경해줄 500GB로 변경하고 저장 후 서버를 다시 부팅한다.

 

 

증가한 하드디스크 용량 확인 및 신규 파일 시스템 생성

 

 

우선 fdiks -l을 입력하면 하드디스크는 500GB로 증설된 것이 확인될 텐데 이번 경우는 root파일 시스템 말고 추가적으로 파일 시스템을 별도로 만들어볼 예정이다. 그 절차는 아래와 같다.

 

# fdisk /dev/sda
 
The device presents a logical sector size that is smaller than
the physical sector size. Aligning to a physical sector (or optimal
I/O) size boundary is recommended, or performance may be impacted.
Welcome to fdisk (util-linux 2.23.2).
 
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
 
Command (m for help): n   ## 파티션 신규 생성
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): p
Partition number (3,4, default 3): 3    ## 파티션넘버 지정
First sector (629145600-1048575999, default 629145600):  ## 엔터입력(남은 block의 가장 첫부분 부터)
Using default value 629145600
Last sector, +sectors or +size{K,M,G} (629145600-1048575999, default 1048575999):  ##엔터입력 (남은 block의 가장 마지막부분까지)
Using default value 1048575999
Partition 3 of type Linux and of size 200 GiB is set
 
Command (m for help): p  ## 설정된 파티션 출력
 
Disk /dev/sda: 536.9 GB, 536870912000 bytes, 1048576000 sectors   ## 하드디스크가 500GB로 변경된것도 함께 확인
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: dos
Disk identifier: 0x000b5b4d
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   629145599   313523200   8e  Linux LVM
/dev/sda3       629145600  1048575999   209715200   83  Linux
 
Command (m for help): t   ## 파티션 시스템 유형변경
Partition number (1-3, default 3): 3  ## 신규로 생성한 파티션 3 지정
Hex code (type L to list all codes): 8e    ## 리눅스 LVM으로 변경
Changed type of partition 'Linux' to 'Linux LVM'
 
Command (m for help): w     ## 저장
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: Re-reading the partition table failed with error 16: 장치나 자원이 동작 중.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

 

 

 

 

볼륨 생성

 

이 부분부터는 PV, VG, LV 부분을 주로 다룰 건데 자세한 개념은 링크를 참조하는 게 좋을 것 같다.

 

[소개] LVM(Logical Volume Manager) - 개념

이번에는 EC2 의 EBS 저장 장치를 효율적으로 사용하기 위한 LVM에 대하여 알아보겠습니다. 먼저 LVM 을 한줄로 설명하자면, " Logical Volume을 효율적이고 유연하게 관리하기 위한 커널의 한 부분이자

tech.cloud.nongshim.co.kr

 

 

PV 신규 생성

 

PV는 Physical Volume 즉, 물리적 볼륨이다. 신규로 추가된 파티션 대상을 로지컬 볼륨(LV)으로 만드는 초석이 되는 물리적 볼륨을 먼저 지정한다.

 

현재 지정되어있는 물리볼륨확인
$ pvscan   

/dev/sda3 파티션을 신규물리볼륨으로 생성
$ pvcreate /dev/sda3

 

 

 

VG 용량 증설

 

 

VG는 Volume Group이며 위 생성했던 PV들의 집합이다. VG를 통해 PV를 통합하고 이를 한 개의 스토리지로 활용하여 LV들에 할당해줄 수 있는 기능을 한다.

 

 

현재 지정되어있는 VG확인
$ vgscan   

/dev/sda3 pv를 rootvg 볼륨에추가
$ vgextend rootvg /dev/sda3

 

 

 

LV 용량 증설

 

LV는 앞서 설명했던 것처럼 Logical Volume이며 이 LVM(Logical Volume Manager)은 일반적인 리눅스 운영환경에서 주로 쓰이는 파일 시스템 관리 툴로 알고 있다. 물리적이 아닌 논리적으로 파일 시스템을 관리하므로 용량을 증설하고 감축하는 등 여려 운영 측면에서의 유연함을 제공해준다. 예시의 서버에는 rootvg의 영역을 사용 중인 app이라는 이름의 LV가 있다. 본 경우에는 해당 LV를 확장시켜주는 개념으로 접근한다.

 

 

lV용량 증설, 'rootvg' VG의 잔여 용량을 '/dev/root/app' LV에 더해준다.
$ lvextend -l +100%FREE /dev/rootvg/app

lV용량이 변화된것을 확인
$ lvs

 

 

참고로 100% FREE앞에 + 해주지 않으면 'New size given (5120 extents) not larger than existing size (7677extents)'와 같은 에러가 발생한다.

 

 

리사이징

 

 

다음으로 resize명령어를 통해 기존 파일 시스템의 포맷 방식을 다시 한번 리사이징 하여 갱신한다. 아래처럼 /dev/mapper/rootvg-app으로 확인해도 되고, /dev/rootvg/app으로 확인해도 된다.(이하 동일)

 

$ resize2fs /dev/mapper/rootvg-app

 

위 명령어 입력 시 아래와 같이 나오는 경우는 기존 포맷했던 파일 시스템을 확인한다.

 

resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block while trying to open /dev/mapper/rootvg-app
Couldn't find valid filesystem superblock.

 

해당 경우는 파일 시스템의 포맷을 확인한다.

 

# blkid /dev/mapper/rootvg-app
/dev/mapper/rootvg-app: UUID="1d37744e-a249-4fcc-8271-2118d3d59ea9" TYPE="xfs"

 

확인 시 xfs방식으로 포맷했던 파일 시스템으로 확인된다. 따라서 xfs_growfs로 용량을 리사이징 한다.

 

# xfs_growfs /dev/mapper/rootvg-app

 

 

이후 df -h로 확장된 용량이 정상적으로 잘 마운트 되었는지 확인되면 완료.

 

 

 

 

 

 

2. 신규 하드디스크를 추가하여 용량 증설

 

해당 방법은 물리적으로 디스크를 추가하는 것과 유사할 것으로 보이나 정확한 확인은 필요하다. 내용 기술은 VM환경을 기반으로 작성되었다. 위 기술된 부분과 중복되는 부분이 있을 수 있으며 일부 부분에 대한 설명을 생략하고 진행하려 한다.

 

 

VM 서버 신규 하드디스크 추가

 

 

 

추가된 하드디스크를 조회한다.

 

 

# fdisk -l
 

Disk /dev/sda: 322.1 GB, 322122547200 bytes, 629145600 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x000ac25f



   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   419430399   208665600   8e  Linux LVM

/dev/sda3       419430400   629145599   104857600   8e  Linux LVM



Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes





Disk /dev/mapper/rootvg-root: 142.8 GB, 142807662592 bytes, 278921216 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes





Disk /dev/mapper/rootvg-swap: 17.2 GB, 17175674880 bytes, 33546240 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes





Disk /dev/mapper/rootvg-app: 161.1 GB, 161057079296 bytes, 314564608 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes





Disk /dev/loop0: 4059 MB, 4059037696 bytes, 7927808 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x5640c915



      Device Boot      Start         End      Blocks   Id  System

/dev/loop0p1   *           0     7927807     3963904    0  Empty

/dev/loop0p2          699276      717267        8996   ef  EFI (FAT-12/16/32)

 

/dev/sdb라는 하드디스크가 새로 추가된 것이 확인된다. 그럼 바로 이어서 /dev/sdb에 대한 파티션 설정을 해준다.

 

 

# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x92cafff4.

Command (m for help): n    ## 신규 파티션 생성
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):   (enter 입력) 
First sector (2048-83886079, default 2048): (enter 입력)
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-83886079, default 83886079): (enter 입력)
Using default value 83886079
Partition 1 of type Linux and of size 40 GiB is set


Command (m for help): t    ## 파티션 시스템 유형 설정
Selected partition 1
Hex code (type L to list all codes): 8e   ## lvm 타입 선언
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p

Disk /dev/sdb: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x92cafff4

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    83886079    41942016   8e  Linux LVM

Command (m for help): w    ## 저장
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

 

볼륨 설정

 

PV생성

 

$ pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

 

 

vg 용량 확장

$ vgextend rootvg /dev/sdb1
Volume group "rootvg" successfully extended

$ vgs
VG     #PV #LV #SN Attr   VSize    VFree 
rootvg   3   3   0 wz--n- <338.99g <40.00g

 

LV 용량확장

 

$ lvscan
ACTIVE            '/dev/rootvg/root' [133.00 GiB] inherit
ACTIVE            '/dev/rootvg/swap' [<16.00 GiB] inherit
ACTIVE            '/dev/rootvg/app' [<150.00 GiB] inherit

$ lvextend -l +100%FREE /dev/rootvg/app
Size of logical volume rootvg/app changed from <150.00 GiB (38399 extents) to 189.99 GiB (48638 extents).
Logical volume rootvg/app successfully resized.

 

 

 

xfs 형식으로 용량 확장 정상여부 확인

 

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-root  133G  7.1G  126G   6% /
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G     0  7.8G   0% /dev/shm
tmpfs                    7.8G  9.0M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               1014M  178M  837M  18% /boot
/dev/mapper/rootvg-app   150G   33M  150G   1% /app
/dev/loop0               3.8G  3.8G     0 100% /iso
tmpfs                    1.6G  4.0K  1.6G   1% /run/user/42
tmpfs                    1.6G   20K  1.6G   1% /run/user/0


$ xfs_growfs /dev/mapper/rootvg-app
meta-data=/dev/mapper/rootvg-app isize=512    agcount=12, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=39320576, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 39320576 to 49805312


$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-root  133G  7.1G  126G   6% /
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G     0  7.8G   0% /dev/shm
tmpfs                    7.8G  9.0M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/sda1               1014M  178M  837M  18% /boot
/dev/mapper/rootvg-app   190G   33M  190G   1% /app
/dev/loop0               3.8G  3.8G     0 100% /iso
tmpfs                    1.6G  4.0K  1.6G   1% /run/user/42
tmpfs                    1.6G   20K  1.6G   1% /run/user/0

 

이렇게 하드디스크를 신규로 추가했을 때의 설정 방법까지 기술해봤다. 근데 서버가 워낙 경우가 다양해서 안될 때도 있고 될때도 있고 장애 날 때도 있고... OS 버전에 따라 상이한 점이 일부 있어서 더 확인해볼 필요는 있어 보인다.

 

 

반응형

댓글