qemu는 tmpfs의 디스크 이미지로 퀘스트를 시작하지 않습니다.

qemu는 tmpfs의 디스크 이미지로 퀘스트를 시작하지 않습니다.

4GB 게스트 RAM과 스와핑을 갖춘 32비트 Windows 2k3r3 게스트(터미널 서버)가 있습니다.

게스트 스와핑과 사용자의 임시 디렉토리를 위해 별도의 디스크 이미지를 만들었습니다.

호스트 시스템에 충분한 RAM이 있고 이 이미지를 tmpfs로 이동하여 디스크 IO를 저장하고 싶지만 게스트가 다음 오류 메시지와 함께 시작되지 않습니다.

qemu-kvm: -drive file=/mnt/tmpfs/vh1-tmp.qcow2,if=none,id=drive-ide0-1-1,format=qcow2,cache=none: 디스크 이미지를 열 수 없습니다│ 4098 qemu 20 0 4949M 4146M 5496 S 28.5 17.2 1h00:31 /usr/bin/qemu-kvm -name vh1 -S -M pc-1.3 -cpu kvm64 -enable- e /mnt/tmpfs/vh1-tmp.qcow2: 잘못된 인수

호스트 시스템:

#uname -a
Linux srv-vh1.su.local 3.7.10-1.16-default #1 SMP 금요일 5월 31일 20:21:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

srv-vh1:/mnt/tmpfs # virsh 버전
라이브러리에 대해 컴파일: libvirt 1.0.2
라이브러리 사용: libvirt 1.0.2
API 사용: QEMU 1.0.2
하이퍼바이저 실행: QEMU 1.3.0

srv-vh1:/mnt/tmpfs # 무료
             캐시된 총 사용 가능한 공유 버퍼
메모리: 24627548 5084724 19542824 0 60640 138792
-/+ 버퍼/캐시: 4885292 19742256
스왑: 8384444 0 8384444

srv-vh1:/mnt/tmpfs # cat /etc/mtab | grep tmpfs
devtmpfs /dev devtmpfs rw,relatime,size=12296608k,nr_inodes=3074152,mode=755 0 0
tmpfs /dev/shm tmpfs rw,상대시간 0 0
tmpfs /run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs rw,nosuid,nodev,noexec,mode=755 0 0
tmpfs /mnt/tmpfs tmpfs rw,상대시간 0 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs /tmp tmpfs rw,상대시간 0 0
tmpfs /var/lock tmpfs rw,nosuid,nodev,relatime,mode=755 0 0
tmpfs /var/run tmpfs rw,nosuid,nodev,relatime,mode=755 0 0

srv-vh1:/mnt/tmpfs # df
사용된 파일 시스템 1K 블록 사용 가능 사용 % 마운트 지점
devtmpfs 12296608 68 12296540 1% /dev
tmpfs 12313772 0 12313772 0% /dev/shm
tmpfs 12313772 6772 12307000 1% /실행
/dev/md1 454131992 218835836 212227596 51% /
tmpfs 12313772 0 12313772 0% /sys/fs/cgroup
tmpfs 12313772 192 12313580 1% /mnt/tmpfs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tmpfs 12313772 20 12313752 1% /tmp
tmpfs 12313772 6772 12307000 1% /var/잠금
tmpfs 12313772 6772 12307000 1% /var/run

srv-vh1:/mnt/tmpfs # virsh 풀 정보 tmpfs
이름: tmpfs
UUID: 6287028a-9faf-f762-20de-d36d63657be3
상태: 작업 중
지속성: 예
자동 시작: 예
용량: 11,74GiB
단위: 0,00
사용 가능: 11,74GiB

srv-vh1:/mnt/tmpfs # ls -la
총 196개
drwxrwxrwt 2 루트 루트 60 сен 9 11:42 .
drwxrwxr-x 4 qemu qemu 4096 сен 8 19:39 ..
-rw-rw-rw- 1 루트 루트 197120 сен 9 11:42 tserver-tmp.qcow2

내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

답변1

분명히 Direct IO를 지원하지 않는 호스트 파일 시스템에서 디스크 이미지 파일에 대해 캐시=NONE을 설정하면 Virt-Manager는 현재 "뭔가... 잘못된 인수"라는 별로 도움이 되지 않는 오류 메시지를 표시하고 시작을 거부합니다. 게스트 VM.

Direct IO를 지원하지 않는 파일 시스템의 한 가지 예는 tmpfs입니다. 선택적으로 Direct IO를 비활성화할 수 있는 또 다른 파일 시스템은 GlusterFS입니다(Sergei와 동일한 문제가 발생하여 오류를 조사하기 전에는 들어본 적이 없습니다.) tmpfs의 경우 Direct IO를 지원하지 않는 것이 기술적인 제한인 것 같습니다. 또는 현재 디자인 충돌이 있으며 향후 수정될지 여부는 알 수 없습니다.

제 경우에는 CentOS7에서 실행되는 Win7Pro 게스트 VM에 3.6GB Ramdisk를 설치했고 Virt-Manager에서 램디스크에 대해 캐시=NONE을 설정했습니다. tmpfs img가 사용한 다른 옵션은 virtio와 raw였습니다. VM은 "... 잘못된 인수"라는 동일/유사 오류로 시작을 거부합니다.

기능 캐시=NONE 및 유지 관리(?) Virt-Manager(Daniel Berrange)에 대한 패치를 코딩한 Redhat 엔지니어 및 개발자가 직접 작성한 기술 세부 정보 및 참고 사항은 다음 링크의 토론을 참조하세요.

https://bugs.launchpad.net/nova/+bug/959637

위 URL에서 Daniel을 인용하려면: " > 디스크 이미지 /mnt/vmstore/instances/instance-0000001a/disk를 열 수 없습니다: 잘못된 인수

아마도 파일 시스템이 Direct IO를 지원하지 않는다는 의미일 것입니다. AFAIK, tmpfs를 제외한 모든 파일 시스템은 이것을 지원해야 합니다.."

또한 Daniel은 계속해서 다음과 같이 말합니다. "- 그러면 우리가 하고 싶은 일은 [....] 스토리지 볼륨이 Direct IO를 지원하는지 확인하는 것입니다. 지원한다면 캐시=없음을 사용하고, 그렇지 않으면 캐시=로 폴백합니다. Direct I/O를 사용하지 않지만 여전히 충돌로부터 안전한 writethrough입니다."

제 경우에는 tmpfs img 파일에 대해 캐시=NONE을 설정하면 VM이 시작되지 않고 논의된 대로 오류가 표시되는 것을 확인할 수 있었습니다. 캐시가 "기본값" 또는 명시적으로 "Write-through"로 설정된 경우 VM을 성공적으로 시작할 수 있었습니다. 이 파일 시스템은 확장 가능하고 어쨌든 완전히 RAM에 있었기 때문에 "Write-back"을 사용하는 것은 의미가 없으므로 분명히 Write-back을 사용하지 않았습니다.

도움이 되었기를 바랍니다!

답변2

교체할 필요가 없도록 게스트에게 더 많은 램을 제공하면 어떨까요?

srv-vh1:/mnt/tmpfs # ls -la
total 196
drwxrwxrwt 2 root root     60 сен  9 11:42 .
drwxrwxr-x 4 qemu qemu   4096 сен  8 19:39 ..
-rw-rw-rw- 1 root root 197120 сен  9 11:42 tserver-tmp.qcow2

폴더 소유자가 qemu:qemu로 설정되어 있는 것을 확인했습니다. 다른 사용자로 qemu를 실행하는 경우 이미지 파일의 소유자를 루트에서 qemu로 변경하고 싶을 수도 있습니다.

답변3

버그입니다. tmpfs는 지원하지 않습니다 cache=none.

관련 정보