오늘은 LVM으로 Disk를 확장하는 방법에 대해 알아보겠습니다.
LVM이란?
LVM은 Logical Volume Management의 약자로 RAID와 같은 디스크 관리 방식의 일종입니다. 물리 디스크(Pysical Volume)를 하나의 볼륨 그룹(Volume Group)으로 만든 후 다시 논리적 볼륨(Logical Volume)으로 쪼개서 사용할 수 있습니다. 쉽게 말하자면, 여러개의 디스크를 합쳐 원하는데로 쪼개 사용할 수 있습니다.
LVM은 여러 디스크를 합쳐 사용할 수 있기 때문에 편하지만, 하드디스크가 고장나 복구할경우 매우 어렵기 때문에 Data server 등에서는 사용하는 것을 추천하지 않습니다.
자세한 내용은 다음을 참조해주세요. (직관적으로 설명이 잘 되어있습니다.)
https://kit2013.tistory.com/199
위의 블로그 글에서 그림을 가져와 만들어봤습니다. 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
'Linux' 카테고리의 다른 글
[Linux] Ubuntu 시간 설정 (1) | 2023.12.10 |
---|---|
[Linux] 명령어 모음 (0) | 2023.12.09 |
[Linux] Ubuntu 초기 Setting 가이드 (1) | 2023.12.08 |
[Linux] Ubuntu Nvidia-driver / CUDA 설치 (2) | 2023.10.27 |
[Linux] Ubuntu Server Security Setting (0) | 2023.03.10 |