서버 관리자나 리눅스 사용자라면 언젠가는 디스크 공간 재할당의 필요성을 느낄 때가 있다.
특히 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가 확장된 것을 확인할 수 있다.