[Study51]성능 및 효율성 향상의 LVM(Logical Volume Manage) 1
Virtual Volume Technology은 논리 볼륨 관리자(LVM, Logical Volume Manager)와 Redundant Array of Inexpensive Disks(RAID)를 이용하여 물리적인 디스크를 논리적 볼륨 그룹으로 구성하는 기술입니다.
가상 볼륨 방식의 장점으로는 확장성, 안정성, 그리고 관리 용이성이 있습니다. 사용자는 이 방식을 이용하여 논리 볼륨 그룹 내에서 필요한 크기의 논리 볼륨을 할당하여 사용할 수 있습니다.
여러 개의 디스크를 하나의 논리적인 볼륨 그룹으로 구성할 수 있으며, 각 논리 볼륨은 독립적이므로, 하나의 디스크에도 여러 가지의 파일 시스템을 설치할 수 있습니다. 이는 사용자가 보다 유연하게 데이터를 관리할 수 있도록 도와줍니다.
또한, 용량 증설이 필요할 경우, 물리 볼륨만 추가하여 용량을 증설할 수 있습니다. 이렇게 함으로써, 사용자는 데이터의 증가에 대응하여 용량을 쉽게 확장할 수 있습니다. 데이터 용량이 감소하여 더 이상 많은 양의 저장 공간이 필요하지 않은 경우, 물리 볼륨 개수를 축소하여 용량을 감소시킬 수도 있습니다. 이렇게 함으로써, 사용자는 보다 효율적으로 데이터를 관리할 수 있습니다.
LVM 기술을 사용하는 것이 권장되며, 운영 체제에서도 LVM을 사용하도록 권장합니다. 또한, 데이터 공간에서는 Hardware RAID 기술을 사용하는 것이 좋습니다. 이러한 기술들을 적용하면, 사용자는 더욱 안정적이고 효율적으로 데이터를 관리할 수 있습니다.
LVM은 물리볼륨(PV), 볼륨그룹(VG), 논리볼륨(LV)로 구성된다. LVM을 사용하기 위해서는 물리적인 디스크(EX:/dev/sda)나 물리적인 파티션(EX:/dev/sda1)에 물리볼륨(PV)을 생성하여야 한다. 물리볼륨(PV)은 LVM 데이터 구조를 생성하며, 물리적인 디스크를 하나의 물리볼륨으로 간주하게 된다. 그리고 볼륨그룹(VG)에 포함시킬 수 있게 된다.
볼륨그룹(VG)는 하나 또는 그 이상의 물리볼륨(PV)을 포함하며, 논리볼륨(LV)을 생성할 수 있는 볼륨그룹의 집합이다. vg00은 부팅정보와 OS가 있는 root Volume Group으로, 변경이 불가능하다. 일반적으로 DB의 경우에는 vgdb##, 일반적인 파일시스템의 경우에는 vgfil##등으로 VG이름을 지정하여 사용한다.
논리볼륨(LV)은 논리적으로 할당한 공간으로 일반 파일시스템, swap or dump area, raw disk등으로 사용할 수 있도록 할당한 공간이다. 이를 생성하기 위해서는 VG내에 존재하는 물리볼륨(PV)들 중에서 사용하고자 하는 공간을 할당해야 한다. 논리적으로 할당한 공간인 논리볼륨을 운영 중에도 확장이 가능하며, 볼륨그룹에 속해 있는 또 다른 물리볼륨(PV)를 사용하여 확장할 수 있다. 그리고 필요하다면 크기를 변경하거나 다른 디스크로 데이터를 옮길 수 있다.
Volume Group vg00에 속한 Logical Volume lvol1, lvol2, lvol3은 각각 /stand, primary swap, / 디렉토리로 설정되어 있어, 변경이 불가능하다. 따라서 이러한 설정을 변경하고자 한다면 새로운 논리볼륨(LV)을 생성하고, 해당 논리볼륨(LV)에 새로운 파일시스템을 생성하여 사용하여야 한다.
■ PE (Physical Extent) : PV가 갖는 일정한 블록
디스크에 PV를 생성하게 되면, LVM은 주소를 지정할 수 있는 PE(Physical Extent)라는 단위로 각 물리 디스크를 나눈다. extent는 주소 0번부터 시작하여 1씩 증분하며 순차적으로 디스크에 할당되고, PE의 크기는 볼륨 그룹을 만들 때 구성할 수 있다. 그리고 각 PE의 크기는 default 값이 4MB이며, 이 값은 필요에 따라 볼륨 그룹을 생성 시 1MB에서 256MB 사이의 값으로 지정할 수 있다. 이렇게 나눈 PE를 이용해서 디스크에 블록을 할당할 수 있습니다. 그러나, PE의 크기를 더 작게 조정하여 더 많은 PE를 생성하거나, 반대로 더 크게 조정하여 더 적은 PE를 생성할 수 있습니다.
PE의 크기를 조정하는 이유는 다양합니다. 예를 들어, PE의 크기를 더 작게 조정하면 더 많은 PE를 생성할 수 있어서 더욱 정밀한 디스크 사용을 할 수 있습니다. 또한, PE의 크기를 더 크게 조정하게 되면, PE 하나가 더 많은 데이터를 저장할 수 있게 되어서, 디스크의 사용 효율을 더욱 높일 수 있습니다. 이렇게 PE의 크기를 조정할 때에는, 디스크에 저장된 데이터를 백업하고, PE의 크기를 조정한 후 데이터를 복원해야 합니다. 이렇게 함으로써, 데이터 손실의 위험을 최소화하고, 안전하게 PE의 크기를 조정할 수 있습니다.
■ LE (Logical Extent) : LV가 갖는 일정한 블록
디스크에 PV를 생성하고, 생성된 PV를 이용하여 VG(Volume Group)을 구성한 후 이 VG에 LV(Logical Volume)를 생성할 수 있다. LV의 기본 할당 단위를 LE(Logical Extent)라고 하는데, 이 LE는 PV 생성 시 나누어진 PE 영역과 Mapping된다. 따라서 PE의 크기가 4MB이면 LE의 크기도 4MB가 된다. 그리고 LV의 크기는 구성된 LE의 개수 또는 할당할 디스크 용량에 의해 결정된다. 이렇게 나눈 LE를 이용해서 논리 볼륨에 블록을 할당할 수 있습니다.
하지만, LE의 크기 또한 유연하게 조정할 수 있습니다. 필요한 경우, LE의 크기를 더 작게 조정하여 더 많은 LE를 생성하거나, 반대로 더 크게 조정하여 더 적은 LE를 생성할 수 있습니다. 이렇게 LE의 크기를 조정할 때에는, 디스크에 저장된 데이터를 백업하고, LE의 크기를 조정한 후 데이터를 복원해야 합니다.
또한, LV를 생성할 때에는 여러 PV를 통해 Stripe를 이룰 수 있습니다. 이는 LV를 생성할 때 Stripe 수를 지정함으로써 수행할 수 있습니다. LV를 확장할 때는 VG에 충분한 여유 공간이 있으면, 추가적인 LE를 할당하여 LV를 확장할 수 있습니다. 그러나 LV의 크기를 줄이는 경우에는 데이터를 이동하여 충분한 공간을 확보해야 할 수도 있습니다. 따라서 LE의 개념과 LV와의 관련성을 이해하는 것은 리눅스 시스템에서 디스크 공간을 관리하고 최적화하는 데 매우 중요합니다.
■ LVM과 Data Access
앞서 말한 바와 같이 LVM이 논리볼륨에 디스크 공간을 할당할 때 LVM은 주소 0에서 시작하여 각 디스크에 순차적으로 할당된 PE와 할당된 LE의 Mapping Table을 만든다. 따라서 LVM은 그림 9.3과 같이 실제 데이터가 물리 볼륨에 상주하는 위치와 상관없이 논리 볼륨을 Access 함으로써 데이터에 액세스 한다. 이렇게 만들어진 Mapping Table을 이용해서 데이터에 액세스를 합니다.
하지만, LVM을 사용하면 데이터에 액세스하기 위해 Mapping Table을 참조해야 하기 때문에, 액세스 속도가 느려질 수 있습니다. 이러한 문제를 해결하기 위해서는, LVM을 구성할 때 적절한 PE와 LE의 크기를 설정하고, 논리 볼륨을 구성할 때 논리적으로 연속적인 영역에 PE와 LE를 할당해야 합니다.
이와 더불어, LVM의 용량을 확장할 수 있는 여지를 두기 위해서는 디스크를 추가하는 것도 고려해볼 만합니다. 디스크 추가는 큰 용량을 추가할 수 있으며, 논리적으로 연속적인 영역에 PE와 LE를 할당할 수 있도록 구성하면 액세스 속도 또한 빠르게 유지할 수 있습니다. 또한, 디스크 추가를 통해 데이터의 백업과 복구도 보다 쉽게 할 수 있습니다. 그러므로, LVM 구성 시 디스크 추가를 고려하는 것이 좋습니다.
■ LVM과 root 파티션
논리 볼륨을 사용하면 루트, 부팅, 기본 스왑 또는 덤프와 같은 용도로 사용되는 경우, PE 영역은 연속적이어야 합니다. 따라서, 단일 물리 볼륨에 공백 없이 PE를 할당해야 합니다. 그러나 루트가 아닌 디스크의 논리 볼륨의 LE에 대응되는 PE는 물리 볼륨에서 연속적이지 않거나 전혀 다른 디스크에 상주할 수 있습니다. 이 결과, 한 논리 볼륨에 속한 파일 시스템이 둘 이상의 디스크에 상주할 수 있습니다. 이런 경우, 다른 디스크에 상주하는 파일 시스템에 액세스하는 데 추가적인 시간이 소요됩니다. 또한, 이러한 경우에는 데이터를 백업할 때 주의가 필요합니다.
하지만, 이러한 문제를 해결하기 위해서는 논리 볼륨을 미러링하여 여러 디스크에 중복된 데이터를 저장하는 방법을 사용할 수 있습니다. 이렇게 미러링된 논리 볼륨의 경우, 각 LE는 두 개 또는 세 개의 PE와 매핑됩니다. 예를 들어, 미러 사본이 하나인 경우에는 각 LE가 두 개의 PE에 매핑되는데 하나의 확장 영역은 원본에 대한 것이고 다른 하나는 미러 사본에 대한 것입니다. 이렇게 매핑된 블록을 이용해서 데이터를 저장합니다.
따라서, 논리 볼륨을 사용하는 것은 데이터 일관성과 신뢰성을 높일 수 있습니다. 이를 통해 데이터 손실이나 손상을 방지할 수 있으며, 데이터에 대한 액세스 속도를 향상시킬 수 있습니다. 우리는 이러한 이점을 최대한 활용하여 시스템을 구성하고 관리해야 합니다. 예를 들어, 미러링된 논리 볼륨을 사용하면 데이터가 여러 디스크에 중복 저장되므로 디스크 장애가 발생해도 데이터를 복구할 수 있습니다. 이러한 방식으로 시스템을 구성하면, 안정적인 운영이 가능합니다. 또한, 시스템의 성능을 높이기 위해서는 여러 디스크에 데이터를 분산하여 저장하는 것이 좋습니다. 이렇게 하면 데이터에 대한 액세스 속도가 향상되며, 시스템의 성능이 향상됩니다.
[참고] LVM의 PE(Physical Extent)와 LE(Logical Extent)의 Mapping
LVM(논리 볼륨 매니저)은 물리적인 스토리지 공간을 가상화하여 논리 볼륨을 만드는 것을 목적으로 하는 소프트웨어입니다. 이때, 논리 볼륨은 논리적인 단위인 LE(Logical Extent)로 구성됩니다. LVM을 사용하면, 논리 볼륨의 크기를 스토리지의 여유 공간에 맞게 동적으로 조정할 수 있으므로, 이는 스토리지 관리자가 스토리지를 효율적으로 사용하고 관리할 수 있도록 도와줍니다.
논리 볼륨의 구성 단위인 LE와 스토리지의 구성 단위인 PE 간에는 매핑이 필요합니다. 이를 위해, LVM은 매핑 테이블로 PV(Physical Volume)와 LV(Logical Volume)를 사용합니다. 이러한 매핑 테이블은 LVM에서 가장 기본적인 개념 중 하나입니다.
LVM을 이용하여 디스크를 효율적으로 관리하려면, PV를 생성하여 VG(Volume Group)을 구성한 후, 이 VG에 LV(Logical Volume)를 생성합니다. 이렇게 생성된 LV는 논리 볼륨에 매핑되는데, 이때 매핑에 사용되는 단위가 LE(Logical Extent)입니다. 이러한 LE는 PV에서 나누어진 PE와 Mapping되는데, PE와 LE 간의 Mapping은 LVM의 매핑 테이블을 이용하여 수행됩니다. 이렇게 생성된 LV는 논리 볼륨에서 블록을 할당 받아서 사용하는데, 이때 LE 단위로 할당을 받습니다.
따라서, LVM을 이용하여 디스크를 관리할 때에는, PV와 VG, LV의 생성에 대한 이해가 필요합니다. 이를 통해, 스토리지를 효율적으로 관리하고 사용할 수 있습니다.
LVM 1 / LVM 2
LVM은 Logical Volume Management의 약자로, 물리적 저장 장치 위에 추상화 계층을 제공하는 소프트웨어입니다. LVM은 시스템의 저장소 관리를 단순화하며, 논리적 볼륨의 생성과 크기 조정을 실시간으로 수행할 수 있습니다. 이를 위해 LVM은 LVM 1과 LVM 2의 두 가지 버전으로 제공됩니다.
LVM 1은 Redhat Enterprise Linux 3(RHEL 3) 및 CentOS 3.X와 호환되며, LVM 2는 Redhat Enterprise Linux 4(RHEL 4) 및 CentOS 4.X와 호환됩니다. 이렇게 호환성이 있는 버전을 선택하면 사용자는 시스템의 저장소를 효율적으로 관리할 수 있습니다.
LVM은 시스템에 더 많은 저장 공간을 추가해야 하는 경우나 백업 목적으로 논리적 볼륨의 스냅샷을 만들고자 할 때와 같은 많은 시나리오에서 유용합니다. 이는 시스템 관리자와 사용자 모두에게 매우 유용한 기능입니다. 또한, thin provisioning과 같은 기능을 제공하여 논리적 볼륨에 물리적으로 가능한 것보다 더 많은 저장 공간을 할당할 수 있습니다.
전반적으로, LVM은 리눅스 시스템에서 저장소를 관리하기 위한 강력한 도구입니다. 그리고 그 유연성으로 인해 시스템 관리자와 사용자 모두에게 인기가 있습니다. LVM은 시스템의 저장소 관리를 단순화하며, 논리적 볼륨의 생성과 크기 조정을 실시간으로 수행할 수 있습니다.
LVM은 최대 크기를 지원합니다(64비트 CPU) - 8 Exa Bytes까지 지원합니다(GB -> TB -> PB -> EB -> ZB -> YB).
다음은 LVM 작업에 대한 단계별 지침입니다:
- fdisk 명령을 사용하여 시스템 파티션 ID를 변경합니다. 이것은 물리적 볼륨 또는 PV를 생성하는 데 필요한 중요한 단계입니다.
- 시스템 파티션 ID가 변경되면 pvcreate 명령을 사용하여 PV를 생성할 수 있습니다. PV는 논리 볼륨을 만드는 데 사용될 하드 드라이브의 물리적 공간입니다.
- PV가 생성된 후, vgcreate 명령을 사용하여 VG 또는 볼륨 그룹을 생성합니다. VG는 하나 이상의 물리적 볼륨의 집합으로, 논리 볼륨을 만드는 데 사용됩니다.
- VG가 생성된 후, lvcreate 명령을 사용하여 LV 또는 논리 볼륨을 생성할 수 있습니다. LV는 VG의 공간으로 파일 시스템을 만드는 데 사용됩니다.
- LV가 생성되면 mkfs 명령을 사용하여 파일 시스템을 생성할 수 있습니다. 이 명령은 LV를 선택한 파일 시스템으로 포맷합니다.
- 마지막으로, mount 명령을 사용하여 파일 시스템을 마운트할 수 있습니다. 또한 /etc/fstab 파일에 추가하여 부팅시 자동으로 마운트되도록 할 수 있습니다.
이 지침을 따르면 LVM 작업을 성공적으로 완료할 수 있습니다.
[EX1] 4장의 디스크 추가 후 파티션 설정
이번 단계에서는 VMWare 환경에서 4장의 디스크를 추가하고, 각 디스크에 대한 파티션을 설정하겠습니다. 디스크 용량은 각각 1G입니다. 이를 위해 아래 절차를 참고하세요.
---- VMWare 환경 ----- (ㄱ) 서버 전원을 OFF합니다. # poweroff (ㄴ) 4장의 디스크를 추가합니다. 디스크 추가를 위해 VMWare > VM > Setting > Add > Hard Disk > Create a new virtual disk > SCSI > 1G > .... > FINISH를 차례로 클릭합니다. 이 과정을 통해 /dev/sdc, /dev/sdd, /dev/sde, /dev/sdf 경로에 4장의 디스크가 추가됩니다. (ㄷ) 서버 전원을 다시 ON합니다. 시스템이 부팅되고 로그인한 후, 다음 명령어를 입력하여 디스크가 정상적으로 추가되었는지 확인합니다. # ls –l /dev/sd?
위 과정에서는 디스크를 추가하고 각 디스크에 대한 파티션을 설정하는 방법을 자세히 설명하였습니다. 이제 당신은 이 과정을 더욱 자신 있게 수행할 수 있을 것입니다. 추가적으로, 이 과정에서 생길 수 있는 문제점과 대처법도 함께 학습할 수 있도록 추가적인 정보를 제공해 드리겠습니다.
디스크 확인
다음 명령어로 시스템에 연결된 디스크를 확인할 수 있습니다.
# ls –l /dev/sd?
디스크 파티션 설정(EX: /dev/sdc1, System Partition ID: 8e)
다음 명령어로 시스템 파티션 ID를 변경할 수 있습니다.
# fdisk /dev/sdc
파티션을 생성하기 위해서는 'n' 옵션을 선택하고, 파티션 번호 및 사이즈를 설정합니다. 이때, 시스템 파티션 ID를 8e로 설정해야 합니다. 이 작업을 마친 후, 'w' 옵션으로 변경된 내용을 저장합니다.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1): <ENTER>
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): <ENTER>
Using default value 130
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
위 명령어에서 나타나는 디스크 확인과 디스크 파티션 설정은 LVM 구성을 위한 필수적인 작업입니다. 이러한 작업을 다음 디스크들에 대해서도 반복하여 진행합니다.
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
다음으로, LVM 설정을 진행합니다. 먼저, 파티션에 대한 Physical Volume(PV)를 생성합니다.
# pvcreate /dev/sdc1
# pvcreate /dev/sdd1
# pvcreate /dev/sde1
# pvcreate /dev/sdf1
이어서, PV를 기반으로 Volume Group(VG)를 생성합니다.
# vgcreate vg_test /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
마지막으로, Logical Volume(LV)를 생성합니다. 이를 위해서는 LV의 이름과 크기를 지정해야 합니다.
# lvcreate -n lv_data -L 500M vg_test
LV를 생성한 후, 파일 시스템을 생성합니다.
# mkfs.ext4 /dev/vg_test/lv_data
파일 시스템 생성이 완료되면, 마운트 포인트를 생성하고 LV를 마운트합니다.
# mkdir /testmount
# mount /dev/vg_test/lv_data /testmount
이러한 작업을 통해, LVM 구성을 성공적으로 마칠 수 있습니다.
논리 볼륨 매니저 (LVM)를 생성하는 과정은 여러 단계로 나눌 수 있습니다. 먼저, fdisk 명령어를 사용하여 시스템 파티션 ID를 변경해야합니다. 그 다음, pvcreate 명령어를 사용하여 물리적 볼륨 (PV)을 생성해야합니다. 이어서, vgcreate 명령어를 사용하여 볼륨 그룹 (VG)을 생성할 수 있습니다. 볼륨 그룹이 생성되면 lvcreate 명령어를 사용하여 논리 볼륨 (LV)을 생성할 수 있습니다. 논리 볼륨을 생성 한 후 mkfs 명령어를 사용하여 파일 시스템을 생성해야합니다. 마지막으로, mount 명령어를 사용하여 새로운 논리 볼륨을 마운트하고 부팅시 자동 마운트를 위해 /etc/fstab 파일에 추가해야합니다.
[1] 물리적인 볼륨 생성(PV: Physical Volume)
생성한 디스크를 LVM으로 사용하기 위한 선처리 작업으로 물리적인 볼륨으로 생성해 준다.
[명령어 형식]
PV 생성 명령어는 다음과 같습니다:
# pvcreate /dev/sda1
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
# pvcreate /dev/sd[abc]1
# pvcreate /dev/sda /dev/sdb /dev/sdc
PV 삭제 명령어는 다음과 같습니다:
# pvremove /dev/sda1
# pvremove /dev/sda1 /dev/sdb1 /dev/sdc1
# pvremove /dev/sd[abc]1
또한 PV 정보 확인을 위한 명령어는 다음과 같습니다:
# pvs
# pvscan
# pvdisplay (# pvdisplay /dev/sdc1)
# lvmdiskscan
이러한 명령어들을 적절히 사용함으로써 PV를 생성, 삭제하고 정보를 확인할 수 있습니다.
[EX] PV 생성 및 삭제 실습
PV 생성 및 확인
PV를 생성하기 전에, fdisk 명령을 사용하여 시스템 파티션 ID를 변경해야 합니다. 이것은 물리적 볼륨 또는 PV를 생성하는 데 필요한 중요한 단계입니다.
# fdisk /dev/sdc
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list all codes): 8e
Command (m for help): w
위와 같이 fdisk 명령을 사용하여 시스템 파티션 ID를 변경하면, 이제 pvcreate 명령을 사용하여 PV를 생성할 수 있습니다. PV는 논리 볼륨을 만드는 데 사용될 하드 드라이브의 물리적 공간입니다.
# pvcreate /dev/sdc1
위와 같이 명령을 입력하면, /dev/sdc1 경로에 PV가 생성됩니다. 이 명령을 사용하면 여러 개의 PV를 만들 수 있습니다.
# pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
위와 같이 명령을 입력하면, /dev/sdc1, /dev/sdd1, /dev/sde1 경로에 각각의 PV가 생성됩니다. 생성된 PV를 확인하려면, pvs 명령을 사용합니다.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 lvm2 -- 1019.72M 1019.72M
/dev/sdd1 lvm2 -- 1019.72M 1019.72M
/dev/sde1 lvm2 -- 1019.72M 1019.72M
위와 같이 명령을 입력하면, 생성된 모든 PV의 정보가 나열됩니다. pvscan 명령을 사용하여 시스템에서 사용 가능한 모든 PV를 검색할 수도 있습니다.
# pvscan
PV /dev/sdc1 lvm2 [1019.72 MB]
PV /dev/sdd1 lvm2 [1019.72 MB]
PV /dev/sde1 lvm2 [1019.72 MB]
Total: 3 [2.99 GB] / in use: 0 [0 ] / in no VG: 3 [2.99 GB]
위와 같이 명령을 입력하면, 시스템에서 사용 가능한 모든 PV의 정보가 나열됩니다. pvdisplay 명령을 사용하여 특정 PV의 정보를 확인할 수도 있습니다.
# pvdisplay /dev/sdc1
위와 같이 명령을 입력하면, /dev/sdc1 경로에 있는 PV의 정보가 나열됩니다.
PV 삭제 및 확인
PV를 삭제하려면, pvremove 명령을 사용합니다.
# pvremove /dev/sdc1 /dev/sdd1 /dev/sde1
위와 같이 명령을 입력하면, /dev/sdc1, /dev/sdd1, /dev/sde1 경로에 있는 모든 PV가 삭제됩니다. 이 명령은 하나 이상의 PV를 삭제할 수 있습니다. PV를 삭제한 후, pvs 명령을 사용하여 삭제된 PV가 있는지 확인할 수 있습니다.
# pvs
#
위와 같이 명령을 입력하면, 구성된 정보가 없다는 결과가 출력됩니다.
PV 다시 생성
PV를 다시 생성하려면, pvcreate 명령을 다시 사용하면 됩니다.
# pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1
위와 같이 명령을 입력하면, /dev/sdc1, /dev/sdd1, /dev/sde1 경로에 각각의 PV가 생성됩니다. 이 명령은 하나 이상의 PV를 생성할 수 있습니다.
[2] 물리적인 볼륨 그룹생성(VG: Volume Group)
물리적인 볼륨을 생성하는 것은 데이터 저장과 관리를 위한 중요한 작업입니다. 물리적인 볼륨의 생성이 완료되면 각각의 물리적인 볼륨을 하나의 그룹으로 생성해 주어야 합니다. 그룹 생성을 통해 볼륨들을 논리적으로 관리할 수 있으며, 필요에 따라 새로운 볼륨을 추가하거나 제거할 수 있습니다. 또한 그룹을 생성하게 되면 볼륨들 간에 데이터를 공유할 수 있게 되어 데이터의 이동이나 복사 등의 작업이 더욱 효율적으로 이루어질 수 있습니다.
[명령어 형식]
LVM(Logical Volume Manager)은 Linux에서 논리적인 볼륨을 관리하기 위해 사용되며, VG(Volume Group) 생성 및 디스크 추가/제거 등의 작업이 필요합니다. 이러한 작업은 시스템의 유연성을 높여주고 용량 관리를 효율적으로 할 수 있도록 합니다. 또한, VG를 이용하면 논리 볼륨을 묶어서 사용할 수 있기 때문에 데이터 관리가 더욱 용이해집니다.
VG 생성 명령어는 다음과 같습니다.
# vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1
또는
# vgcreate vg1 /dev/sd[cde]1
VG 삭제를 하기 위해서는 해당 VG의 모든 논리 볼륨을 먼저 삭제해야 합니다. VG를 삭제하는 명령어는 다음과 같습니다.
# vgremove vg1
또는
# vgremove /dev/vg1
VG에 디스크를 추가하거나 제거할 수 있습니다. 이 작업을 수행하면 VG에 포함된 논리 볼륨 크기가 자동으로 조정됩니다.
VG에 디스크를 추가하는 명령어는 다음과 같습니다.
# vgextend vg1 /dev/sdf1
VG에서 디스크를 제거하는 명령어는 다음과 같습니다.
# vgreduce vg1 /dev/sdf1
VG의 이름을 변경할 수도 있습니다. VG 이름을 변경하는 명령어는 다음과 같습니다.
# vgrename /dev/vg1 /dev/vg1_backup
또는
# vgrename vg1 vg1_backup
VG에 대한 정보를 확인할 수 있는 명령어는 다음과 같습니다.
# vgs
또는
# vgscan
또는
# vgdisplay (# vgdisplay vg1)
이러한 명령어들을 이용하면 VG 생성, 삭제, 디스크 추가/제거, 이름 변경, 정보 확인 등의 작업을 수행할 수 있습니다. 이를 통해 더욱 효율적인 용량 관리 및 데이터 관리가 가능해집니다.
LVM을 이용하여 물리적인 파티션 작업보다 더욱 유연하게 용량을 관리할 수 있습니다. 파티션 작업과 LVM 작업의 차이점을 알아보자면, 파티션 작업은 물리적인 파티션을 생성하여 사용하는 방식이고, LVM 작업은 논리적인 볼륨을 생성하여 사용하는 방식입니다. LVM을 이용하면 논리 볼륨을 묶어서 사용할 수 있기 때문에 데이터 관리가 더욱 용이해집니다.
마지막으로, LV(Logical Volume) 생성, F/S(File System) 생성, 마운트 작업 등의 추가적인 작업을 수행하면서 LVM을 보다 효율적으로 사용할 수 있습니다. 이러한 작업들은 시스템의 유연성을 높여주고 용량 관리를 효율적으로 할 수 있도록 합니다.
[EX] VG 생성 및 삭제 실습
VG 생성 및 확인
먼저, vgcreate 명령어를 사용하여 VG를 생성합니다. 아래는 vgcreate 명령어를 이용하여 VG vg1을 생성하는 예시입니다.
# vgcreate vg1 /dev/sdc1 /dev/sdd1 /dev/sde1 (# vgcreate vg1 /dev/sd[cde]1)
VG가 성공적으로 생성되었다면, pvs 명령어로 PV들이 VG에 할당되었는지 확인할 수 있습니다.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sdd1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sde1 vg1 lvm2 a- 1016.00M 1016.00M
vgdisplay 명령어를 사용하여 VG 정보를 확인할 수도 있습니다.
# vgdisplay (# vgdisplay vg1)
생성된 VG 삭제 및 확인
vgremove 명령어를 사용하여 VG를 삭제할 수 있습니다. 아래는 vg1을 삭제하는 예시입니다.
# vgremove vg1 (# vgremove /dev/vg1)
VG가 성공적으로 삭제되었다면, vgs 명령어로 구성된 정보가 없는 것을 확인할 수 있습니다.
# vgs
No volume groups found
VG 다시 생성
VG를 다시 생성하려면 vgcreate 명령어를 사용하면 됩니다. 아래는 /dev/sd[cde]1 파티션들을 이용하여 VG vg1을 생성하는 예시입니다.
# vgcreate vg1 /dev/sd[cde]1
VG가 성공적으로 생성되었다면, vgs 명령어로 VG 정보를 확인할 수 있습니다.
# vgs
VG #PV #LV #SN Attr VSize VFree
vg1 3 0 0 wz--n- 2.98G 2.98G
새로운 PV 생성 후 VG에 추가 및 확인
새로운 PV를 생성하려면 pvcreate 명령어를 사용하면 됩니다. 아래는 /dev/sdf1 파티션을 이용하여 PV를 생성하는 예시입니다.
# pvcreate /dev/sdf1
새로운 PV가 성공적으로 생성되었다면, pvs 명령어로 PV 정보를 확인할 수 있습니다.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sdd1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sde1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sdf1 lvm2 -- 1019.72M 1019.72M
이제 vgextend 명령어를 사용하여 VG에 새로운 PV를 추가합니다.
# vgextend vg1 /dev/sdf1
새로운 PV가 성공적으로 추가되었다면, pvs 명령어로 PV 정보를 확인할 수 있습니다.
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sdd1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sde1 vg1 lvm2 a- 1016.00M 1016.00M
/dev/sdf1 vg1 lvm2 a- 1016.00M
[3] 논리 볼륨 생성(LV: Logical Volume)
논리 볼륨을 생성하는 방법은 다양합니다. 논리 볼륨은 LVM에서 생성하는 파티션이므로, 용량 단위 또는 PE 수를 통해 생성할 수 있습니다. 이를 통해 단일 파티션 또는 다중 파티션으로 나눌 수 있습니다. 예를 들어, 서버의 디스크 용량이 부족할 경우, 논리 볼륨을 여러 개 생성하여 필요한 공간을 할당할 수 있습니다. 이 외에도 논리 볼륨의 크기를 동적으로 조절할 수 있기 때문에, 유연한 용량 관리가 가능합니다.
[명령어 형식]
LV(논리 볼륨)을 생성, 삭제, 변경하고, 크기를 늘리거나 줄이는 방법을 알아보자.
LV 생성하는 방법은 여러 가지가 있다. 일반적으로 사용되는 명령어는 아래와 같다.
# lvcreate -L 10G vg1 /* LV 이름 자동 생성 : lvol#(용량 10G) */
# lvcreate -L 1500M -n lv1 vg1
# lvcreate -L 1500 -n lv1 vg1 /* 용량 단위가 없으면 MB */
# lvcreate -l 60%VG -n lv1 vg1
# lvcreate -l 100%FREE -n lv1 vg1
LV 삭제는 간단하게 아래와 같이 할 수 있다.
# lvremove /dev/vg1/lv1
LV 이름을 변경하는 방법은 다음과 같다.
# lvrename /dev/vg1/lv1 /dev/vg1/lv2
# lvrename vg1 lv1 lv2 /* vg1(lv1 -> lv2) */
LV 공간을 늘리는 방법은 아래와 같다.
# lvextend -L 12G /dev/vg1/lv1 /* lv1 용량을 12G로 맞춤 */
# lvextend -L +1G /dev/vg1/lv1 /* lv1 용량을 1G 만큼 추가 */
# lvextend -l +100%FREE /dev/vg1/lv1
LV 공간을 줄이는 방법은 아래와 같다.
# lvreduce -L -3G /dev/vg1/lv1
# lvreduce -l -3 /dev/vg1/lv1 /* lv1 용량을 3 LE(Logical Extend)만큼 감소 */
LV 정보를 확인하는 방법은 여러 가지가 있다. 일반적으로 사용되는 명령어는 아래와 같다.
# lvs
# lvscan
# lvdisplay
위와 같이 LV를 생성, 삭제, 변경하고 크기를 늘리거나 줄이는 방법을 알아봤다. 이제 LV를 사용하여 다양한 작업을 수행할 수 있다.
[EX] LV 생성 및 삭제
LVM(Logical Volume Manager)은 물리적인 하드웨어를 추상화한 논리적인 볼륨을 생성하여, 유연하게 스토리지를 관리할 수 있는 기술입니다. 이를 이용하면, 동적으로 스토리지를 추가하거나 삭제하는 등의 작업이 가능해지므로, 시스템 운영자에게 매우 유용한 기술입니다.
LVM을 구성하기 위해서는, 물리적인 하드웨어를 파티션으로 나누고, 이를 묶어 Volume Group(VG)를 생성합니다. 이후, VG 내부에서 논리적인 볼륨인 Logical Volume(LV)를 생성하여 파일 시스템을 생성하고, 마운트를 수행합니다.
이번 실습에서는, LV 생성, 삭제, 이름 변경, 용량 늘리기, 용량 줄이기 등의 작업을 실습해보겠습니다.
LV 생성 및 확인
먼저, VG를 생성한 후 LV를 생성해보겠습니다. 다음과 같은 명령어를 수행합니다.
# vgcreate 명령어로 VG 생성
vgcreate vg1 /dev/sdb /dev/sdc /dev/sdd
# lvcreate 명령어로 LV 생성
lvcreate -L 1G -n lv1 vg1
lvcreate -L 1G -n lv2 vg1
lvcreate -l 100%FREE -n lv3 vg1
# 생성한 LV 확인
lvs
위 명령어를 통해, VG를 생성하고, 각각 1GB 용량의 LV 2개와, 나머지 남은 공간을 할당받는 LV 1개를 생성했습니다. 이후, 생성한 LV를 확인하기 위해 lvs 명령어를 입력합니다.
LV 삭제 및 확인
생성한 LV를 삭제하고, 삭제한 LV를 확인해보겠습니다.
# lvremove 명령어로 LV 삭제
lvremove /dev/vg1/lv3
# 삭제한 LV 확인
lvs
위 명령어를 통해, 생성했던 LV 중 하나를 삭제한 후, 다시 lvs 명령어를 입력하여 삭제한 LV가 제대로 삭제되었는지 확인합니다.
LV 이름 변경
생성한 LV의 이름을 변경해보겠습니다.
# lvrename 명령어로 LV 이름 변경
lvrename /dev/vg1/lv2 /dev/vg1/lv2_backup
# 변경한 LV 이름 확인
lvs
# 이름을 다시 변경하고 싶으면 다음 명령어를 입력하세요.
lvrename vg1 lv2_backup lv2
위 명령어를 통해, 생성했던 LV 중 하나의 이름을 변경한 후, 다시 lvs 명령어를 입력하여 변경한 이름이 제대로 반영되었는지 확인합니다.
LV 용량 늘리기 및 확인
생성한 LV의 용량을 늘리고 확인해보겠습니다.
# lvextend 명령어로 LV 용량 늘리기
lvextend -L +500M /dev/vg1/lv1
# 늘인 LV 용량 확인
lvs
위 명령어를 통해, 생성했던 LV 중 하나의 용량을 500MB 늘린 후, 다시 lvs 명령어를 입력하여 용량이 제대로 반영되었는지 확인합니다.
LV 크기 줄이기
생성한 LV의 용량을 줄이고 확인해보겠습니다.
# lvreduce 명령어로 LV 용량 줄이기
lvreduce -L -500M /dev/vg1/lv2
# 줄인 LV 용량 확인
lvs
위 명령어를 통해, 생성했던 LV 중 하나의 용량을 500MB 줄인 후, 다시 lvs 명령어를 입력하여 용량이 제대로 반영되었는지 확인합니다.
이렇게 LVM을 이용하여 스토리지를 관리할 수 있는 다양한 작업들을 실습해보았습니다. LVM은 유연하게 스토리지를 관리할 수 있는 기술이므로, 시스템 운영자에게 필수적인 기술 중 하나입니다.
[EX] 파일시스템 생성 실습
Step 1: LVM 논리 볼륨 확인
먼저, # lvs 명령어를 사용하여 논리 볼륨을 확인합니다.
# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv1 vg1 -wi-a- 1.49G
lv2 vg1 -wi-a- 524.00M
위 결과에서, vg1 볼륨 그룹에 lv1과 lv2 논리 볼륨이 있는 것을 알 수 있습니다.
Step 2: 파일 시스템 생성
다음으로, mkfs 명령어를 사용하여 파일 시스템을 생성합니다. 이때, mkfs.ext4 또는 mkfs -t ext4 명령어를 사용하여 ext4 파일 시스템을 생성할 수 있습니다.
# mkfs.ext4 /dev/vg1/lv1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
195072 inodes, 390144 blocks
19507 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
16256 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
위 예시에서는 vg1 볼륨 그룹의 lv1 논리 볼륨에 대한 파일 시스템을 생성하였습니다. mkfs.ext4 /dev/vg1/lv2 명령어를 사용하여 lv2 논리 볼륨에 대한 파일 시스템을 생성할 수 있습니다.
참고: mkfs 명령어는 파일 시스템을 생성할 때 사용됩니다. 이 명령어는 mke2fs와 함께 사용되어 ext2, ext3, ext4 파일 시스템을 생성할 수 있습니다.
[EX] 마운트 실습
마운트 생성 실습 예제 코드
이 예제 코드에서는 LVM을 사용하여 마운트를 생성하는 방법을 단계별로 설명합니다. 이를 위해서는 먼저 /lv1 및 /lv2 디렉토리를 생성합니다. 이후, 논리 볼륨을 마운트하기 위해 다음과 같은 코드를 입력합니다.
# mkdir /lv1 /lv2
# mount /dev/vg1/lv1 /lv1
# mount /dev/vg1/lv2 /lv2
마운트가 정상적으로 이루어졌는지 확인하기 위해 df -h 명령어를 입력합니다. 아래와 같은 결과가 출력됩니다.
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 17G 3.4G 12G 22% /
/dev/sda8 487M 11M 451M 3% /data1
/dev/sda7 487M 11M 451M 3% /data2
/dev/sda6 487M 11M 451M 3% /data3
/dev/sda5 487M 11M 451M 3% /data4
/dev/sda3 487M 11M 451M 3% /home
tmpfs 506M 0 506M 0% /dev/shm
/dev/sdb1 1004M 49M 904M 6% /testmount
/dev/mapper/vg1-lv1 1.5G 35M 1.4G 3% /lv1
/dev/mapper/vg1-lv2 516M 17M 474M 4% /lv2
그 다음, 부팅 시 자동으로 마운트되도록 /etc/fstab 파일을 수정합니다.
# vi /etc/fstab
...
/dev/mapper/vg1-lv1 /lv1 ext4 defaults 1 3
/dev/vg1/lv2 /lv2 ext4 defaults 1 3
마지막으로, 마운트를 해제하려면 다음과 같이 입력합니다.
# umount /lv1
# umount /lv2
이 예제 코드를 참고하여 LVM을 사용하여 마운트를 성공적으로 생성할 수 있습니다. 추가적인 질문이 있으시면 언제든지 문의해주세요.
■ 물리적인 파티션 작업과 LVM 작업 비교
디스크를 구성하는 방법은 크게 두 가지가 있습니다. 하나는 이전 작업 방식으로 물리적인 파티션 작업, 파일시스템 작업, 마운트 작업의 각 단계를 거쳐서 디스크를 구성하는 방법이고, 다른 하나는 LVM 작업 방식입니다.
이전 작업 방식 단계
- 파티션 작업파티션을 생성하기 위해서 fdisk를 이용합니다.
- # fdisk /dev/sdc
- 파일시스템 작업파일시스템을 생성하기 위해서 mkfs.ext4 명령어를 이용합니다.
- # mkfs.ext4 /dev/sdc1
- 마운트 작업마운트 작업을 하기 위해서 /etc/fstab 파일을 수정하고, 디렉토리를 생성한 후 mount 명령어를 이용하여 마운트합니다.
- # vi /etc/fstab # mkdir /oracle # mount /oracle
LVM 작업 방식
LVM 작업 방식은 파티션 작업, 파일시스템 작업, 마운트 작업의 각 단계를 묶어서 한번에 처리하는 방법입니다.
- 파티션 작업파티션을 생성하기 위해서 fdisk를 이용하고, 그 다음 해당 파티션을 물리적인 볼륨으로 만들기 위해서 pvcreate 명령어를 이용합니다. 그리고, vgcreate 명령어를 이용하여 볼륨 그룹을 생성하고, lvcreate 명령어를 이용하여 논리 볼륨을 생성합니다.
- # fdisk /dev/sdc # pvcreate /dev/sdc1 # vgcreate vg1 /dev/sdc1 # lvcreate -l 100%FREE -n lv1 vg1
- 파일시스템 작업파일시스템을 생성하기 위해서 mkfs.ext4 명령어를 이용합니다.
- # mkfs.ext4 /dev/vg1/lv1
- 마운트 작업마운트 작업을 하기 위해서 /etc/fstab 파일을 수정하고, 디렉토리를 생성한 후 mount 명령어를 이용하여 마운트합니다.
- # vi /etc/fstab # mkdir /oracle # mount /oracle
위의 방법으로 디스크를 구성하면, 데이터를 효율적으로 관리할 수 있습니다.