새소식

Linux

[Linux] LVM 사용하기

  • -

오늘은 LVM으로 Disk를 확장하는 방법에 대해 알아보겠습니다.

 

LVM이란?

LVM은 Logical Volume Management의 약자로 RAID와 같은 디스크 관리 방식의 일종입니다. 물리 디스크(Pysical Volume)를 하나의 볼륨 그룹(Volume Group)으로 만든 후 다시 논리적 볼륨(Logical Volume)으로 쪼개서 사용할 수 있습니다. 쉽게 말하자면, 여러개의 디스크를 합쳐 원하는데로 쪼개 사용할 수 있습니다.

 

LVM은 여러 디스크를 합쳐 사용할 수 있기 때문에 편하지만, 하드디스크가 고장나 복구할경우 매우 어렵기 때문에 Data server 등에서는 사용하는 것을 추천하지 않습니다.

 

자세한 내용은 다음을 참조해주세요. (직관적으로 설명이 잘 되어있습니다.)

https://kit2013.tistory.com/199

 

LVM(Logical Volumn Manager)개념과 설정

Fedora 21 설치하다가 Partitioning Scheme 목록에 LVM이라는게 있던데 궁금해서 정리 LVM(Logical Volume Manager) 이름에서 냄새가 나듯이 Logical Volume을 효율적이고 유연하게 관리하기 위한 커널의 한 부분이자

kit2013.tistory.com

 

위의 블로그 글에서 그림을 가져와 만들어봤습니다. LVM을 정말 잘 설명한 그림인 것 같습니다.

 

LVM

 

저는 Ubuntu 환경에서 2TB SSD, 4TB HDD를 합쳐 6TB를 한번에 사용해보려 합니다.

 

Pysical Volume (PV)

먼저 Pysical Volume을 확인해봅시다. 다른 설정이 없거나 새로 디스크를 추가했다면 디스크가 PV에도 추가되지 않았을 수 있습니다. 이런경우 디스크 자체를 아예 사용할 수 없으니 PV에 추가해줘야 합니다.

 

df -h

# Filesystem                         Size  Used Avail Use% Mounted on
# tmpfs                               13G  2.2M   13G   1% /run
# /dev/mapper/ubuntu--vg-ubuntu--lv   98G   29G   65G  31% /
# tmpfs                               63G     0   63G   0% /dev/shm
# tmpfs                              5.0M  4.0K  5.0M   1% /run/lock
# /dev/nvme0n1p2                     2.0G  340M  1.5G  19% /boot
# /dev/nvme0n1p1                     1.1G  6.1M  1.1G   1% /boot/efi
# tmpfs                               13G  8.0K   13G   1% /run/user/1000

 

ubuntu--vg-ubuntu--lv에는 100GB 정도 있고 나머지 용량들은 따로 표기가 안되는군요. 

lsblk

# NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
# loop0                       7:0    0  63.3M  1 loop /snap/core20/1822
# loop1                       7:1    0  63.5M  1 loop /snap/core20/2015
# loop2                       7:2    0 111.9M  1 loop /snap/lxd/24322
# loop3                       7:3    0  49.8M  1 loop /snap/snapd/18357
# loop4                       7:4    0  40.9M  1 loop /snap/snapd/20290
# sda                         8:0    0   3.6T  0 disk
# ├─sda1                      8:1    0    16M  0 part
# └─sda2                      8:2    0   3.6T  0 part
# nvme0n1                   259:0    0   1.9T  0 disk
# ├─nvme0n1p1               259:1    0     1G  0 part /boot/efi
# ├─nvme0n1p2               259:2    0     2G  0 part /boot
# └─nvme0n1p3               259:3    0   1.9T  0 part
#   └─ubuntu--vg-ubuntu--lv 253:0    0   100G  0 lvm  /

 

여길 보면 인식은 되는데 Mountpoint에 비어있는 부분들이 있습니다. 이 부분들을 추가해줘야 합니다. 다만 3.6TB 하드디스크는 2TB 이상이기 때문에 1.9TB SSD처럼 MBR 방식이 아닌 GPT 방식을 사용해줘야 합니다. 일단은 1.9TB의 OS가 설치되어 있는 SSD부터 모두 LV에 올려봅시다.

 

sudo pvscan


#  PV /dev/nvme0n1p3   VG ubuntu-vg       lvm2 [1.86 TiB / 1.76 TiB free]
#  Total: 1 [1.86 TiB] / in use: 1 [1.86 TiB] / in no VG: 0 [0   ]

 

pvscan은 pysical volume을 모두 보여주는 명령어입니다. 지금 보시면 lvm2 [1.86TiB / 1.76 TiB free]라고 적혀있는데 그렇다는 말은 1.76TiB의 드라이브가 놀고 있다는 뜻입니다. 사실 새로운 디스크를 추가하면 여기에도 인식이 안되는데 이 부분은 나중에 해보겠습니다.

sudo vgdisplay ubuntu-vg | grep "VG Size"

#  VG Size               1.86 TiB

 

VG Size는 1.86TiB로 SSD를 전부 인식합니다.그럼 이걸 100GB 밖에 없는 lv에 확장 시켜주면 1.86TB의 용량을 확보할 수 있습니다.

 

Logical Volume (LV)

아마 SSD의 전체 용량이 인식되지 않는 이유는 lv에 1.86TiB가 확장되어 있지 않기 때문일 것입니다. lvscan을 통해 확인해봅시다.

sudo lvscan

#  ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [100.00 GiB] inherit

 

예상대로 100GiB 밖에 인식이 되어 있지 않습니다. lv를 확장하여 모두 인식할수 있도록 해보겠습니다.

sudo lvextend -l +100%FREE -n /dev/ubuntu-vg/ubuntu-lv


#  Size of logical volume ubuntu-vg/ubuntu-lv changed from 100.00 GiB (25600 extents) to 1.86 TiB (487597 extents).
#  Logical volume ubuntu-vg/ubuntu-lv successfully resized.

sudo lvscan
#  ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [1.86 TiB] inherit

 

이제 1.86TiB가 모두 인식 되었습니다. 다만 df -h 같은 명령어로 확인해봐도 진짜로 1.86TB의 사용할 수 있는 용량이 확보되지는 않았을 것입니다. 시스템의 크기를 조절하기 위해 다음 명령어를 마지막으로 입력해줍니다.

 

sudo resize2fs /dev/ubuntu-vg/ubuntu-lv

# resize2fs 1.46.5 (30-Dec-2021)
# Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
# old_desc_blocks = 13, new_desc_blocks = 239
# The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 499299328 (4k) blocks long.

df -h

# Filesystem                         Size  Used Avail Use% Mounted on
# tmpfs                               13G  2.2M   13G   1% /run
# /dev/mapper/ubuntu--vg-ubuntu--lv  1.9T   29G  1.8T   2% /
# tmpfs                               63G     0   63G   0% /dev/shm
# tmpfs                              5.0M  4.0K  5.0M   1% /run/lock
# /dev/nvme0n1p2                     2.0G  340M  1.5G  19% /boot
# /dev/nvme0n1p1                     1.1G  6.1M  1.1G   1% /boot/efi
# tmpfs                               13G  8.0K   13G   1% /run/user/1000

 

이제 Os가 설치되어있는 디스크의 크기는 정확히 인식됩니다.

 

GPT 드라이브 설정

lsblk 명령어를 사용했을 때 /dev/sda에 3.6TB의 파티션이 있습니다. 하지만 2TB이상의 디스크는 MBR 방식이 아닌 GPT 방식을 사용해줘야 합니다. 근데 만약 lsblk에서 봤을 때 파티션의 type이 part라면 따로 설정해줄 필요는 없는것 같습니다. 만약 part로 되어 있다면 이부분은 넘어가셔도 됩니다.

다음 명령어로 GPT 설정을 해봅시다.

sudo parted /dev/sda
# GNU Parted 3.4
# Using /dev/sda
# Welcome to GNU Parted! Type 'help' to view a list of commands.

 

/dev/sda는 lsblk 명령어로 본 대용량 파티션을 써주면 됩니다.

print
# Model: ATA ST4000DM004-2CV1 (scsi)
# Disk /dev/sda: 4001GB
# Sector size (logical/physical): 512B/4096B
# Partition Table: gpt
# Disk Flags:

# Number  Start   End     Size    File system  Name                          Flags
#  1      17.4kB  16.8MB  16.8MB               Microsoft reserved partition  msftres
#  2      16.8MB  4001GB  4001GB               Basic data partition          msftdata

 

파티션을 초기화 하고 primary라는 파티션을 만들어줍니다.

mklabel gpt
# Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
# Yes/No? 

yes
print
# Model: ATA ST4000DM004-2CV1 (scsi)
# Disk /dev/sda: 4001GB
# Sector size (logical/physical): 512B/4096B
# Partition Table: gpt
# Disk Flags:

# Number  Start  End  Size  File system  Name  Flags

mkpart primary 0 4001GB
# Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
# Ignore/Cancel?

Ignore
print
# Model: ATA ST4000DM004-2CV1 (scsi)
# Disk /dev/sda: 4001GB
# Sector size (logical/physical): 512B/4096B
# Partition Table: gpt
# Disk Flags:

# Number  Start   End     Size    File system  Name     Flags
#  1      17.4kB  4001GB  4001GB               primary

 

참고로 mkpart primary 0 100%로 해도 괜찮다고 합니다. 만들어진 파티션을 lvm에 올려줍니다. number 1이 4001GB니 1을 올려보겠습니다.

set 1 lvm on
print
# Model: ATA ST4000DM004-2CV1 (scsi)
# Disk /dev/sda: 4001GB
# Sector size (logical/physical): 512B/4096B
# Partition Table: gpt
# Disk Flags:

# Number  Start   End     Size    File system  Name     Flags
#  1      17.4kB  4001GB  4001GB               primary  lvm

q
# Information: You may need to update /etc/fstab.

 

새로운 디스크 lvm 세팅

이렇게 추가한 디스크를 lvm에 올려봅시다. 이번에는 새로운 디스크이기 때문에 pysical volume부터 적용해야 합니다.

그런데 GPT로 변경하며 /dev/sda1이 이미 pysical volume에 적용되었을 것입니다.(fdisk -l 명령어로 확인했을 때 sda1 sda2 이런식으로 파티션이 있다면 pysical volume에 있는겁니다.) 만약 pysical volume이 없으면 아래와 같이 추가할수 있습니다.

sudo fdisk /dev/sda

# Welcome to fdisk (util-linux 2.37.2).
# Changes will remain in memory only, until you decide to write them.
# Be careful before using the write command.

n # 새로운 파티션 생성
1 # 파티션 number
<enter> # 파티션 시작 위치
<enter> # 파티션 끝 위치
w # fdisk 종료

 

pvscan을 해보면 아마 추가된 파티션이 등록되어 있지 않을것입니다. pv를 생성합시다.

sudo pvscan

#  PV /dev/nvme0n1p3   VG ubuntu-vg       lvm2 [1.86 TiB / 0    free]
#  Total: 1 [1.86 TiB] / in use: 1 [1.86 TiB] / in no VG: 0 [0   ]

sudo pvcreate /dev/sda1

#   Physical volume "/dev/sda1" successfully created.

sudo pvscan

#  PV /dev/nvme0n1p3   VG ubuntu-vg       lvm2 [1.86 TiB / 0    free]
#  PV /dev/sda1                           lvm2 [<3.64 TiB]
#  Total: 2 [<5.50 TiB] / in use: 1 [1.86 TiB] / in no VG: 1 [<3.64 TiB]

 

이제 앞서 했던대로 VG에 확장해주고 lv 볼륨도 확장해주면 됩니다.

sudo vgdisplay ubuntu-vg | grep "VG Size"
#   VG Size               1.86 TiB

sudo vgextend ubuntu-vg /dev/sda1
#   Volume group "ubuntu-vg" successfully extended

sudo vgdisplay ubuntu-vg | grep "VG Size"
#   VG Size               <5.50 TiB

sudo lvscan
#   ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [1.86 TiB] inherit

sudo lvextend -l +100%FREE -n /dev/ubuntu-vg/ubuntu-lv
#   Size of logical volume ubuntu-vg/ubuntu-lv changed from 1.86 TiB (487597 extents) to <5.50 TiB (1441458 extents).
#   Logical volume ubuntu-vg/ubuntu-lv successfully resized.

sudo lvscan
#   ACTIVE            '/dev/ubuntu-vg/ubuntu-lv' [<5.50 TiB] inherit

sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
# resize2fs 1.46.5 (30-Dec-2021)
# Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
# old_desc_blocks = 239, new_desc_blocks = 704
# The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 1476052992 (4k) blocks long.

 

df -h로 확인해봅시다.

df -h
# Filesystem                         Size  Used Avail Use% Mounted on
# tmpfs                               13G  2.2M   13G   1% /run
# /dev/mapper/ubuntu--vg-ubuntu--lv  5.5T   29G  5.2T   1% /
# tmpfs                               63G     0   63G   0% /dev/shm
# tmpfs                              5.0M  4.0K  5.0M   1% /run/lock
# /dev/nvme0n1p2                     2.0G  340M  1.5G  19% /boot
# /dev/nvme0n1p1                     1.1G  6.1M  1.1G   1% /boot/efi
# tmpfs                               13G  8.0K   13G   1% /run/user/1000

 


참고

https://moonoostar.tistory.com/84

 

[ubuntu] lvm 볼륨 사이즈 확장하기.

ubuntu 초기 설치 시 디스크 구성할 때 사이즈를 적게 설정하여 확장이 필요했다. $ df -Th Filesystem Size Used Avail Use% Mounted on udev 7.8G 0 7.8G 0% /dev tmpfs 1.6G 1.4M 1.6G 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 11G 11G 32

moonoostar.tistory.com

 

'Linux' 카테고리의 다른 글

[Linux] Ubuntu 시간 설정  (1) 2023.12.10
[Linux] 명령어 모음  (0) 2023.12.09
[Linux] Ubuntu 초기 Setting 가이드  (1) 2023.12.08
[Linux] Ubuntu Nvidia-driver / CUDA 설치  (1) 2023.10.27
[Linux] Ubuntu Server Security Setting  (0) 2023.03.10
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.