AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1043410
Accepted
Krackout
Krackout
Asked: 2020-11-22 02:27:28 +0800 CST2020-11-22 02:27:28 +0800 CST 2020-11-22 02:27:28 +0800 CST

KVM 虚拟机管理程序 - Windows 32 位 VM,可用 RAM 高达 2GB

  • 772

我有一个 Debian 10 KVM 管理程序,没有 libvirt 或其他工具来管理它,使用 QEMU 脚本。我需要一个用于旧版应用程序的 32 位 Windows VM,但在受支持的操作系统(不是 XP)上,Windows 8.1 或 10 32 位。当分配 3GB RAM 时,Windows 8.1 和 10 都会在系统属性上显示“2GB 可用”消息(我想在没有其他技术的情况下能够处理 32 位机器的最大值)。相反,Win XP 似乎使用 3GB RAM,说明启用了 PAE。

任何想法如何在 Win 8.1 或 10、32 位上使用 3GB RAM?


这是具有 3GB RAM 的 Win 8.1 VM 的屏幕截图(一些在 Win 10 上): 在此处输入图像描述


这是启动 VM 的 QEMU 脚本(我也尝试过主机 CPU,没有区别):

#!/bin/sh
SPICE_PORT=3010
MONITOR_PORT=2330
QEMU_AUDIO_DRV=alsa

kvm \
    -M q35 \
    -nodefaults \
    -cpu qemu64 \
`#  -cpu host` \
    -m 3G \
    -mem-path /dev/hugepages \
    -device virtio-balloon-pci \
    -rtc base=localtime \
    -vga qxl \
    -drive file=win8.qcow2,if=virtio,cache-size=16M,cache=writethrough \
    -device virtio-net-pci,netdev=diktyo0 \
    -netdev user,id=diktyo0 \
    -monitor telnet:localhost:${MONITOR_PORT},server,nowait \
    -device virtio-serial \
    -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
    -chardev spicevmc,id=vdagent,debug=0,name=vdagent \
    -spice port=${SPICE_PORT},addr=127.0.0.1,disable-ticketing \
    -device virtserialport,chardev=charchannel1,id=channel1,name=org.spice-space.webdav.0 \
    -chardev spiceport,name=org.spice-space.webdav.0,id=charchannel1 \
    -soundhw ac97 \
    -name "Windows 8.1 x86" \
    -daemonize \

按照 shodanshok 的建议,我发布了资源监视器的输出(总 RAM 为 4GB): 在此处输入图像描述

一半的内存由硬件保留。

我还将 RAM 增加到 4GB: 在此处输入图像描述

为了防止 QXL 视频驱动程序保留太多内存,我还将配置视频的行更改为:

-device qxl-vga,vgamem_mb=64,ram_size_mb=64,vram_size_mb=64

我可能会尝试更改 Seabios,至少是版本。不幸的是,Debian Stable QEMU 版本是 3.1.0;它已经很老了,我想知道在较新的版本中是否会出现相同的行为。

windows debian kvm-virtualization virtual-machines hypervisor
  • 2 2 个回答
  • 834 Views

2 个回答

  • Voted
  1. Best Answer
    shodanshok
    2020-11-22T11:46:11+08:002020-11-22T11:46:11+08:00

    更新的答案:如评论和更新的问题所示,由于特定机器类型,具体问题与 2 GB 硬件内存预留有关。切换到 i440fx 机器类型解决了这个问题。

    原始答案(留在这里,因为它可以帮助其他人在 32 位 Windows 上遇到类似问题):

    尝试使用以下命令(并重新启动)增加用户空间内存分配:

    bcdedit /set IncreaseUserVa 3072
    

    请确保在执行上述命令之前对您的 VM 进行快照(并确保有有效的备份)。

    • 4
  2. Michael Hampton
    2020-11-23T06:57:25+08:002020-11-23T06:57:25+08:00

    我怀疑您的问题出在大页面上,您已明确要求 KVM 使用。

        -mem-path /dev/hugepages \
    

    您实际上是否有足够的大页面来为 VM 提供整个 4GB 的 RAM?我想你可能不会。检查:

    # grep Huge /proc/meminfo           
    AnonHugePages:   1325056 kB
    ShmemHugePages:        0 kB
    FileHugePages:         0 kB
    HugePages_Total:    1024
    HugePages_Free:     1024
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:         2097152 kB
    

    总共有多少大页面,有多少免费?注意每个大页面是 2MB。其中 1024 个可用空间只有 2GB。

    因此,增加大页面的数量以解决您的虚拟机(或虚拟机!)将使用的所有内存。

    # sysctl vm.nr_hugepages
    vm.nr_hugepages = 1024
    
    # sysctl vm.nr_hugepages=2048
    vm.nr_hugepages = 2048
    

    现在您应该有足够的大页面来为 VM 提供所有内存。

    # grep Huge /proc/meminfo 
    AnonHugePages:   1327104 kB
    ShmemHugePages:        0 kB
    FileHugePages:         0 kB
    HugePages_Total:    2048
    HugePages_Free:     2048
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    Hugetlb:         4194304 kB
    
    • 0

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve