개요

워커 노드로 사용하는 VM의 디스크를 64기가로 할당했지만, 파티셔닝을 자동으로 하는 바람에 홈 파티션이 약 20기가가 잡혀있었습니다.

df -h | grep /dev/mapper
디스크 용량 부족 현상을 보여주는 워커 노드의 파일 시스템 사용량 상태 로그

처음엔 별 불편함을 느끼지 못했으나 파드가 늘어날수록 80%를 넘어가는 워커들의 디스크 사용량을 보며 홈 디렉토리를 줄이기로 했습니다..

근데 역시 한방에 되는게 없네요.

의식의 흐름대로 기술하겠습니다.

Home 파티션 백업 및 삭제….가 안되네?

사실 어려울 작업은 아니었습니다. 일단 현재 홈 디렉토리를 루트에 백업합니다.

tar -zcvf /root/home.tar.gz -C /home .

그리고 홈디렉토리를 언마운트합니다.

umount /home

안되면 제가 사랑하는 lazy, force를 사용합니다.

umount -lf /home
lvremove /dev/mapper/rl-home

그런데, 아래와 같은 문구가 출력되며 막혔습니다.

Logical volume rl/home contains a filesystem in use.

Home 파티션 사용중인 프로세스 찾기

원래 맨 처음 오류 문구로 구글링을 했을 땐, lsof | grep /home 으로 홈 파티션 사용중인 프로세스를 찾아서 kill하라고 되어있었지만,

제 경우 어마무시한 출력량에도 불구하고 /home 파티션을 사용중인 프로세스는 없었습니다.

서버폴트 커뮤니티의 도움을 받아 논리 볼륨의 고유 디바이스 번호를 조회하는 터미널 화면

조금 해맸는데, serverfault에서 답을 찾았습니다.

먼저, 아래명령을 사용해 home 논리볼륨에 대해 디바이스 정보 중 major, minor번호를 찾습니다.

dmsetup info -c | grep home

그러면 아래와 같이 253과 2라는 숫자를 얻을 수 있습니다.

rl-home          253   2 L--w    1    1      0 LVM-wPi7oFcvvcqdeLDVQAzr8cnCxRK1Q5yzapF6ohUobUkXFqBrDlpZE51cAvQa7L0E

해당 숫자로 프로세스를 검색합니다.

lsof | grep "253,2"

그러면 아래와 같이 엄청난 출력 로그 중, 253,2에 해당하는 프로세스가 출력됩니다.

조회한 디바이스 번호로 검색하여 Home 파티션을 점유 중인 SSH 관련 프로세스 목록

이후 아래 명령어를 이용해 해당 프로세스들을 kill합니다.

kill -9 5610
kill -9 5640
kill -9 6121

그러나, 사실 위에 있는 명령어 3개는 제가 SSH에 root가 아닌 사용자 계정으로 접속하면서 발생한 프로세스들입니다.

bash쉘, 쉘에서 수행한 sudo, 그리고 SSH를 서빙하기 위한 SFTP이죠.

따라서 5610프로세스든 뭐 하나든 kill하는 순간 SSH가 종료되게 됩니다.

root로 바로 로그인을 해서 프로세스를 찾은 뒤 검색해서 kill해주어야 합니다.

Home 파티션 삭제 및 재생성

문제의 원인을 모두 제거했기 때문에, 이제 논리볼륨 삭제에 문제가 없을 겁니다.

lvremove /dev/mapper/rl-home
Do you really want to remove active logical volume rl/home? [y/n]: y
  Logical volume "home" successfully removed.

만일, 여기서도 안되면 이 땐, -f를 사용하면 듣습니다.

lvremove -f /dev/mapper/rl-home
Logical volume "home" successfully removed.

잘 지워졌습니다. 이제 용량을 축소해서 다시 한 번 생성해 줍니다.

lvcreate -L 5GB -n home rl
WARNING: xfs signature detected on /dev/rl/home at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/rl/home.
  Logical volume "home" created.

Rocky Linux Home파티션은 xfs였으니까, xfs파일시스템으로 만들어 줍니다.

mkfs.xfs /dev/rl/home
meta-data=/dev/rl/home           isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.

mount해줍니다. 타겟은 /etc/fstab 에 기록되어 있기 때문에 필요없습니다.

mount /dev/mapper/rl-homedf -h | grep home
/dev/mapper/rl-home                               5.0G   68M  4.9G   2% /home

Root 파티션 용량 확장

이제 루트 파티션을 확장합니다.

lvextend -r -l +100%FREE /dev/mapper/rl-root
Size of logical volume rl/root changed from 37.63 GiB (9634 extents) to <51.01 GiB (13058 extents).
File system xfs found on rl/root mounted at /var/lib/kubelet/pods/de22b8af-0a88-4b29-92c3-f1cd6829ba46/volume-subpaths/nextcloud-phpconfig/nextcloud-cron/10.
Extending file system xfs to <51.01 GiB (54769221632 bytes) on rl/root...
xfs_growfs /dev/rl/root
meta-data=/dev/mapper/rl-root    isize=512    agcount=4, agsize=2466304 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1 nrext64=0
data     =                       bsize=4096   blocks=9865216, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 9865216 to 13371392
xfs_growfs done
  Extended file system xfs on rl/root.
  Logical volume rl/root successfully resized.

최종적으로 용량을 확인합니다.

df -h | grep /dev/mapper
Root 파티션 용량을 성공적으로 확장한 후 df 명령어로 최종 용량 분배 상태를 검증하는 화면

이제서야 원하던 파티션 배분이 완료되었네요.

맨 처음 백업했던 홈 파티션 내용물의 압축을 해제하고, 내용물을 확인합니다.

tar -zxvf /root/home.tar.gz -C /home
ls -lah /home/better0101
백업해 둔 데이터를 복원하고 디렉토리 내용물이 정상적으로 유지되었는지 확인하는 터미널 출력

조금 돌아왔지만, 정상적으로 파티셔닝을 수행했습니다.