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
.