1. 개요

물리 디스크를 쓸 수 있게 포맷하고 마운트를 하는 방법을

에서 학습하였다.

여기서는 LVM 개념을 배운다.

LVM은 물리 디스크를 초기화 한 이후에, 그룹핑 개념을 도입하여

여러 물리 디스크를 하나의 그룹처럼 묶어줄 수 있게 된다.

논리적인 개념으로 만들어주기 때문에 원하는 크기의 가상의 디스크 장치를 만들 수 있다.

2. 디스크 초기화 및 파티셔닝

1
2
3
4
5
6
7
8
9
# lsblk --fs
NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
vda                                                     
├─vda1                                                  
├─vda2 vfat         399C-0F7D                            /boot/efi
└─vda3 xfs    root  3cd0d4ca-93f6-423b-a469-70ab2b10b667 /
vdb                                                     
vdc                                                     
vdd

초기화되지 않은 신규 디스크 장치는 vdb, vdc, vdd

1
2
# parted -s /dev/vdb mkpart part1 1M 256MB
# parted -s /dev/vdb mkpart part2 257M 513MB

xfs / ext4 등의 type을 명시하지 않는 것이 특징이다.

두 개(part1, part2)의 파티셔닝을 하였다.

1
2
# parted /dev/vdb set 1 lvm on
# parted /dev/vdb set 2 lvm on

lvm type으로 지정한다.

위에서 lvm type을 일괄 지정하는 방법은 보이지 않는다.

1
2
3
4
5
6
7
8
9
10
# parted /dev/vdb print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name   Flags
 1      1049kB  256MB  255MB               part1  lvm
 2      257MB   513MB  256MB               part2  lvm

총 2개의 파티션이 LVM으로 잘 준비되었다.

1
# udevadm settle

디스크 장치가 준비되기를 기다리는 것을 잊지 말자…!

3. 물리 볼륨

phyisical voulume 으로 만들어야 다음 volume group에서 묶을 수 있다.

  • 개별적인 물리 디스크 장치를 논리적으로 묶기 위해 하는 과정

1
# pvcreate /dev/vdb1 /dev/vdb2

각 장치를 volume으로 만들어 컨트롤할 수 있게 된다.

1
2
3
4
# pvs
  PV         VG Fmt  Attr PSize   PFree 
  /dev/vdb1     lvm2 ---  243.00m 243.00m
  /dev/vdb2     lvm2 ---  244.00m 244.00m

pvs명령으로 간략하게 확인할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# pvdisplay
  "/dev/vdb1" is a new physical volume of "243.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name              
  PV Size               243.00 MiB
  Allocatable           NO
  PE Size               0  
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               qDxeX0-e7my-KvdJ-m8Vs-lvq7-c0lv-wczCWl
  
  "/dev/vdb2" is a new physical volume of "244.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb2
  VG Name              
  PV Size               244.00 MiB
  Allocatable           NO
  PE Size               0  
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               aEQNQ1-nprf-fuHY-2U2d-puIi-2dlN-3lm5dM

pvdisplay 명령으로 모든 volume을 확인할 수 있다.

장치명(PV Name)을 보면 이해가 쉽다.

4. 볼륨 그룹

앞서 만든 볼륨을 묶어 그룹으로 만들 수 있다.

1
# vgcreate myvg /dev/vdb1 /dev/vdb2
1
2
3
# vgs
  VG   #PV #LV #SN Attr   VSize   VFree 
  myvg   2   0   0 wz--n- 480.00m 480.00m

vgs 명령으로 간략히 확인할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vgdisplay
  --- Volume group ---
  VG Name               myvg
  System ID            
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               480.00 MiB
  PE Size               4.00 MiB
  Total PE              120
  Alloc PE / Size       0 / 0  
  Free  PE / Size       120 / 480.00 MiB
  VG UUID               2NvDjK-sZyV-BK9C-OlE0-If4P-lLcA-WGn4dZ

VG Size: /dev/vdb1과 vdb2의 총합과 같다.

PE : LVM 개념으로 만들어진 디스크에서 사용되는 단위. 해당 단위만큼 디스크 용량을 축소/확대 할 수 있다.

5. 논리 볼륨

생성한 그룹은 하나의 물리 디스크와 같다고 볼 수 있다.

해당 디스크를 논리 볼륨이라는 단위로 파티셔닝 하여 쓸 수 있다.

1
# lvcreate -n mylv -L 400MB myvg

myvg (/dev/vdb1, vdb2의 합)에서 400MB 만큼만 잘라서 파티셔닝 한다.

1
2
3
# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 400.00m  

간략히 확인할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                Mrx6lv-G0O9-4bhX-r5ef-ISjw-d0aA-qQvDGl
  LV Write Access        read/write
  LV Creation host, time servera.lab.example.com, 2021-12-08 22:56:00 -0500
  LV Status              available
  # open                 0
  LV Size                400.00 MiB
  Current LE             100
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

눈여겨 볼 것은 LV Path 이다. 마치 실제 디스크 장치와 같다.

그리고, 여기도 PE같이 LE 개념이 있다.

1
2
3
4
5
6
7
# parted /dev/myvg/mylv print
Error: /dev/dm-0: unrecognised disk label
Model: Linux device-mapper (linear) (dm)                                 
Disk /dev/dm-0: 419MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

(가상의) 디스크 장치가 초기화 되지 않은 로그 내용.

1
2
3
4
5
6
7
8
9
10
11
# mkfs.xfs /dev/myvg/mylv
meta-data=/dev/myvg/mylv         isize=512    agcount=4, agsize=25600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=102400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=1368, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

xfs(또는 원하는) 타입으로 초기화.

1
2
3
4
5
6
7
8
9
# parted /dev/myvg/mylv print
Model: Linux device-mapper (linear) (dm)
Disk /dev/dm-0: 419MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End    Size   File system  Flags
 1      0.00B  419MB  419MB  xfs

xfs 타입으로 초기화하니, 파티셔닝된 디스크로써 모든 준비가 완료되었다.

1
# mount /path /dev/myvg/mylv

와 같이 마운트할 수 있다.