KVM 환경에서 스토리지 풀 관리 방법

스토리지 풀의 개념과 KVM 내 역할

KVM은 가상 머신에서 사용할 수 있는 스토리지를 효율적으로 관리하기 위해 스토리지 풀(storage pool)이라는 논리적 단위를 사용합니다. 이는 로컬 디렉터리, iSCSI 타겟, NFS 공유 폴더 또는 기타 네트워크 기반 저장 장치를 포함할 수 있으며, 물리적인 저장 공간을 추상화하여 가상 머신이 쉽게 디스크 이미지를 할당받고 관리할 수 있도록 돕습니다.

libvirt가 제공하는 virsh 도구를 통해 스토리지 풀의 생성, 활성화, 조회, 제거 등의 작업을 수행할 수 있습니다.

기존 스토리지 풀 확인

현재 시스템에 등록된 모든 스토리지 풀을 확인하려면 다음 명령어를 사용합니다:

# virsh pool-list --all
 Name                 State      Autostart
-------------------------------------------
 08-standard          inactive   yes
 12-standard          inactive   yes
 android-x86-4.4      inactive   yes

특정 풀의 상세 정보를 XML 형식으로 출력하려면:

# virsh pool-dumpxml 08-standard
<pool type='dir'>
  <name>08-standard</name>
  <uuid>7e833c26-ee26-4ab3-85c6-a1184d790969</uuid>
  <capacity unit='bytes'>0</capacity>
  <allocation unit='bytes'>0</allocation>
  <available unit='bytes'>0</available>
  <source/>
  <target>
    <path>/data/zgytest/hk/windows/08-standard</path>
  </target>
</pool>

보다 가독성 높은 형태로 상태를 확인하려면:

# virsh pool-info 08-standard
Name:           08-standard
UUID:           7e833c26-ee26-4ab3-85c6-a1184d790969
State:          inactive
Persistent:     yes
Autostart:      yes

새로운 스토리지 풀 생성

디렉터리 기반 스토리지 풀을 생성하기 위해선 먼저 해당 풀의 구성 정보를 담은 XML 파일을 작성해야 합니다. 예를 들어 /home/poolB.xml 파일을 아래와 같이 정의합니다:

<pool type='dir'>
  <name>poolB</name>
  <target>
    <path>/home/img</path>
    <permissions>
      <mode>0700</mode>
      <owner>-1</owner>
      <group>-1</group>
    </permissions>
  </target>
</pool>

생성 전에 대상 경로가 존재하고 접근 권한이 적절히 설정되어 있는지 확인하세요:

# mkdir -p /home/img
# chmod 700 /home/img

XML 파일을 기반으로 풀을 생성합니다:

# virsh pool-create /home/poolB.xml
Pool poolB created from /home/poolB.xml

생성 후 상태를 확인하면 다음과 같습니다:

# virsh pool-list
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 poolB                active     no

자세한 용량 정보도 확인 가능합니다:

# virsh pool-info poolB
Name:           poolB
UUID:           1e03e100-1f12-f004-1ee2-ae739eda746c
State:          running
Persistent:     no
Autostart:      no
Capacity:       451.83 GB
Allocation:     100.22 GB
Available:      351.61 GB

스토리지 풀의 구성 파일 위치

KVM은 정의된 스토리지 풀의 메타데이터를 /etc/libvirt/storage/ 디렉터리 아래에 XML 형식으로 저장합니다. 예를 들어 poolB가 영구적으로 등록되면 해당 디렉터리에 poolB.xml 파일이 생성됩니다. 이러한 설정은 호스트 재부팅 후에도 유지되며, 자동 시작 여부는 Autostart 속성에 의해 결정됩니다.

스토리지 풀 삭제

사용하지 않는 풀을 제거하려면 먼저 활성 상태인 경우 비활성화해야 합니다:

# virsh pool-destroy poolB
Pool poolB destroyed

그 후 영구적인 정의까지 완전히 제거하려면:

# virsh pool-undefine poolB
Pool poolB has been undefined

이제 /etc/libvirt/storage/poolB.xml 파일은 삭제되며, 재부팅 후에도 복구되지 않습니다.

일반적인 오류 및 해결 방법

에러 메시지: Requested operation is not valid: storage pool is not active

이는 주로 iSCSI 기반 풀에서 발생하며, 백엔드 스토리지 연결 문제나 서비스 미실행으로 인해 발생할 수 있습니다.

확인 사항:

  1. iSCSI 타겟 서버에서 tgtd 또는 tgt 서비스가 실행 중인지 확인:
# systemctl status tgtd
  1. 비활성 상태의 풀이 있다면 재정의하거나 재등록 고려:
# virsh pool-list --all
Name               State         Autostart
-------------------------------------------
 File               active        yes
 iSCSI-UGLY_004     inactive      yes

문제가 지속된다면 기존 정의를 제거하고 새롭게 등록:

# virsh pool-undefine iSCSI-UGLY_004
Pool iSCSI-UGLY_004 has been undefined

태그: KVM libvirt virsh storage pool iSCSI

5월 25일 14:20에 게시됨