스토리지 풀의 개념과 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 기반 풀에서 발생하며, 백엔드 스토리지 연결 문제나 서비스 미실행으로 인해 발생할 수 있습니다.
확인 사항:
- iSCSI 타겟 서버에서
tgtd또는tgt서비스가 실행 중인지 확인:
# systemctl status tgtd
- 비활성 상태의 풀이 있다면 재정의하거나 재등록 고려:
# 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