5장. 고급 논리 볼륨 관리
LVM에는 다음과 같은 고급 기능이 포함되어 있습니다.
- 스냅샷: point-in-time copies of logical volumes (LV)
- 캐싱 - 느린 스토리지의 캐시로 더 빠른 스토리지를 사용할 수 있습니다.
- 사용자 정의 씬 풀 생성
5.1. 논리 볼륨 스냅샷 관리
스냅샷은 특정 시점에서 다른 LV의 콘텐츠를 미러링하는 논리 볼륨(LV)입니다.
5.1.1. 논리 볼륨 스냅샷 이해
스냅샷을 생성할 때 다른 LV의 지정 시간 사본 역할을 하는 새 LV를 생성합니다. 처음에는 스냅샷 LV에 실제 데이터가 포함되어 있지 않습니다. 대신 스냅샷 생성 시 원래 LV의 데이터 블록을 참조합니다.
스냅샷의 스토리지 사용량을 정기적으로 모니터링하는 것이 중요합니다. 스냅샷이 할당된 공간의 100%에 도달하면 유효하지 않습니다.
스냅샷을 완전히 채워지기 전에 스냅샷을 확장해야 합니다. 이 작업은 lvextend
명령을 사용하거나 /etc/lvm/lvm.conf
파일을 통해 자동으로 수행할 수 있습니다.
- 두꺼운 LV 스냅샷
- 원래 LV의 데이터가 변경되면 COW(Copy-On-Write) 시스템은 변경되지 않은 원본 데이터를 변경하기 전에 스냅샷에 복사합니다. 이렇게 하면 변경 사항이 발생할 때만 스냅샷이 크기가 증가하여 스냅샷 생성 시 원본 볼륨의 상태를 저장합니다. 두꺼운 스냅샷은 어느 정도의 스토리지 공간을 미리 할당해야 하는 LV의 유형입니다. 이 양은 나중에 확장 또는 축소할 수 있지만 원래 LV에 어떤 유형의 변경 사항을 고려해야 합니다. 이렇게 하면 공간을 너무 많이 할당하거나 너무 적게 할당하면 스냅샷 크기를 자주 늘려야 합니다.
- thin LV 스냅샷
씬 스냅샷은 씬 프로비저닝된 기존 LV에서 생성된 LV의 유형입니다. 씬 스냅샷은 추가 공간을 미리 할당할 필요가 없습니다. 처음에 원래 LV와 해당 스냅샷은 모두 동일한 데이터 블록을 공유합니다. 원래 LV를 변경하면 새 데이터를 다른 블록에 쓰는 반면 스냅샷은 원본 블록을 계속 참조하여 스냅샷 생성 시 LV의 데이터에 대한 지정 시간 보기를 유지합니다.
씬 프로비저닝은 필요에 따라 디스크 공간을 할당하여 스토리지를 효율적으로 최적화하고 관리하는 방법입니다. 즉, 각 LV에 대량의 스토리지를 미리 할당할 필요 없이 여러 LV를 생성할 수 있습니다. 스토리지는 씬 풀의 모든 LV에서 공유되므로 리소스를 보다 효율적으로 사용할 수 있습니다. 씬 풀은 필요에 따라 해당 LV에 공간을 할당합니다.
- 씩과 씬 LV 스냅샷 중에서 선택
- 씩 또는 씬 LV 스냅샷 중 하나를 선택하는 것은 스냅샷을 생성하는 LV 유형에 따라 직접 결정됩니다. 원래 LV가 두꺼운 LV인 경우 스냅샷이 두꺼운 것입니다. 원래 LV가 씬된 경우 스냅샷이 씬됩니다.
5.1.2. 씩의 논리 볼륨 스냅샷 관리
두꺼운 LV 스냅샷을 생성하는 경우 스냅샷의 스토리지 요구 사항과 수명을 고려해야 합니다. 원래 볼륨에 대한 예상 변경 사항에 따라 충분한 스토리지를 할당해야 합니다. 스냅샷에는 의도한 수명 동안 변경 사항을 캡처하기에 충분한 크기가 있어야 하지만 원래 LV의 크기를 초과할 수 없습니다. 낮은 변경 속도를 예상하는 경우 스냅샷 크기가 10%-15%로 충분할 수 있습니다. 변경 속도가 높은 LV의 경우 30% 이상을 할당해야 할 수 있습니다.
스냅샷을 완전히 채워지기 전에 스냅샷을 확장해야 합니다. 스냅샷이 할당된 공간의 100%에 도달하면 유효하지 않습니다. lvs -o lv_name,data_percent,origin
명령을 사용하여 스냅샷 용량을 모니터링할 수 있습니다.
5.1.2.1. 씩의 논리 볼륨 스냅샷 생성
lvcreate
명령을 사용하여 두꺼운 LV 스냅샷을 생성할 수 있습니다.
사전 요구 사항
- 관리 액세스.
- 물리 볼륨이 생성되어 있습니다. 자세한 내용은 LVM 물리 볼륨 생성을 참조하십시오.
- 볼륨 그룹을 생성했습니다. 자세한 내용은 LVM 볼륨 그룹 생성 을 참조하십시오.
- 논리 볼륨을 생성했습니다. 자세한 내용은 LVM 논리 볼륨 생성을 참조하십시오.
절차
스냅샷을 생성할 LV를 확인합니다.
# lvs -o vg_name,lv_name,lv_size VG LV LSize VolumeGroupName LogicalVolumeName 10.00g
스냅샷 크기는 LV의 크기를 초과할 수 없습니다.
두꺼운 LV 스냅샷을 생성합니다.
# lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName
SnapshotSize 를 스냅샷에 할당할 크기(예: 10G)로 바꿉니다. SnapshotName 을 스냅샷 논리 볼륨에 부여하려는 이름으로 교체합니다. VolumeGroupName 을 원래 논리 볼륨이 포함된 볼륨 그룹의 이름으로 교체합니다. LogicalVolumeName 을 스냅샷을 생성할 논리 볼륨의 이름으로 교체합니다.
검증
스냅샷이 생성되었는지 확인합니다.
# lvs -o lv_name,origin LV Origin LogicalVolumeName SnapshotName LogicalVolumeName
추가 리소스
-
lvcreate(8)
및lvs(8)
도움말 페이지
5.1.2.2. 논리 볼륨 스냅샷 수동 확장
스냅샷이 할당된 공간의 100%에 도달하면 유효하지 않습니다. 스냅샷을 완전히 채워지기 전에 스냅샷을 확장해야 합니다. 이 작업은 lvextend
명령을 사용하여 수동으로 수행할 수 있습니다.
사전 요구 사항
- 관리 액세스.
절차
볼륨 그룹, 논리 볼륨, 스냅샷의 소스 볼륨, 사용 백분율 및 크기를 나열합니다.
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 82.00 5.00g
씩 프로비저닝된 스냅샷을 확장합니다.
# lvextend --size +AdditionalSize VolumeGroupName/SnapshotName
additional Size 를 스냅샷에 추가할 공간(예: +1G)으로 바꿉니다. VolumeGroupName 을 볼륨 그룹의 이름으로 교체합니다. SnapshotName 을 스냅샷 이름으로 교체합니다.
검증
LV가 확장되었는지 확인합니다.
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 68.33 6.00g
5.1.2.3. 씩의 논리 볼륨 스냅샷 자동 확장
스냅샷이 할당된 공간의 100%에 도달하면 유효하지 않습니다. 스냅샷을 완전히 채워지기 전에 스냅샷을 확장해야 합니다. 이 작업은 자동으로 수행할 수 있습니다.
사전 요구 사항
- 관리 액세스.
절차
-
root
사용자로 선택한 편집기에서/etc/lvm/lvm.conf
파일을 엽니다. snapshot_autoextend_threshold
및snapshot_autoextend_percent
행의 주석을 제거하고 각 매개변수를 필수 값으로 설정합니다.snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
snapshot_autoextend_threshold
는 LVM이 스냅샷을 자동 연장하기 시작하는 백분율을 결정합니다. 예를 들어 매개 변수를 70으로 설정하면 LVM에서 스냅샷이 70% 용량에 도달할 때 스냅샷을 확장하려고 합니다.snapshot_autoextend_percent
는 임계값에 도달하면 스냅샷을 확장해야 하는 백분율로 지정합니다. 예를 들어 매개 변수를 20으로 설정하면 스냅샷이 현재 크기의 20%가 증가합니다.- 변경 사항을 저장하고 편집기를 종료합니다.
lvm2-monitor
를 다시 시작하십시오.# systemctl restart lvm2-monitor
5.1.2.4. 씩의 논리 볼륨 스냅샷 병합
두꺼운 LV 스냅샷을 스냅샷이 생성된 원래 논리 볼륨에 병합할 수 있습니다. 병합 프로세스는 원래 LV가 스냅샷이 생성될 때의 상태로 되돌리는 것을 의미합니다. 병합이 완료되면 스냅샷이 제거됩니다.
원본과 스냅샷 LV 간의 병합이 활성 상태이면 지연됩니다. LV가 다시 활성화되고 사용되지 않는 경우에만 실행됩니다.
사전 요구 사항
- 관리 액세스.
절차
LV, 해당 볼륨 그룹 및 해당 경로를 나열합니다.
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName SnapshotName VolumeGroupName /dev/VolumeGroupName/SnapshotName
LV가 마운트된 위치를 확인합니다.
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName
/dev/VolumeGroupName/LogicalVolumeName 을 논리 볼륨의 경로로 바꿉니다. /dev/VolumeGroupName/SnapshotName 을 스냅샷 경로로 바꿉니다.
LV를 마운트 해제합니다.
# umount /LogicalVolume/MountPoint # umount /Snapshot/MountPoint
/LogicalVolume/MountPoint 를 논리 볼륨의 마운트 지점으로 바꿉니다. /Snapshot/MountPoint 를 스냅샷의 마운트 지점으로 바꿉니다.
LV를 비활성화합니다.
# lvchange --activate n VolumeGroupName/LogicalVolumeName # lvchange --activate n VolumeGroupName/SnapshotName
VolumeGroupName 을 볼륨 그룹의 이름으로 교체합니다. LogicalVolumeName 을 논리 볼륨의 이름으로 바꿉니다. SnapshotName 을 스냅샷 이름으로 교체합니다.
두꺼운 LV 스냅샷을 원본으로 병합합니다.
# lvconvert --merge SnapshotName
SnapshotName 을 스냅샷 이름으로 교체합니다.
LV를 활성화합니다.
# lvchange --activate y VolumeGroupName/LogicalVolumeName
VolumeGroupName 을 볼륨 그룹의 이름으로 교체합니다. LogicalVolumeName 을 논리 볼륨의 이름으로 바꿉니다.
LV를 마운트합니다.
# umount /LogicalVolume/MountPoint
/LogicalVolume/MountPoint 를 논리 볼륨의 마운트 지점으로 바꿉니다.
검증
스냅샷이 제거되었는지 확인합니다.
# lvs -o lv_name
추가 리소스
-
lvconvert(8)
,lvs(8)
도움말 페이지
5.1.3. thin 논리 볼륨 스냅샷 관리
씬 프로비저닝은 스토리지 효율성이 우선 순위인 경우에 적합합니다. 스토리지 공간 동적 할당은 초기 스토리지 비용을 줄이고 사용 가능한 스토리지 리소스 사용을 극대화합니다. 동적 워크로드가 있거나 스토리지가 시간이 지남에 따라 증가하는 환경에서 씬 프로비저닝을 통해 유연성을 높일 수 있습니다. 스토리지 공간을 크게 사전 할당할 필요 없이 스토리지 시스템을 변화하는 요구에 맞게 조정할 수 있습니다. 동적 할당을 사용하면 모든 LV의 총 크기가 씬 풀의 물리적 크기를 초과할 수 있으므로 모든 공간이 동시에 활용되는 것은 아닙니다.
5.1.3.1. 씬 논리 볼륨 스냅샷 생성
lvcreate
명령을 사용하여 thin LV 스냅샷을 생성할 수 있습니다. thin LV 스냅샷을 생성할 때 스냅샷 크기를 지정하지 마십시오. size 매개변수를 포함하면 대신 두꺼운 스냅샷이 생성됩니다.
사전 요구 사항
- 관리 액세스.
- 물리 볼륨이 생성되어 있습니다. 자세한 내용은 LVM 물리 볼륨 생성을 참조하십시오.
- 볼륨 그룹을 생성했습니다. 자세한 내용은 LVM 볼륨 그룹 생성 을 참조하십시오.
- 논리 볼륨을 생성했습니다. 자세한 내용은 LVM 논리 볼륨 생성을 참조하십시오.
절차
스냅샷을 생성할 LV를 확인합니다.
# lvs -o lv_name,vg_name,pool_lv,lv_size LV VG Pool LSize PoolName VolumeGroupName 152.00m ThinVolumeName VolumeGroupName PoolName 100.00m
thin LV 스냅샷을 생성합니다.
# lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName
SnapshotName 을 스냅샷 논리 볼륨에 부여하려는 이름으로 교체합니다. VolumeGroupName 을 원래 논리 볼륨이 포함된 볼륨 그룹의 이름으로 교체합니다. ThinVolumeName 을 스냅샷을 생성할 thin 논리 볼륨의 이름으로 바꿉니다.
검증
스냅샷이 생성되었는지 확인합니다.
# lvs -o lv_name,origin LV Origin PoolName SnapshotName ThinVolumeName ThinVolumeName
추가 리소스
-
lvcreate(8)
및lvs(8)
도움말 페이지
5.1.3.2. 씬 논리 볼륨 스냅샷 병합
thin LV 스냅샷을 생성된 원래 논리 볼륨에 병합할 수 있습니다. 병합 프로세스는 원래 LV가 스냅샷이 생성될 때의 상태로 되돌리는 것을 의미합니다. 병합이 완료되면 스냅샷이 제거됩니다.
사전 요구 사항
- 관리 액세스.
절차
LV, 해당 볼륨 그룹 및 해당 경로를 나열합니다.
# lvs -o lv_name,vg_name,lv_path LV VG Path ThinPoolName VolumeGroupName ThinSnapshotName VolumeGroupName /dev/VolumeGroupName/ThinSnapshotName ThinVolumeName VolumeGroupName /dev/VolumeGroupName/ThinVolumeName
원래 LV가 마운트된 위치를 확인합니다.
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName
VolumeGroupName/ThinVolumeName 을 논리 볼륨의 경로로 바꿉니다.
LV를 마운트 해제합니다.
# umount /ThinLogicalVolume/MountPoint
/ThinLogicalVolume/MountPoint 를 논리 볼륨의 마운트 지점으로 바꿉니다. /ThinSnapshot/MountPoint 를 스냅샷의 마운트 지점으로 바꿉니다.
LV를 비활성화합니다.
# lvchange --activate n VolumeGroupName/ThinLogicalVolumeName
VolumeGroupName 을 볼륨 그룹의 이름으로 교체합니다. ThinLogicalVolumeName 을 논리 볼륨의 이름으로 바꿉니다.
thin LV 스냅샷을 원본과 병합합니다.
# lvconvert --mergethin VolumeGroupName/ThinSnapshotName
VolumeGroupName 을 볼륨 그룹의 이름으로 교체합니다. ThinSnapshotName 을 스냅샷 이름으로 교체합니다.
LV를 마운트합니다.
# umount /ThinLogicalVolume/MountPoint
/ThinLogicalVolume/MountPoint 를 논리 볼륨의 마운트 지점으로 바꿉니다.
검증
원래 LV가 병합되었는지 확인합니다.
# lvs -o lv_name
추가 리소스
-
lvremove(8)
,lvs(8)
도움말 페이지