리눅스 환경에서 추가적으로 스토리지를 붙일 때에는 두 가지 방법이 있다. 만약 서버에 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 |