레닷
IT 이야기
레닷
전체 방문자
오늘
어제
  • 분류 전체보기 (46)
    • 파이썬 (9)
      • 코드 (6)
      • 에러 (3)
    • Linux (4)
    • Window (3)
    • AWS (23)
      • 3tier Architecture (8)
      • Service (10)
    • Azure (3)
      • domain & https (3)
    • 기타 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 에러
  • rds
  • Azure
  • 파이썬
  • https
  • DNS
  • gcp
  • AWS 3tier
  • aws
  • db
  • 서버
  • web
  • 도메인
  • 프로젝트
  • 인증서
  • SSL
  • SSL인증서
  • windows
  • 리눅스
  • 클라우드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
레닷

IT 이야기

Linux

[Linux] LVM 구성

2023. 12. 8. 13:52

리눅스 환경에서 추가적으로 스토리지를 붙일 때에는 두 가지 방법이 있다. 만약 서버에 500GB의 스토리지를 추가하고 싶을 때

1. 100GB크기의 스토리지 5개 부착 후 각각 마운트

2. 500GB크기의 스토리지 1개 부착 후 논리적으로 100GB씩 5개로 나누기

2번 과정이 지금 시작할 LVM(Logical Volume Manager)이다.

 

필자는 NCP환경에서 진행하였지만 온프레미스 환경이나 AWS 등 다른 플랫폼에서 해도 무방하다.

 

- 환경

OS : Ubuntu 20.04

추가 스토리지 : 30GB 1개

목표 : 10GB스토리지 3개를 만들어서 각 디렉토리에 10GB씩 할당

 

순서

PV(물리적 볼륨)생성 -> VG(볼륨 그룹)생성 -> LV(논리적 볼륨)생성 -> 포맷 -> 마운트

 

추가된 디스크 확인

root@dhkang-test:~# fdisk -l
Disk /dev/xvda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7354504e

Device     Boot Start       End   Sectors Size Id Type
/dev/xvda1       2048 104855551 104853504  50G 83 Linux


Disk /dev/xvdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

 

/dev/xvdb 라는 이름으로 30GB 추가된 것을 볼 수 있다. 해당 경로는 클라우드 플랫폼마다 나오는 게 다르니 본인 경로를 잘 확인해 놓자. 이 글에서는 /dev/xvdb로 갈 것이다.

 

추가된 디스크를 이용해 파티션 생성

fdisk /dev/xvdb를 하여 추가된 디스크에 대한 파티션을 생성하자. 만약 이 부분을 잘 모르겠다면 

fdisk /dev/xvdb명령어로 들어간 후 n하나만 입력하고 전부 엔터를 치면 된다.

Command (m for help) 문구가 나오면 w를 입력하여 나갈 수 있다.

root@dhkang-test:~# fdisk /dev/xvdb

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

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x942691f0.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-62914559, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559): 

Created a new partition 1 of type 'Linux' and of size 30 GiB.

Command (m for help): 


Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

root@dhkang-test:~#

 

여기까지 됐으면 다시 fdisk -l 명령어를 입력 해 새로운 디바이스가 추가되었는지 확인하자.

root@dhkang-test:~# fdisk -l
Disk /dev/xvda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7354504e

Device     Boot Start       End   Sectors Size Id Type
/dev/xvda1       2048 104855551 104853504  50G 83 Linux


Disk /dev/xvdb: 30 GiB, 32212254720 bytes, 62914560 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x942691f0

Device     Boot Start      End  Sectors Size Id Type
/dev/xvdb1       2048 62914559 62912512  30G 83 Linux
root@dhkang-test:~#

 

위 내용을 보면 /dev/xvdb1 이름으로 Device가 생성된 것을 확인할 수 있다.

 

이제 사전 준비작업은 끝났다. 본격적으로 시작해보자

 

1. PV(물리적 볼륨) 생성

pvcreate [생성된디바이스명] 으로 PV를 생성하자.

pvs, pvscan 명령어로 생성된 PV를 확인할 수 있다.

root@dhkang-test:~# pvcreate /dev/xvdb1 
  Physical volume "/dev/xvdb1" successfully created.
root@dhkang-test:~# pvs
  PV         VG Fmt  Attr PSize   PFree  
  /dev/xvdb1    lvm2 ---  <30.00g <30.00g
root@dhkang-test:~#

 

2. VG(볼륨 그룹) 생성

vgcreate [원하는VG이름] [생성된디바이스명] 으로 VG를 생성할 수 있다. VG이름은 크게 중요하지 않다.

vgs. vgscan 명령어로 생성된 VG를 확인할 수 있다. 여기서는 VG이름을 testvg로 하였다.

root@dhkang-test:~# vgcreate testvg /dev/xvdb1
  Volume group "testvg" successfully created
root@dhkang-test:~# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  testvg   1   0   0 wz--n- <30.00g <30.00g
root@dhkang-test:~#

 

3. LV(논리적 볼륨) 생성

lvcreate -n [할당할디렉토리명] -L [할당할용량] [볼륨그룹명]

user1이라는 디렉토리에 10GB를 할당한다. (여기서 적는 user1디렉토리는 가상디렉토리. 실제 아님)

root@dhkang-test:~# lvcreate -n user1 -L 10GB testvg 
  Logical volume "user1" created.
root@dhkang-test:~# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  user1 testvg -wi-a----- 10.00g
root@dhkang-test:~#

 

추가로 user2 디렉토리에도 10GB를 할당하겠다.

root@dhkang-test:~# lvcreate -n user2 -L 10GB testvg
  Logical volume "user2" created.
root@dhkang-test:~# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  user1 testvg -wi-a----- 10.00g                                                    
  user2 testvg -wi-a----- 10.00g                                                    
root@dhkang-test:~#

 

마지막으로 user3 디렉토리에도 10GB를 할당해야 하는데 이런 오류가 나온다.

root@dhkang-test:~# lvcreate -n user3 -L 10GB testvg
  Volume group "testvg" has insufficient free space (2559 extents): 2560 required.
root@dhkang-test:~#

 

해석을 해보면 용량이 2600이 필요한데 지금 사용 가능한 건 2599밖에 없다는 얘기이다. lvm을 구성할 때 정확히 10GB가 들어가는 것이 아닌 다른 데이터들까지 합쳐서 이러한 오류가 발생한다. 어차피 2599나 2600이나 큰 차이는 없으므로 이 명령어를 입력하자.  lvcreate -n [할당할디렉토리명]  -l +100%FREE [볼륨그룹명]

root@dhkang-test:~# lvcreate -n user3 -l +100%FREE testvg
  Logical volume "user3" created.
root@dhkang-test:~# lvs
  LV    VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  user1 testvg -wi-a-----  10.00g                                                    
  user2 testvg -wi-a-----  10.00g                                                    
  user3 testvg -wi-a----- <10.00g                                                    
root@dhkang-test:~#

 

정상적으로 생성된 것을 확인할 수 있다.

 

4. 포맷

LV가 어느 경로에 있는지 확인 후 해당 경로에 대해서 포맷을 하자

find / -name "찾을LV명"

root@dhkang-test:~# find / -name "user1"
/dev/testvg/user1
/user1
root@dhkang-test:~#

 

mkfs.ext4 [경로]

자동으로 진행된다.

root@dhkang-test:/# mkfs.ext4 /dev/testvg/user1
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: e001e22c-a3af-40a3-a909-11eae0208f95
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@dhkang-test:/# mkfs.ext4 /dev/testvg/user2
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 09f3aecb-a6ec-4919-be2f-227c82653a83
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@dhkang-test:/# mkfs.ext4 /dev/testvg/user3
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 2620416 4k blocks and 655360 inodes
Filesystem UUID: 29221cfa-2147-4875-80a4-57d2aa3a3b17
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

root@dhkang-test:/#

 

5. 마운트

포맷까지 하였으니 이제 실제 디렉토리를 생성하자. 여기서는 최상위 경로 밑에 user1, user2, user3 3개의 폴더를 만들 것이다.

root@dhkang-test:/# mkdir user1 user2 user3
root@dhkang-test:/# ls -l | grep -e user1 -e user2 -e user3
drwxr-xr-x   2 root root  4096 Dec  8 11:28 user1
drwxr-xr-x   2 root root  4096 Dec  8 11:28 user2
drwxr-xr-x   2 root root  4096 Dec  8 11:28 user3
root@dhkang-test:/#

 

위에서 찾았던 LV 경로를 /etc/fstab에 작성하자. 첫 번째 줄을 참고하자

[lV경로]	       [마운트할디렉토리]                ext4     defaults       0       0
/dev/testvg/user1       /user1          		ext4    defaults        0       0
/dev/testvg/user2       /user2   		        ext4    defaults        0       0
/dev/testvg/user3       /user3  		        ext4    defaults        0       0

 

다 하고 난 후 reboot나 init 6 명령어로 재부팅을 하자

 

5. 결과 확인

df -Th

root@dhkang-test:~# df -Th
Filesystem               Type      Size  Used Avail Use% Mounted on
udev                     devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                    tmpfs     391M  740K  391M   1% /run
/dev/xvda1               ext4       49G  2.8G   44G   6% /
tmpfs                    tmpfs     2.0G     0  2.0G   0% /dev/shm
tmpfs                    tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                    tmpfs     2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mapper/testvg-user1 ext4      9.8G   37M  9.3G   1% /user1
/dev/mapper/testvg-user3 ext4      9.8G   37M  9.3G   1% /user3
/dev/mapper/testvg-user2 ext4      9.8G   37M  9.3G   1% /user2
tmpfs                    tmpfs     391M     0  391M   0% /run/user/0
root@dhkang-test:~#

user1, user2, user3 디렉토리에 각각 9.8G씩 할당된 것을 확인할 수 있다.

반응형

'Linux' 카테고리의 다른 글

[Linux] Oracle Database 21c 설치  (0) 2024.05.30
[Linux] 인증서 없이 apache 웹 서버에 Https 적용  (0) 2024.02.06
[Linux] 리눅스 UTC KST 시간 변경  (0) 2023.06.30
    'Linux' 카테고리의 다른 글
    • [Linux] Oracle Database 21c 설치
    • [Linux] 인증서 없이 apache 웹 서버에 Https 적용
    • [Linux] 리눅스 UTC KST 시간 변경
    레닷
    레닷

    티스토리툴바