[Linux Storage] CentOS8 리눅스 시스템 설치 과정에서 직접 디스크 파티셔닝 하기 (Feat. LVM Thin Provisioning)
blog post
이번 포스트에서는 리눅스 시스템 설치 과정에서 진행되는 디스크 파티셔닝 방법에 대해 다뤄보도록 하겠습니다.
이전 포스트에서 CentOS는 "Automatic"과 "Custom" 방식의 디스크 파티셔닝을 지원한다고 했습니다. Automatic은 말 그대로 CentOS가 자동으로 시스템 파티션을 구성하는 방법으로, 사용자가 별 다른 수정 없이 디스크를 구성할 수 있습니다. 반면, Custom 방식은 사용자가 직접 원하는 대로 시스템 디스크 구조를 구성할 수 있습니다. 이번 포스트에서는 이 Custom 방식으로 직접 파티셔닝해 보도록 하겠습니다.
VM, 이미지 준비 및 기타 네트워크 설정 등은 모두 패스하고 파티셔닝 부분만 보겠습니다. 전체 설치 과정은 해당 포스트를 참고하시기 바랍니다:
Mac VMWare Fusion에서 CentOS 8 리눅스 새로 설치하기
또 리눅스 시스템의 파티션 관련 개념에 대해 궁금하신 분들은 제가 이전에 작성한 포스트를 보셔도 좋을 것 같습니다:
[Linux Storage] 리눅스 시스템 디스크 파티션 및 관련 개념 정리
우선 파티션을 어떻게 설계할지 고민해 봐야 합니다. 이 부분은 굉장히 중요한 부분입니다. 왜냐하면 어떻게 설계하느냐에 따라 추후 운영 과정에서 디스크 관리가 까다로워질 수도, 편해질 수도 있기 때문입니다.
그 시작으로, 우선 어떤 디렉토리에 볼륨을 마운트 할 것인가에 대해 고민해 봅니다. 일반적으로 아래 디렉토리는 거의 필수로 볼륨이 할당된다고 보면 좋을 것 같습니다.
- 루트 디렉토리 (/) : 전체 시스템이 기본적으로 사용할 공간.
- /boot : 리눅스 부팅에 필요한 커널, 모듈 등을 관리하는 공간. 보통 512MB면 충분하다고 하지만, 1GB를 주기도 함
다음으로 아래 디렉토리의 경우, 필요에 따라 선택적으로 줄 수 있습니다. 물론 대부분의 디렉토리에 선택적으로 줄 수 있지만, 다른 디렉토리는 루트 디렉토리(/) 의 공간을 공유해서 사용해도 무방합니다만, 아래 디렉토리는 지속적으로 데이터가 늘어날 가능성이 있는 디렉토리이기 때문에 고려되어야 합니다.
- /var : 리눅스 시스템에서 동작하는 서비스 대부분이 이 디렉토리에 로그를 저장하는데, 로그 데이터가 지속적으로 쌓일 것을 고려하여 별도로 볼륨을 할당함
- /home: 리눅스 서버에서 다수의 사용자가 이용할 경우, 사용자 데이터가 주로 저장되는 공간이므로 별도 볼륨을 할당
- /backup: 백업이 필요한 경우에 사용되며, 이 파티션을 사용할 경우에는 별도의 물리 디스크를 통채로 할당하는 것도 좋음
추가로 아래와 같이 스왑메모리를 위해서도 파티셔닝 합니다.
- swap: 메모리가 full 차는 경우, 일시적으로 디스크를 메모리처럼 활용하기 위한 공간.
또한 물리 파티션으로 마운트할지, 혹은 LVM을 만들고 구성할지, 파일시스템은 어떤 포맷을 사용할지 등이 고려되어야 합니다.
이러한 부분들을 고려하여 이번 포스트에서 아래와 같이 구성해 보도록 하겠습니다.
일단 스왑과 /boot 디렉토리에 각각 2GB, 1GB를 물리파티션으로 할당할 계획입니다. 또한 /, /home 디렉토리는 각각 10GB, 4GB로 할당하고 파일시스템은 ext4, xfs로 할당해 보도록 하겠습니다.
CentOS 설치 화면에서 "Installation Destination"으로 들어갑니다.
다음 화면에서 "Custom"을 선택하고 Done을 클릭합니다.
(디스크를 추가하여 파티셔닝하는 부분은 고려하지 않겠습니다)
다음 화면에서 보이는 "Standard Partition" 을 클릭해보면 아래와 같이 3가지 타입의 파티셔닝 타입을 볼 수 있습니다.
- Standard Partition: 리눅스 시스템의 일반적인 물리 파티셔닝 방식
- LVM: 볼륨 매니저를 통한 논리 파티셔닝 방식
- LVM Thin Provisioning: 실제 저장공간 사용량에 따른 볼륨 확장 방식
잠시 LVM 씬 프로비저닝에 대해 살펴보고 넘어가 보겠습니다.
표준 파티션이나 LVM 방식은 이전 포스트에서도 다룬 바 있고, 익숙하겠지만 LVM Thin Provisioning 방식은 다소 생소할 수 있습니다. 쉽게 설명하면, "저장공간에 데이터를 저장/삭제 할 때마다 실제 시스템에서 파티션 점유 공간을 유동적으로 늘리거나 줄이는 방식" 이라고 보면 됩니다.
LVM 파티션의 경우, 일단 논리 파티션이 생성되면 고정적으로 해당 공간 만큼 파티션이 차지하게 됩니다. 반면 씬 프로비저닝의 경우, 바로 해당 공간만큼 파티션이 차지하는 것이 아닌, 실제 그 파티션에 저장된 데이터의 양 만큼만 시스템에서 공간을 차지하게 됩니다.
예를 들어, 특정 사용자의 홈 디렉토리에 10GB 만큼 데이터를 할당했다고 가정해 보겠습니다. 만약 LVM 방식이라면 이 10GB 공간은 사전에 그 디렉토리에 할당됩니다. 내부에 데이터가 얼마나 있든 상관 없이 그 10GB 라는 공간은 온전히 사용자의 것이죠. 반면, 씬 프로비저닝의 경우, 사용자가 보기에는 10GB로 할당된 것처럼 보입니다만, 실제로 파티션이 확보한 디스크 공간은 데이터가 저장되기 전까지 아직 0입니다. 해당 파티션에 저장된 데이터의 양에 따라 파티션의 크기가 유동적으로 변경됩니다.
그러면 왜 이 LVM 씬 프로비저닝을 쓸까요? 속도때문입니다. 저용량의 디스크 파티셔닝은 처음 생성 단계에서 크게 문제가 안되겠지만 대용량으로 파티셔닝이 진행될 경우, LVM으로 진행되면 그 공간을 사전에 디렉토리로 할당되어야 하므로 속도가 오래걸립니다. 반면, 씬 프로비저닝의 경우, 처음 파티셔닝이 진행될 경우, 내부에 데이터가 없으므로 생성 속도도 빠르겠죠.
하지만 씬 프로비저닝의 경우, 데이터를 저장하고 제거하는 과정에서 실제 파티션이 디스크에서 차지하는 공간 역시 유동적으로 변경되어야 하기때문에 LVM 방식에 비해 느려질 수 밖에 없습니다.
다시 Manual Partitioning 단계로 돌아와서, 아래와 같이 "Standard Partition"을 선택하고 "+"를 클릭해 보겠습니다.
그러면 새로 추가할 마운트 지점을 입력하는 창이 나타납니다. 저는 먼저 스왑 공간부터 할당해 보겠습니다. 위와 같이 swap / 2GB를 입력하고 Add 를 클릭해보면 아래와 같이 추가되는 것을 볼 수 있습니다. 필요하면 label을 입력해도 됩니다.
다음으로 마찬가지로 "+" 클릭 후 /boot 디렉토리도 입력하고 Add해 줍니다.
다음으로 같은 방법으로 / 디렉토리를 입력해 줍니다.
앞서 설계 단계에서 LVM으로 루트 디렉토리를 구성하기로 했습니다. 따라서 아래와 같이 Device Type을 "LVM"으로 변경해 보겠습니다.
그러면 바로 옆에 Volume Group이 등장합니다. 초기에는 cl로 되어있는데 저는 이 그룹명을 아래와 같이 "myvg"로 변경해 보겠습니다. RAID나 사이즈 정책은 지정하지 않겠습니다.
다음으로는 /home 디렉토리를 추가해 줍니다.
저는 home 디렉토리의 경우 LVM Thin Provisioning으로 설정하고 볼륨 그룹을 myvg로 바꿔보겠습니다.
여유공간이 4GB 가량 남은 것을 볼 수 있습니다. Done을 클릭합니다.
최종적으로 해당 디스크에 대한 파티션이 적용될 구조를 리스트로 보여줍니다. 확인해보시고 문제가 없는 것으로 보인다면 "Accept Changes"를 클릭합니다.
이후 리눅스 설치 과정을 계속 진행합니다.
마지막으로 리눅스 시스템 설치를 모두 마친 후 파티셔닝이 잘 되었는지 간단하게 확인하고 포스팅을 마치도록 하겠습니다.
우선 df 명령를 통해 파티션 구성을 확인해 봅니다.
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 382M 0 382M 0% /dev
tmpfs tmpfs 399M 0 399M 0% /dev/shm
tmpfs tmpfs 399M 5.8M 393M 2% /run
tmpfs tmpfs 399M 0 399M 0% /sys/fs/cgroup
/dev/mapper/myvg-root ext4 9.2G 1.8G 7.0G 20% /
/dev/sda1 ext4 922M 139M 720M 17% /boot
/dev/mapper/myvg-home xfs 3.8G 60M 3.7G 2% /home
tmpfs tmpfs 80M 0 80M 0% /run/user/0
다음으로 스왑 파티션도 확인해 봅니다.
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 797 251 192 5 352 392
Swap: 1906 0 1906
스왑과 디렉토리에 파티션이 잘 마운트 된 것을 확인할 수 있습니다.