Linux(RHEL 8) 에서의 root volume online 확장

linux 계열의 OS에서는 대부분 root(/) volume를 비롯한 대부분의 volume가 온라인으로 확장가능하다.
다만 확장시 거의 대부분 파티션을 수동으로 수정해야하는 리스크가 있다. 2T이하 볼륨은 fdisk를 사용하고
2T이상 볼륨은 parted를 사용해야 한다.
이 부분을 주의하면 손쉽게 온라인으로 볼륨확장이 가능하다.

  1. Harddisk의 용량 증설, Harddisk 추가 등 물리적인 용량의 증가
  2. OS에서 증가된 용량을 인식 및 Partition 수정, LVM 수정
  3. filesystem 에서의 확장
!! 일반적인 파일시스템 사용의 구성
  • 가장 하단에 기본적인 H/W에 해당하는 구성이 있다.
    디스크 또는 스토리지의 LUN 또는 서버에서 RAID Controller을 통해 구성된 VD(또는 Logical Volume 등 벤더마다 조금씩 용어가 다르다.)
    파일시스템 크기를 확장할려면 제공해주는 이 H/W적인 스토리지에 여유공간이 있거나 추가적인 할당이 필요하다.
  • 이 물리적인 스토리지가 있으면 이것을 직접 사용하는 경우도 있지만 대부분 파티션을 설정하여 사용하게 된다. 파티션 부분에서 OS 부팅을 위한 MBR/GPT같은 boot 영역이 H/W에서 인식할 수 있게 설정된다. 나머지 부분은 OS나 DATA를 위한 영역으로 분리하여 사용된다.
    하나의 디스크를 여러 개의 논리적인 영역으로 나누어 쓰는 것이 파티션이다.
  • 디스크에 대한 논리관리자는 OS별로 여러가지가 있다 Windows Server의 동적디스크나 Storage pool, 리눅스의 LVM(Logical Vomume Manager) 또는 논리관리자 없이 파티션을 바로 파일시스템으로 사용하기도 한다.
  • Filesystem은 위에 설명한 디스크를 관리하는 H/W, Partition, 논리관리자와 다르게 우리가 실제로 사용하는 File를 관리하기 위한 OS 구성요소이다.
    흔히 계층적 구조라고 말하는 디렉토리구조, 삭제시 복구하는 휴지통(recycle bin), filesystem 파손을 막기위한 journaling system, 개별파일 최대크기, 최대 파일개수, 파일시스템 최대크기 등이 filesystem에 따라 결정된다.
    마찬가지로 online 중에 filesystem을 증설이 가능한지 여부도 filesystem의 종류에 따라 결정된다. (주로 과거 filesystem인 ext2, fat, hfs 등은 online확장이 불가능하다.)

1. Harddisk의 용량 증설, Harddisk 추가 등 물리적인 용량의 증가

1.1 기존 디스크 용량을 늘릴지 새로운 디스크를 추가할지 결정해야 합니다.
다만 root 파일시스템의 경우 대부분의 시스템에서 단일 디스크 내에서만 할당할 수 있게 제약이 걸려있다.
그러므로 기존 디스크 용량을 늘려야 한다.
아래 예시는 VMWARE에서 VM OS의 root disk 용량을 100G-> 200G로 늘려 OS(RHEL8)의 root filesystem을 늘려줄려고 한다.

!! VMWARE의 경우 snapshot가 있는 상태에서는 용량변경이 되지 않음. 기존 snapshot 삭제 후 변경.

2. OS에서 증가된 용량을 인식 및 Partition 수정, LVM 수정

!! VM의 경우 변경 후에 바로 용량이 인식되지 않음. 하기 명령어를 통해 변경된 용량 업데이트 필요.
물리적인 장비의 경우 대부분 바로 인식되나 정상적으로 인식되지 않는 경우 동일한 과정 필요. linux의 경우 인식이 안되는 경우 리부팅이 필요 할 수도 있음.
# echo 1 > /sys/class/block/sda/device/rescan

	[root@rhel88 ~]# lsblk
	NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
	sda             8:0    0  100G  0 disk
	├─sda1          8:1    0  600M  0 part /boot/efi
	├─sda2          8:2    0    1G  0 part /boot
	└─sda3          8:3    0 98.4G  0 part
	  ├─rhel-root 253:0    0 90.5G  0 lvm  /
	  └─rhel-swap 253:1    0  7.9G  0 lvm  [SWAP]
	sr0            11:0    1 1024M  0 rom
	[root@rhel88 ~]# fdisk -l
	Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 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
	Disklabel type: gpt
	Disk identifier: 28E2C079-A832-428B-BE7F-2088E6AE0BD3
	
	Device       Start       End   Sectors  Size Type
	/dev/sda1     2048   1230847   1228800  600M EFI System
	/dev/sda2  1230848   3327999   2097152    1G Linux filesystem
	/dev/sda3  3328000 209713151 206385152 98.4G Linux LVM
	
	OS에서 하기 명령어로 용량 재인식 필요.
	[root@rhel88 ~]# ll /sys/class/block/sda/device/rescan
	--w-------. 1 root root 4096 Jul 31 17:49 /sys/class/block/sda/device/rescan
	[root@rhel88 ~]# echo 1 > /sys/class/block/sda/device/rescan
	[root@rhel88 ~]# lsblk
	NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
	sda             8:0    0  200G  0 disk
	├─sda1          8:1    0  600M  0 part /boot/efi
	├─sda2          8:2    0    1G  0 part /boot
	└─sda3          8:3    0 98.4G  0 part
	  ├─rhel-root 253:0    0 90.5G  0 lvm  /
	  └─rhel-swap 253:1    0  7.9G  0 lvm  [SWAP]
	sr0            11:0    1 1024M  0 rom
	[root@rhel88 ~]#

2.1 변경된 용량을 파티션에 반영, 기존의 root LVM에 할당되어 있는 sda3의 파티션 정보를 수정하여 늘어난 용량으로 재설정한다. 기존의 파티션을 삭제하고 새로운 파티션을 늘어난 크기 만큼 늘려줘야 한다.
linux 파티션의 경우 특정 package를 설치하지 않으면 수정되지 않으므로 삭제/재생성 해야된다.
fdisk의 경우 마지막에 “w” 명령을 주지 않으면 write 되지 않으니 마지막에 제대로 확인해 볼 수 있으나, parted는 수정 즉시 반영되므로 주의해야 된다.
반드시 기존 정보를 확인하여 실수시 복구 할 수 있도록 하는 것이 좋다.

	[root@rhel88 ~]# fdisk -l
	GPT PMBR size mismatch (209715199 != 419430399) will be corrected by write.
	The backup GPT table is not on the end of the device. This problem will be corrected by write.
	Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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
	Disklabel type: gpt
	Disk identifier: 28E2C079-A832-428B-BE7F-2088E6AE0BD3
	
	Device       Start       End   Sectors  Size Type
	/dev/sda1     2048   1230847   1228800  600M EFI System
	/dev/sda2  1230848   3327999   2097152    1G Linux filesystem
	/dev/sda3  3328000 209713151 206385152 98.4G Linux LVM
	
	- "/dev/sda3" 파티션 사이즈 변경
	[root@rhel88 ~]# fdisk /dev/sda
	Command (m for help): p
	Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 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
	Disklabel type: gpt
	Disk identifier: 28E2C079-A832-428B-BE7F-2088E6AE0BD3

	Device       Start       End   Sectors  Size Type
	/dev/sda1     2048   1230847   1228800  600M EFI System
	/dev/sda2  1230848   3327999   2097152    1G Linux filesystem
	/dev/sda3  3328000 209713151 206385152 98.4G Linux LVM

	Welcome to fdisk (util-linux 2.32.1).
	Changes will remain in memory only, until you decide to write them.
	Be careful before using the write command.
	
	GPT PMBR size mismatch (209715199 != 419430399) will be corrected by write.
	The backup GPT table is not on the end of the device. This problem will be corrected by write.
	
	Command (m for help): d 		-> 기존 파티션 삭제
	Partition number (1-3, default 3): 3
	
	Partition 3 has been deleted.
	
	Command (m for help): n 		-> 파티션 재생성
	Partition number (3-128, default 3):
	First sector (3328000-419430366, default 3328000):
	Last sector, +sectors or +size{K,M,G,T,P} (3328000-419430366, default 419430366):    -> 변경된 섹터 확인
	
	Created a new partition 3 of type 'Linux filesystem' and of size 198.4 GiB.
	Partition #3 contains a LVM2_member signature.
	
	Do you want to remove the signature? [Y]es/[N]o: n
	
	Command (m for help): w			-> 파티션 쓰기
	
	The partition table has been altered.
	Syncing disks.
	
	[root@rhel88 ~]# fdisk -l
	Disk /dev/sda: 200 GiB, 214748364800 bytes, 419430400 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
	Disklabel type: gpt
	Disk identifier: 28E2C079-A832-428B-BE7F-2088E6AE0BD3
	
	Device       Start       End   Sectors   Size Type
	/dev/sda1     2048   1230847   1228800   600M EFI System
	/dev/sda2  1230848   3327999   2097152     1G Linux filesystem
	/dev/sda3  3328000 419430366 416102367 198.4G Linux filesystem

2.2 변경된 파티션 용량을 LVM에 반영 및 root lv 확장
# pvresize /dev/sda3 명령을 통해 LVM내의 PV size 반영하여 확장
# lvextend -l +100%FREE /dev/mapper/rhel-root 명령어를 통해 root LV 를 확장
(-l +100%FREE는 여유공간 전체 할당시, 일부용량만 증설이 필요하면 -L 또는 –size 명령어로 +10g 등 용량으로 할당할 수 있다.)

	- pvresize 명령어를 통해 변경된 sda3 용량을 lvm에 반영
	[root@rhel88 ~]# lsblk
	NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
	sda             8:0    0   200G  0 disk
	├─sda1          8:1    0   600M  0 part /boot/efi
	├─sda2          8:2    0     1G  0 part /boot
	└─sda3          8:3    0 198.4G  0 part
	  ├─rhel-root 253:0    0  90.5G  0 lvm  /
	  └─rhel-swap 253:1    0   7.9G  0 lvm  [SWAP]
	sr0            11:0    1  1024M  0 rom
	[root@rhel88 ~]# vgs
	  VG   #PV #LV #SN Attr   VSize  VFree
	  rhel   1   2   0 wz--n- 98.41g    0
	[root@rhel88 ~]# pvresize /dev/sda3
	  Physical volume "/dev/sda3" changed
	  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
	[root@rhel88 ~]# vgs
	  VG   #PV #LV #SN Attr   VSize   VFree
	  rhel   1   2   0 wz--n- 198.41g 100.00g

	- lvextend로 lv size 증설
	[root@rhel88 ~]# lvs
	  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
	  root rhel -wi-ao---- <90.52g
	  swap rhel -wi-ao----   7.89g
	[root@rhel88 ~]# lvextend -l +100%FREE /dev/rhel/root 
	;; (남은공간 전체 할당. 또는 -L +10g 등으로 필요 용량 증설 가능.)
	  Size of logical volume rhel/root changed from <90.52 GiB (23172 extents) to <190.52 GiB (48772 extents).
	  Logical volume rhel/root successfully resized.
	[root@rhel88 ~]# lvs
	  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
	  root rhel -wi-ao---- <190.52g
	  swap rhel -wi-ao----    7.89g

3. filesystem 에서의 확장

filesystem에 따라 확장명령어를 사용하여 filesystem을 확장
xfs의 경우 xfs_growfs, ext4의 경우 resize2fs 명령어를 사용하여 확장한다.
용량을 줄이는 경우 대부분 filesystem이 깨진다. 용량을 일부만 사용하는 경우 확장 전후 fsck를 돌려서 안 깨지는 경우도 있으나 일반적으로 손상되어 backup/restore가 필요하니 요행을 바라지 말 것.

	[root@rhel88 ~]# df -h
	Filesystem             Size  Used Avail Use% Mounted on
	devtmpfs               3.8G     0  3.8G   0% /dev
	tmpfs                  3.8G     0  3.8G   0% /dev/shm
	tmpfs                  3.8G   59M  3.8G   2% /run
	tmpfs                  3.8G     0  3.8G   0% /sys/fs/cgroup
	/dev/mapper/rhel-root   91G  5.5G   85G   7% /
	/dev/sda2             1014M  259M  756M  26% /boot
	/dev/sda1              599M  5.8M  594M   1% /boot/efi
	tmpfs                  770M   44K  770M   1% /run/user/1000
	tmpfs                  770M     0  770M   0% /run/user/0
	[root@rhel88 ~]# xfs_growfs /dev/mapper/rhel-root
	meta-data=/dev/mapper/rhel-root  isize=512    agcount=4, agsize=5932032 blks
	         =                       sectsz=512   attr=2, projid32bit=1
	         =                       crc=1        finobt=1, sparse=1, rmapbt=0
	         =                       reflink=1    bigtime=0 inobtcount=0
	data     =                       bsize=4096   blocks=23728128, imaxpct=25
	         =                       sunit=0      swidth=0 blks
	naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
	log      =internal log           bsize=4096   blocks=11586, version=2
	         =                       sectsz=512   sunit=0 blks, lazy-count=1
	realtime =none                   extsz=4096   blocks=0, rtextents=0
	data blocks changed from 23728128 to 49942528
	[root@rhel88 ~]# df -h
	Filesystem             Size  Used Avail Use% Mounted on
	devtmpfs               3.8G     0  3.8G   0% /dev
	tmpfs                  3.8G     0  3.8G   0% /dev/shm
	tmpfs                  3.8G   59M  3.8G   2% /run
	tmpfs                  3.8G     0  3.8G   0% /sys/fs/cgroup
	/dev/mapper/rhel-root  191G  6.2G  185G   4% /
	/dev/sda2             1014M  259M  756M  26% /boot
	/dev/sda1              599M  5.8M  594M   1% /boot/efi
	tmpfs                  770M   44K  770M   1% /run/user/1000
	tmpfs                  770M     0  770M   0% /run/user/0

!! 파일시스템 종류/특성 참조
Windows : https://isc9511.tistory.com/179
EXT2/3 : https://isc9511.tistory.com/180
linux file system : https://medium.com/naver-cloud-platform/posix-알아보기-1-linux-리눅스-파일-시스템의-종류와-특징-96a2e93e33b3

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다