개요
워커 노드로 사용하는 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에 해당하는 프로세스가 출력됩니다.
이후 아래 명령어를 이용해 해당 프로세스들을 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
이제서야 원하던 파티션 배분이 완료되었네요.
맨 처음 백업했던 홈 파티션 내용물의 압축을 해제하고, 내용물을 확인합니다.
tar -zxvf /root/home.tar.gz -C /home
ls -lah /home/better0101
조금 돌아왔지만, 정상적으로 파티셔닝을 수행했습니다.
출처
[Linux][RHEL7] 리눅스 시스템에서 디스크 용량 축소 및 확장
/home 디렉토리의 용량을 줄이고 남는 용량을 /root 디렉토리에 적용하여 확장하는 방법이다. 현재 사용중인 시스템의 디스크 정보 확인 명령어 3가지 : 옵션은 human readable format으로, 사람이 읽기
velog.io
2. https://serverfault.com/questions/266697/cant-remove-open-logical-volume
Can't remove open logical volume
When I try to remove a logical volume I get the message #lvremove /dev/my-volumes/volume-1 Can't remove open logical volume "volume-1" #lvchange -an -v /dev/my-volumes/volume-1 Using logical vo...
serverfault.com