Wisdom’s Cloud
[Linux] [CentOS] LVM(1) 본문
지난 시간(2022.09.05 - [LINUX] - [Linux] [CentOS] 하드디스크와 파티션)에 하나의 물리적인 디스크를 여러 개의 논리적인 디스크로 분할하여 저장 공간을 효율적으로 활용하기 위해 파티션을 사용한다고 했다.
하지만 파티션보다 디스크를 더 유연하고 효율적으로 쓸 수 있도록 하는 방법이 있는데, 바로 LVM이다.
따라서 이번에는 LVM에 대해 알아보도록 하자.
LVM(Logical Volume Manager)란?
하드디스크를 파티션으로 나누어도 나눈 만큼의 고정적인 용량으로 사용하기 때문에 디스크 추가 및 제거 시에 별도로 복잡한 작업이 생기게 되고, 데이터 관리가 불편할 수 있다.
하지만 LVM은 이 파티션을 다시 논리적인 개념의 볼륨으로 나누어서 유동적으로 용량을 관리할 수 있다.
즉, 기존에는 파일시스템이 블록 디바이스에 직접 접근해서 읽고/쓰기를 했다면, LVM을 사용하면 파일시스템이 LVM이 만든 가상의 블록 디바이스에 읽고/쓰기를 하게 된다.
따라서 디스크 추가 및 제거 시에 물리적인 부분을 건드릴 필요 없이 여러 디스크를 하나로 사용하거나 하나의 디스크를 여러 디스크로 사용할 수 있는 것이다.
이러한 LVM을 사용하기 위해서는 LVM 구조와 용어에 대해 알아야 한다.
- PV(Physical Volume)는 파티션들을 LVM에서 사용할 수 있도록 변환한 것이다.
- PE(Physical Extent)는 PV를 구성하는 일정한 크기의 블록으로, 기본 크기는 4MB이다.
- VG(Volume Group)는 PV들의 집합으로, LV를 할당할 수 있는 공간이다. 따라서 VG 내에서 원하는대로 공간을 나누어 LV를 만들 수 있다.
- LV(Logical Volume)는 VG 내에서 원하는 만큼 할당되어서 만들어지는 공간으로, 논리적인 파티션이라고 생각하면 된다.
- LE(Logical Extent)는 LV를 구성하는 일정한 크기의 블록으로, PE와 1:1로 맵핑되기 때문에 크기가 동일하다.
따라서 PV → VG → LV 순으로 생성해야 한다.
지난 시간에 만든 파티션이 준비되었다면 이제 LVM을 생성해보자.
1. PV 생성
먼저 pvcreate 명령어를 통해 /dev/sda2, /dev/sda3, /dev/sda5를 LVM에서 사용할 수 있도록 변환한다.
생성한 PV는 pvdisplay 명령어로 확인할 수 있다.
[root@server-1-lab ~]# pvcreate /dev/sda2
Physical volume "/dev/sda2" successfully created.
[root@server-1-lab ~]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created.
[root@server-1-lab ~]# pvcreate /dev/sda5
Physical volume "/dev/sda5" successfully created.
2. VG 생성
vgcreate 명령어를 통해 생성한 PV들의 그룹을 만들어준다.
-s 옵션을 사용하면 PE 사이즈를 설정할 수 있고, 생성한 VG는 vgdisplay 명령어로 확인할 수 있다.
[root@server-1-lab ~]# vgcreate testvg -s 10M /dev/sda2 /dev/sda3 /dev/sda5
Volume group "testvg" successfully created
3. LV 생성
lvcreate 명령어를 통해 생성한 VG 내에서 LV를 생성한다.
-l 옵션을 사용하여 LE 개수를 지정할 수 있고, LE=PE=10M로 설정하였기 때문에 200M 크기의 LV가 생성되었다.
마찬가지로 lvdisplay 명령어로 생성한 LV를 확인할 수 있다.
[root@server-1-lab ~]# lvcreate -n test_lv -l 20 testvg
Logical volume "test_lv" created.
4. 파일시스템 생성
파일시스템을 생성하기 전에 잠깐 파일시스템이 무엇인지 알아보고 가자.
FileSystem이란?
파일시스템은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관하는 체제를 말한다.
쉽게 말해, 디스크가 도서관이고 파일이 책이라면 도서 검색대가 바로 파일시스템인 것이다.
리눅스에서는 디바이스도 파일로 관리하기 때문에 어떠한 방식으로 데이터를 저장하고 사용할지를 결정하는 파일시스템을 해당 디바이스에 생성해야 하고, 임의의 디렉터리에 디바이스를 연결하는 마운트를 해야 디바이스를 사용할 수 있다.
이러한 파일시스템의 종류에는 ext, ext2, ext3, ext4, xfs, nfs 등이 있다. 파일시스템 종류에 대해서는 다음에 더 자세히 알아보도록 하자.
이제 mkfs 명령어를 통해 생성한 LV에 ext4 유형의 파일시스템을 생성해보자.
-t 옵션을 사용하면 파일시스템의 유형을 지정할 수 있다.
[root@server-1-lab ~]# mkfs -t ext4 /dev/testvg/test_lv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=4096 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
마운트할 디렉터리를 생성한 후, mount 명령어를 통해 생성한 LV에 연결한다.
lsblk 명령어로 확인해보면 잘 마운트된 것을 확인할 수 있다.
[root@server-1-lab ~]# mkdir -p /exprots/test
[root@server-1-lab ~]# mount /dev/testvg/test_lv /exports/test
하지만 재부팅을 하면 마운트가 다시 해제되기 때문에 파일시스템을 영구적으로 마운트하기 위해서는 /etc/fstab 파일에 해당 내용을 작성해야 한다.
fstab은 file system table의 약자로, 파일시스템에 대한 마운트 정보들을 적는 테이블이다.
따라서 /etc/fstab 파일에 마운트 정보를 등록하면, 부팅 시 이 파일을 읽어 자동으로 마운트 시킨다.
작성한 마운트 정보의 내용은 다음과 같다.
- 파일시스템 디바이스명: /dev/testvg/test_lv
- 마운트 포인트: /exports/test
- 파일시스템 종류: ext4
- 옵션: _netdev (rw, suid, dev, exec, auto, nouser, async 등의 옵션이 있지만 특별한 옵션 설정이 필요하지 않으면 default를 사용한다. 여기서는 /dev/sda가 네트워크 디바이스이므로 시스템이 네트워크를 설정하고 연결하기 전에 마운트를 시도하여 무한 대기에 빠질 수 있어 _netdev 옵션을 설정하였다.)
- 덤프 설정: 0 (0으로 설정하면 백업이 불가능하고, 1로 설정하면 백업이 가능하다.)
- 파일 체크 설정: 0 (0으로 설정하면 무결성 검사를 진행하지 않고, 1로 설정하면 1순위로, 2로 설정하면 2순위로 검사를 진행한다.)
5. 결과
마운트까지 완료되었다면 아래의 그림대로 LVM을 잘 생성한 것이다. 다음에는 LVM 확장과 축소를 해보자. 😃
[참고 문서]
https://help.ubuntu.com/kubuntu/desktopguide/ko/directories-file-systems.html
'LINUX > Advanced' 카테고리의 다른 글
[Linux] [CentOS] swap (0) | 2022.09.08 |
---|---|
[Linux] [CentOS] LVM(2) (0) | 2022.09.07 |
[Linux] [CentOS] 하드디스크와 파티션 (1) | 2022.09.05 |
[Linux] [CentOS] 시스템 정보 수집 (0) | 2022.09.05 |
[Linux] [CentOS] ConditionFileIsExecutable=/etc/rc.d/rc.local was not met (0) | 2022.09.04 |