[Rocky Linux 9] /home 용량 줄이고 /root 용량 늘리기

서버 관리자나 리눅스 사용자라면 언젠가는 디스크 공간 재할당의 필요성을 느낄 때가 있다.
특히 home 디렉토리의 공간은 남아도는데 root 파티션의 공간이 부족한 상황은 자주 발생한다.
다행히도 Linux의 LVM(Logical Volume Manager)을 사용하면 시스템을 중단하지 않고도 파티션 크기를 동적으로 조정할 수 있다.
Rocky Linux 9 환경에서 LVM을 활용해 home 파티션의 크기를 줄이고 root 파티션을 확장하는 방법을 단계별로 알아보겠다.

1. 현재 상태 확인

1.1. LVM 구성 확인

파티션 크기를 변경하기 전에 먼저 현재 시스템의 상태를 확인해야 한다. 다음 명령어를 사용하여 현재 LVM 구성을 살펴본다.

sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/rl/swap
  LV Name                swap
  VG Name                rl
  LV UUID                OHEye1-DIcJ-Yu5I-0kuk-sLrg-eDoW-o6OY90
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-06-26 21:00:21 +0900
  LV Status              available
  # open                 0
  LV Size                7.76 GiB
  Current LE             1987
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/rl/home
  LV Name                home
  VG Name                rl
  LV UUID                jJ1ptS-UjV3-fUnu-X0Dd-zcCf-yGQ4-IZe38Z
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-06-26 21:00:21 +0900
  LV Status              available
  # open                 1
  LV Size                <397.59 GiB
  Current LE             101783
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/rl/root
  LV Name                root
  VG Name                rl
  LV UUID                6oYmwa-ac8r-dQBo-xOn6-aENh-t2Tk-7rfRFe
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-06-26 21:00:22 +0900
  LV Status              available
  # open                 1
  LV Size                70.00 GiB
  Current LE             17920
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

현재 논리 볼륨의 크기와 사용 가능한 공간을 확인할 수 있다.

1.2. 파일시스템 확인

또한, 볼륨 축소를 위해 파일시스템의 이름을 확인한다.

df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                7.6G     0  7.6G   0% /dev/shm
tmpfs                3.1G  301M  2.8G  10% /run
/dev/mapper/rl-root   70G   22G   49G  32% /
/dev/sda2            960M  504M  457M  53% /boot
/dev/sda1            599M  7.1M  592M   2% /boot/efi
/dev/mapper/rl-home  398G   18G  380G   5% /home

2. home 볼륨 데이터 백업 및 재구성

2.1. 데이터 백업

home 볼륨의 크기를 줄이기 위해서는 먼저 파일 시스템의 크기를 줄여야 한다.
그러나 rocky linux에서 기본적으로 사용되는 xfs 파일 시스템은 축소를 지원하지 않는다.
그러므로 home 볼륨의 데이터를 외부 저장소나 다른 볼륨에 백업한 후 볼륨을 재구성 한다.

나의 경우 root의 공간이 남아 root로 백업해뒀다.

sudo mv $HOME /

2.2. home 볼륨 마운트 해제

sudo umount /home

만약 'umount: /home: target is busy.'이 발생한다면 아래 명령어를 통해 /home 디렉토리를 사용 중인 모든 프로세스를 찾아 강제로 종료 시킨 후 다시 umount를 진행한다.

fuser -ck /home

fuser: 파일이나 디렉토리를 사용 중인 프로세스를 식별하는 명령어
-c: 파일 시스템으로서의 디렉토리를 지정
-k: 찾은 프로세스를 강제로 종료

2.3. home 볼륨 제거

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

2.4. home 볼륨 재생성 및 크기 축소

home 볼륨을 필요한 크기로 재생성한다. 나의 경우 home 볼륨을 100GB로 만들었다.

sudo lvcreate -L 100G -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.
sudo mkfs.xfs /dev/rl/home
meta-data=/dev/rl/home           isize=512    agcount=4, agsize=6553600 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=26214400, 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.

2.5. home 볼륨 마운트

sudo mount /dev/rl/home /home

2.6. 데이터 복구

백업한 데이터를 home 볼륨에 복구한다.
나의 경우 root로 백업해둔 데이터를 복구한다.

sudo mv <백업 디렉토리> $HOME

3. root 볼륨 확장

이제 root 볼륨의 크기를 늘릴 차례이다. home 볼륨에서 축소한 공간을 root 볼륨에 추가한다.

sudo lvextend -L +297.58G /dev/rl/root
  Rounding size to boundary between physical extents: 297.58 GiB.
  Size of logical volume rl/root changed from 70.00 GiB (17920 extents) to 367.58 GiB (94101 extents).
  Logical volume rl/root successfully resized.

4. 파일 시스템 크기 조정

논리 볼륨의 크기를 변경한 후에는 파일 시스템 자체의 크기도 조정해야 한다. Rocky Linux 9는 기본적으로 xfs 파일 시스템을 사용하므로 다음 명령어를 사용한다.

sudo xfs_growfs /dev/mapper/rl-root
meta-data=/dev/mapper/rl-root    isize=512    agcount=22, agsize=4587520 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=96359424, 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

5. 결과 확인

5.1. 논리 볼륨 상태 확인

sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/rl/swap
  LV Name                swap
  VG Name                rl
  LV UUID                OHEye1-DIcJ-Yu5I-0kuk-sLrg-eDoW-o6OY90
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-06-26 21:00:21 +0900
  LV Status              available
  # open                 0
  LV Size                7.76 GiB
  Current LE             1987
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/rl/root
  LV Name                root
  VG Name                rl
  LV UUID                6oYmwa-ac8r-dQBo-xOn6-aENh-t2Tk-7rfRFe
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2024-06-26 21:00:22 +0900
  LV Status              available
  # open                 1
  LV Size                367.58 GiB
  Current LE             94101
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  --- Logical volume ---
  LV Path                /dev/rl/home
  LV Name                home
  VG Name                rl
  LV UUID                FduIfl-exFD-Gh9K-ieXD-klUw-wTwm-x0AMOE
  LV Write Access        read/write
  LV Creation host, time k8s-master01, 2024-07-25 22:38:46 +0900
  LV Status              available
  # open                 1
  LV Size                100.00 GiB
  Current LE             25600
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

5.2. 파일 시스템 상태 확인

df -h
Filesystem           Size  Used Avail Use% Mounted on
devtmpfs             4.0M     0  4.0M   0% /dev
tmpfs                7.6G     0  7.6G   0% /dev/shm
tmpfs                3.1G  301M  2.8G  10% /run
/dev/mapper/rl-root  368G   19G  350G   6% /
/dev/sda2            960M  504M  457M  53% /boot
/dev/sda1            599M  7.1M  592M   2% /boot/efi
/dev/mapper/rl-home  100G   16G   85G  16% /home

root의 size가 확장된 것을 확인할 수 있다.