[Linux] Rocky Linux 9.5 LVM PV/VG/LV 구축, 온라인 확장, ext4 오프라인 축소






1. 개요

  • 두 개의 디스크(/dev/vdb, /dev/vdc)로 LVM을 구성하고, ext4·XFS 파일시스템 생성 → 마운트 → VG/LV 확장 → ext4 축소(오프라인)까지 전체 과정을 실습 형태로 정리합니다.



2. 버전

  • Rocky Linux 9.5



3. 설명




3-1. LVM이란?

  • LVM(Logical Volume Manager)은 디스크 공간을 논리적으로 관리할 수 있게 해주는 스토리지 추상화 계층입니다.
  • 여러 물리 디스크를 묶어 용량을 유연하게 나누고, 필요 시 온라인으로 확장·이동하실 수 있습니다.


3-2. PV(Physical Volume)란?

  • PV는 LVM이 사용하는 물리 저장소 단위(디스크 전체 또는 파티션)입니다.
  • pvcreate로 초기화하여 볼륨 그룹(VG)에 편입해 사용하실 수 있습니다.


3-3. VG(Volume Group)란?

  • VG는 여러 PV를 모아 만든 공용 저장소 풀입니다.
  • vgextend로 디스크를 추가해 용량을 늘리신 뒤, 해당 공간에서 논리 볼륨(LV)을 생성해 활용하실 수 있습니다.


3-4. LV(Logical Volume)란?

  • LV는 VG에서 분할하여 제공하는 가상 디스크입니다.
  • LV 위에 파일시스템을 생성·마운트하여 일반 디스크처럼 사용하실 수 있습니다.



4. 디스크 설정




4-1. 파티션 생성 및 LVM 설정

# parted -s /dev/vdb mklabel gpt
# parted -s /dev/vdb mkpart vdb 1 100%
# parted -s /dev/vdb set 1 lvm on



4-2. LVM 확인

# parted -l | grep lvm


출력 예시:

 1      1049kB  137GB  137GB               vdd   lvm



5. LVM 생성




5-1. PV 생성

# pvcreate /dev/vdb1


출력 예시:

  Physical volume "/dev/vdb1" successfully created.
  Creating devices file /etc/lvm/devices/system.devices



5-2. VG 생성

# vgcreate vgtest /dev/vdb1


출력 예시:

  Volume group "vgtest" successfully created



5-3. LV 생성

# lvcreate -n lv_ext4 -L 10G vgtest
# lvcreate -n lv_xfs -L 10G vgtest



6. 파일 시스템 생성

# mkfs.ext4 /dev/vgtest/lv_ext4
# mkfs.xfs /dev/vgtest/lv_xfs



7. 마운트




7-1. 마운트 포인트 생성

# mkdir -p /mnt/ext4 /mnt/xfs



7-2. 마운트

# mount /dev/vgtest/lv_ext4 /mnt/ext4
# mount /dev/vgtest/lv_xfs /mnt/xfs



7-3. 마운트 확인

# df -Th /mnt/ext4 /mnt/xfs


출력 예시:

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgtest-lv_ext4 ext4  9.8G   24K  9.3G   1% /mnt/ext4
/dev/mapper/vgtest-lv_xfs  ext4  9.8G   24K  9.3G   1% /mnt/xfs



7-4. LV-PE 매핑 확인

# lvs -o+devices


출력 예시:

  LV      VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lv_ext4 vgtest -wi-ao---- 10.00g                                                     /dev/vdb1(0)
  lv_xfs  vgtest -wi-ao---- 10.00g                                                     /dev/vdb1(2560)



8. LVM 확장




8-1. 디스크 설정

# parted -s /dev/vdc mklabel gpt
# parted -s /dev/vdc mkpart vdc 1 100%
# parted -s /dev/vdc set 1 lvm on



8-2. 디스크 설정 확인

# parted -l | grep lvm


출력 예시:

 1      1049kB  137GB  137GB               vdd   lvm
 1      1049kB  137GB  137GB               vdc   lvm



8-3. PV 설정



8-3-1. PV 확인

# pvdisplay


출력 예시:

  --- Physical volume ---
  PV Name               /dev/vdb1
  VG Name               vgtest
  PV Size               <128.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              32767
  Free PE               27647
  Allocated PE          5120
  PV UUID               IQbVSq-NQGW-m2Xn-emp4-5Ygz-eCAw-fkXj7B


8-3-2. PV 추가

# pvcreate /dev/vdc1


출력 예시:

  Physical volume "/dev/vdc1" successfully created.


8-3-3. PV 추가 확인

# pvdisplay


출력 예시:

  --- Physical volume ---
  PV Name               /dev/vdb1
  VG Name               vgtest
  PV Size               <128.00 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              32767
  Free PE               27647
  Allocated PE          5120
  PV UUID               IQbVSq-NQGW-m2Xn-emp4-5Ygz-eCAw-fkXj7B

  "/dev/vdc1" is a new physical volume of "<128.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdc1
  VG Name
  PV Size               <128.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               283rhf-kkfk-c8Qp-M4Ts-m9bp-2xMd-DkMhuN



8-4. VG 설정



8-4-1. VG 확인

# vgdisplay


출력 예시:

  --- Volume group ---
  VG Name               vgtest
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <128.00 GiB
  PE Size               4.00 MiB
  Total PE              32767
  Alloc PE / Size       5120 / 20.00 GiB
  Free  PE / Size       27647 / <108.00 GiB
  VG UUID               34QJUg-QapN-4rLJ-3HXG-nDpq-oio5-Hr3OwD


8-4-2. VG 확장

# vgextend vgtest /dev/vdc1


출력 예시:

  Volume group "vgtest" successfully extended


8-4-3. VG 확장 확인

# vgdisplay


출력 예시:

  --- Volume group ---
  VG Name               vgtest
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               255.99 GiB
  PE Size               4.00 MiB
  Total PE              65534
  Alloc PE / Size       5120 / 20.00 GiB
  Free  PE / Size       60414 / 235.99 GiB
  VG UUID               34QJUg-QapN-4rLJ-3HXG-nDpq-oio5-Hr3OwD



8-5. LV 설정 및 온라인 확장



8-5-1. LV 확인

# lvdisplay


출력 예시:

  --- Logical volume ---
  LV Path                /dev/vgtest/lv_ext4
  LV Name                lv_ext4
  VG Name                vgtest
  LV UUID                vnYPbj-TyVi-iWKo-iSFU-mYHj-EOZU-Gyv4nG
  LV Write Access        read/write
  LV Creation host, time KVM01, 2025-08-23 17:09:57 +0900
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/vgtest/lv_xfs
  LV Name                lv_xfs
  VG Name                vgtest
  LV UUID                oe7NMp-zbHY-Zyfd-RaA9-N7HT-4Far-dmO5PQ
  LV Write Access        read/write
  LV Creation host, time KVM01, 2025-08-23 17:10:04 +0900
  LV Status              available
  # open                 1
  LV Size                10.00 GiB
  Current LE             2560
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1


8-5-2. ext4 온라인 확장

# lvextend -r -L +10G /dev/vgtest/lv_ext4


출력 예시:

  Size of logical volume vgtest/lv_ext4 changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
  File system ext4 found on vgtest/lv_ext4 mounted at /mnt/ext4.
  Extending file system ext4 to 20.00 GiB (21474836480 bytes) on vgtest/lv_ext4...
resize2fs /dev/vgtest/lv_ext4
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vgtest/lv_ext4 is mounted on /mnt/ext4; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/vgtest/lv_ext4 is now 5242880 (4k) blocks long.

resize2fs done
  Extended file system ext4 on vgtest/lv_ext4.
  Logical volume vgtest/lv_ext4 successfully resized.


8-5-3. xfs 온라인 확장

# lvextend -r -L +10G /dev/vgtest/lv_xfs


출력 예시:

  Size of logical volume vgtest/lv_xfs changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
  File system xfs found on vgtest/lv_xfs mounted at /mnt/xfs.
  Extending file system xfs to 20.00 GiB (21474836480 bytes) on vgtest/lv_xfs...
xfs_growfs /dev/vgtest/lv_xfs
meta-data=/dev/mapper/vgtest-lv_xfs isize=512    agcount=4, agsize=655360 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=2621440, 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 2621440 to 5242880
xfs_growfs done
  Extended file system xfs on vgtest/lv_xfs.
  Logical volume vgtest/lv_xfs successfully resized.


8-5-4. LV 확장 확인

# lvdisplay


출력 예시:

  --- Logical volume ---
  LV Path                /dev/vgtest/lv_ext4
  LV Name                lv_ext4
  VG Name                vgtest
  LV UUID                vnYPbj-TyVi-iWKo-iSFU-mYHj-EOZU-Gyv4nG
  LV Write Access        read/write
  LV Creation host, time KVM01, 2025-08-23 17:09:57 +0900
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

  --- Logical volume ---
  LV Path                /dev/vgtest/lv_xfs
  LV Name                lv_xfs
  VG Name                vgtest
  LV UUID                oe7NMp-zbHY-Zyfd-RaA9-N7HT-4Far-dmO5PQ
  LV Write Access        read/write
  LV Creation host, time KVM01, 2025-08-23 17:10:04 +0900
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1


8-5-5. LV 확장 확인

# df -Th /mnt/ext4 /mnt/xfs


출력 예시:

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/vgtest-lv_ext4 ext4   20G   24K   19G   1% /mnt/ext4
/dev/mapper/vgtest-lv_xfs  ext4   20G   24K   19G   1% /mnt/xfs



8-5. LV-PE 매핑 재확인

# lvs -o+devices


출력 예시:

  LV      VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lv_ext4 vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(0)
  lv_ext4 vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(5120)
  lv_xfs  vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(2560)
  lv_xfs  vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(7680)



9. 오프라인 축소(ext4)

  • XFS는 축소 불가능 합니다.




9-1. 마운트 해제

# umount /mnt/ext4/



9-2. 파일 시스템 검사

# e2fsck -f /dev/vgtest/lv_ext4


출력 예시:

e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vgtest/lv_ext4: 11/1310720 files (0.0% non-contiguous), 109927/5242880 blocks



9-3. 파일 시스템 축소(15G)

# resize2fs /dev/vgtest/lv_ext4 15360M


출력 예시:

resize2fs 1.46.5 (30-Dec-2021)
Resizing the filesystem on /dev/vgtest/lv_ext4 to 3932160 (4k) blocks.
The filesystem on /dev/vgtest/lv_ext4 is now 3932160 (4k) blocks long.



9-4. LV 크기 축소

# lvreduce -L 15360M /dev/vgtest/lv_ext4


출력 예시:

  File system ext4 found on vgtest/lv_ext4.
  File system size (15.00 GiB) is equal to the requested size (15.00 GiB).
  File system reduce is not needed, skipping.
  Size of logical volume vgtest/lv_ext4 changed from 20.00 GiB (5120 extents) to 15.00 GiB (3840 extents).
  Logical volume vgtest/lv_ext4 successfully resized.



9-5. 재마운트 및 확인

# mount /dev/vgtest/lv_ext4 /mnt/ext4/


# df -Th /mnt/ext4/


출력 예시:

Filesystem                 Type  Size  Used Avail Use% Mounted on
/dev/mapper/vgtest-lv_ext4 ext4   15G   24K   14G   1% /mnt/ext4


# lvs -o+devices


출력 예시:

  LV      VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lv_ext4 vgtest -wi-ao---- 15.00g                                                     /dev/vdb1(0)
  lv_ext4 vgtest -wi-ao---- 15.00g                                                     /dev/vdb1(5120)
  lv_xfs  vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(2560)
  lv_xfs  vgtest -wi-ao---- 20.00g                                                     /dev/vdb1(7680)



댓글 남기기