이 질문을 어떻게 표현해야할지 잘 모르겠으므로 (따라서 제목이 좋지 않습니다), 내가하려는 일의 예를 들어 보겠습니다.
내 (오래된) Xen 호스트에서 LVM 파일 시스템을 각 게스트에 직접 제공 할 수 있습니다. 이러한 파일 시스템은 실제로 호스트에서 작성 및 포맷되어 직접 전달됩니다. 예를 들어 별도의 tmp 및 swap 파티션을 사용하는 호스트 중 하나에 대해 다음과 같이 저장소를 정의합니다.
디스크 = [
‘phy : / dev / vg1 / guest1-swap, sda1, w’,
‘phy : / dev / vg1 / guest1-disk, sda2, w’,
‘phy : / dev / vg1 / guest1-tmp, sda3 , w ‘,
]
따라서 guest1-swap은 스왑 파티션으로 포맷되고 guest1-disk 및 guest1-tmp는 ext4로 포맷되며 게스트의 관점에서 단순히 / dev / sda 아래에 3 개의 포맷 된 파티션으로 표시됩니다.
(이것은 많은 작업처럼 들리지만 , 거의 모든 것을 자동화 하는 굉장한 xen-tools 와 같은 프로비저닝 스크립트가 있습니다 ).
이것은 실제로 유용한 기능을 제공하며, 그중 두 가지는 KVM을 알아내는 데 특히 관심이 있습니다.
-
호스트 OS에서 게스트 파일 시스템을 마운트하십시오 . 게스트가 실행되는 동안에도 언제든지 게스트 파일 시스템의 읽기 전용 마운트를 수행 할 수 있습니다. 게스트가 실행되는 동안 기존 볼륨의 LVM 스냅 샷을 만들 수 있다는 장점이 있습니다. 이렇게하면 호스트에서 모든 게스트를 실행하는 동안 중앙에서 백업 할 수 있습니다.
-
온라인 볼륨 크기 조정 . 볼륨에는 표준 Linux 파일 시스템이 포함되어 있으므로 온라인 상태 일 때 lvextend와 resize2fs를 함께 사용하여 게스트 파일 시스템을 키울 수 있습니다.
현재 Xen 호스트를 대체 할 KVM 호스트를 설정하고 있습니다. 젠 설정과 유사 내가 직접 파일 시스템 액세스를 제공하기 위해 LVM을 활용하고 있습니다 만, KVM은 / QEMU는 점에서 다르게 작동 항상 심지어 LVM 볼륨에, 손님 용 이미지 파일을 만듭니다. 게스트의 관점에서 볼 때이 파티션은 파티션되지 않은 디스크로 간주되며 파티션 레이블을 적용한 다음 파티션과 파일 시스템을 만드는 것은 게스트의 책임입니다.
게스트 관점에서는 괜찮지 만 서버 / 관리 관점에서는 내가 설명한 Xen 설정보다 훨씬 유연하지 않은 것 같습니다. 나는 여전히 KVM을 처음 사용하기 때문에 (희망스럽게) 무언가가 빠져있을 수 있습니다.
KVM 호스트에서 이전 백업 솔루션을 다시 구현하려고 할 때이 문제가 발생했으며 게스트의 파일 시스템 중 하나를 마운트하려고 할 때 mount 명령이 막혔습니다. 따라서 현재 해결해야 할 문제이지만 크기 조정에 대해서도 걱정이되었습니다. 문제가 어느 시점에 나올 것이라고 확신하기 때문입니다.
내 질문은 다음과 같습니다.
-
Xen 설정에 대해 설명한대로 kvm / qemu에서 LVM 볼륨 파일 시스템을 직접 사용하는 방법이 있습니까? 차이가 나는 경우 관리를 위해 libvirt를 사용합니다.
-
그렇지 않은 경우 KVM에서 유사한 마운트 / 백업 기능을 사용하려면 어떻게해야합니까? FUSE를 사용하여 libguestfs를 사용하는 방법에 대한 토론을 보았지만 이것이 최선의 선택입니까? 가능한 경우 기본 파일 시스템 마운트를 사용하는 것을 선호합니다.
-
또한 그렇지 않은 경우 KVM에서 온라인 파일 시스템 크기 조정을 수행 할 수 있습니까? 나는 이것에 관해 몇 가지 토론 / 하우투를 발견했지만 그 대답은 명확하고 명확하지 않은 해결책이없는 곳곳에있는 것처럼 보입니다.
긴 게시물에 대해 죄송합니다. 명확하게 확인하고 싶었습니다. 도움이 될만한 다른 정보를 제공해 주시면 알려주십시오. 토론을 기대합니다. 🙂
답변
- qemu-kvm은 LV를 파일 대신 가상 디스크로 사용할 수 있습니다. 이것은 실제로 일반적인 사용 사례입니다.
- libguestfs (및
virt-*
툴 세트 만 찾으면 )는 호스트에 직접 마운트하는 것보다 더 깔끔한 방식으로 게스트 파일 시스템에 대한 액세스를 제공 할 수 있습니다. - 온라인 FS 크기 조정은 kvm의 기능이 아니라 게스트 OS가 수행 할 수있는 기능입니다.
resize2fs
물리적 하드웨어에서와 마찬가지로 VM에서도 작동하며 게스트가 크기 변경을 다시 감지하는 것만 문제가됩니다. 시도virt-resize
표준 도구로하지만,lvresize
과qemu-img
(오프라인 모드에서, 일반적으로 게스트를 다시 시작을 필요로하지만) 쉽게 사용할 수 있습니다.
실제로 게스트를 다시 시작하지 않고도 lvresize
with resize2fs
가 작동 한다고 생각 하지만 아직 시도하지 않았습니다.
답변
qemu-kvm + libvirt를 나열한 이유와 정확히 일치하는 구성으로 사용하지만 KVM 호스트의 파일 시스템 계층이 없으면 범위 내에서 훨씬 더 나은 성능을 얻을 수 있습니다. virt-manager에서 VG를 ‘스토리지 풀’로 추가하면 사용하기 쉬운 마법사를 사용하여 해당 VM을 만들 수 있습니다. 그러나 요즘에는 기존 VM을 템플릿으로 사용하여 XML을 직접 작성합니다.
내 손님 중 하나에 대한 ‘virsh dumpxml’의 위생 출력 결과는 다음과 같습니다.
<domain type='kvm'>
<name>somevm</name>
<uuid>f173d3b5-704c-909e-b597-c5a823ad48c9</uuid>
<description>Windows Server 2008 R2</description>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-1.1'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>Nehalem</model>
<vendor>Intel</vendor>
<feature policy='require' name='tm2'/>
<feature policy='require' name='est'/>
<feature policy='require' name='monitor'/>
<feature policy='require' name='smx'/>
<feature policy='require' name='ss'/>
<feature policy='require' name='vme'/>
<feature policy='require' name='dtes64'/>
<feature policy='require' name='rdtscp'/>
<feature policy='require' name='ht'/>
<feature policy='require' name='ds'/>
<feature policy='require' name='pbe'/>
<feature policy='require' name='tm'/>
<feature policy='require' name='pdcm'/>
<feature policy='require' name='vmx'/>
<feature policy='require' name='ds_cpl'/>
<feature policy='require' name='xtpr'/>
<feature policy='require' name='acpi'/>
</cpu>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/vg1/somevm'/>
<target dev='hda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<interface type='bridge'>
<mac address='00:00:00:00:00:00'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='vga' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</memballoon>
</devices>
<seclabel type='none' model='none'/>
</domain>
또 다른 생각 (질문과 관련이 없지만 도움이 될 수 있습니다) : 가능하면 ‘반 가상화’네트워크, 블록, 임의, 시계 등 드라이버를 사용하고 있는지 확인하십시오-완전히 가상화 된 것보다 훨씬 빠릅니다. 위의 “model = virtio”항목입니다. virtio_net과 같은 호스트 커널에 드라이버 모듈을로드해야합니다.
다음은 ‘virsh pool-dumpxml vg1’의 출력입니다.
<pool type='logical'>
<name>vg1</name>
<uuid>9e26648e-64bc-9221-835f-140f6def0556</uuid>
<capacity unit='bytes'>3000613470208</capacity>
<allocation unit='bytes'>1824287358976</allocation>
<available unit='bytes'>1176326111232</available>
<source>
<device path='/dev/md1'/>
<name>vg1</name>
<format type='lvm2'/>
</source>
<target>
<path>/dev/vg1</path>
<permissions>
<mode>0700</mode>
</permissions>
</target>
</pool>
답변
설명하는 Xen 동작을 정확하게 복제하는 방법을 모르겠습니다. 그러나 kpartx
전체 디스크 이미지를 포함하는 LV 내의 파티션을 호스트의 블록 장치로 표시하는 데 사용할 수 있습니다.
답변
KVM 부팅 이미지 커널 및 기존 파티션 에서이 문제에 대한 본인의 질문에 대한 답변을 참조하십시오 . 간단히 말해, virt-install을 사용하여 구성을 만들면 게스트 / etc / fstab을 약간 수정하면 간단합니다.