我有两台想要虚拟化的物理机。
我无法(物理上)将硬盘从任何一台机器插入到将充当其虚拟机主机的新机器中,因此我认为复制系统的整个结构来使用dd是不可能的。
我怎样才能最好地将这些机器从其硬件迁移到 KVM 环境?我设置了空的、未格式化的 LVM 逻辑卷来托管其文件系统,并理解为虚拟机提供一个真正的分区来使用比在文件系统上粘贴映像可以获得更高的性能。
我最好创建新的操作系统安装并重新同步差异吗?
FWIW,两台要进行 VM 的机器运行 CentOS 5,主机运行 Ubuntu Server 10.04,没有什么特别重要的原因。我怀疑这太重要了,因为重要的仍然是 KVM 和 libvert。
virtualization migration physical-to-virtual kvm-virtualization
我用Libvirt创建了一个VM,当我强行或使用ACPI关闭它时,它会被删除。我创建它:
<domain type='kvm'>
<name>deneme2</name>
<memory>2097152</memory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
<boot dev="hd" />
</os>
<features>
<acpi/>
</features>
<on_poweroff>preserve</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<on_lockfailure>poweroff</on_lockfailure>
<devices>
<graphics type='vnc' port='-1'/>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/mustafa/buki/vms/deneme2/disk0.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
<source file='/home/mustafa/buki/vms/deneme2/cloud-init.img'/>
<target dev='vdb' bus="virtio"/>
</disk>
<interface type='network'>
<source network='br0-bridge'/>
<mac address='00:16:3e:5a:41:9c'/>
<model type="virtio" />
</interface>
</devices>
Run Code Online (Sandbox Code Playgroud)
但是,尽管我正确使用了 on_poweroff 事件,但它会立即被删除。
$ virsh dumpxml deneme2 | grep "on_poweroff"
<on_poweroff>preserve</on_poweroff>
$ virsh shutdown deneme2 --mode acpi
Domain deneme2 is being shutdown
$ virsh list …Run Code Online (Sandbox Code Playgroud) 我的来宾机器有 2 个分区(80GB + 1TB)。它们都在 LVM 上。我想以最短的停机时间将所有磁盘传输到另一台机器。我用nc转移了另一台机器。这需要 4 天,在转移期间我的 VM 关闭了。
我尝试在传输脏页后制作快照。但是 AFAIK 和 LVM 是不可能的。我的目标机器没有 LVM 设置和可用的未分区空间。所以在目标机器上的磁盘必须是原始文件映像。
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg-datastore/lv-vm-1138'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg-datastore-sata/lv-vm-1138-2'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>
Run Code Online (Sandbox Code Playgroud)
源主机:
目标主机:
我知道 Vmware 管理程序至少有一个设置可以忽略来自来宾操作系统内的 CPU 微码更新(不足为奇)。
CPU 微码更新可用。来宾操作系统尝试将微代码从补丁级别 XX (YYh) 更新到补丁级别 ZZ (TTh),但 VMware ESX 不允许从虚拟机内应用微代码补丁。微码补丁用于纠正 CPU 勘误表。如果您的 CPU 没有遇到任何问题,则可以忽略此微码补丁。否则,您可以从您的系统供应商处获得包含此微码补丁的 BIOS/固件更新,或者您的主机操作系统可能会提供一个工具来加载直接从英特尔网站获得的微码补丁。
https://kb.vmware.com/s/article/1028290
所有管理程序都是这种情况吗(如 KVM,其中提供了虚拟 Qemu CPU)还是可能有 Vmware Vsphere 的设置,其中检测到来自来宾机器的微代码更新被暂存以供管理程序微代码加载机制使用(例如当微码是真实的并且版本比安装的微码更新时)?
任何来宾机器都不能将微代码上传到管理程序的 CPU,除非微代码特定于虚拟化 CPU。但话又说回来,它有什么用呢?也可以更新虚拟机管理程序的代码以仅更改虚拟 CPU。
Spectre 需要在 Hypervisor 级别进行缓解,因此需要 Hypervisor 上传适当的 Bios 固件和/或微代码。微码无法通过来宾操作系统修复。
Red Hat 撤回了与 Spectre 相关的微码更新,并且虚拟机尝试在启动期间上传微码。
2018 年 1 月 15 日星期一 Petr Oros - 1:1.17-25.4 使用正确的上游源进行还原 解决:#1533978
2018 年 1 月 12 日星期五 Petr Oros - 1:1.17-25.3 从 Intel 和 AMD 恢复微码以进行侧信道攻击解决:#1533978
microcode_ctl RPM 的更新日志
我有一个带有 3 个公共 IP 的 Ubuntu 18.04 服务器。主 IP 已经预先配置。
我想配置IP2和IP3。IP2 用于 SSL 域,IP3 用于虚拟机 (qemu libvirt)。问题(对我来说)是,以前版本的 Ubuntu 使用了 upstart,我能够配置它,但是当前版本有 systemd,我无法解决。
以前我使用以下方法进行配置并且一切正常:https : //wiki.hetzner.de/index.php/Netzkonfiguration_Debian/en#Routed_.28brouter.29
现在,使用 systemd,这是我开始使用的网络配置文件(只有 1 个 IP):
# /etc/systemd/network/10-eno1.network
[Match]
Name=eno1
[Network]
Gateway=IP_GATEWAY
[Address]
Address=IP1
Peer=IP_GATEWAY/32
Run Code Online (Sandbox Code Playgroud)
添加 IP2(用于 SSL)很容易,因为它只需要在上面的文件中添加一个额外的 [Address] 部分。
至于IP3,我想为了将IP3路由到我的VM,我需要像原始howto一样创建一个网桥。因此,当尝试为 VM 配置 qemu/libvirt 网桥时,我最终得到了与此配置非常相似的内容:https : //bbs.archlinux.org/viewtopic.php?id=193994 ie - br0 device + eno1 添加到网桥+ 像上面一样配置网桥
但是就像在上面的线程中一样,服务器变得无法访问(无法 ping 输入/输出)并且诊断命令的输出几乎相同。
关于如何配置 IP3 以与 VM 一起使用的任何建议?
我试图将我的 KVM 主机从带有 AMD cpu 的主机迁移到带有 Intel CPU 的主机,但是当我运行时virsh start guest_name我得到了error: unsupported configuration: CPU model ... is not supported by hypervisor.
我知道 KVM 支持这样的迁移(在 FAQ 中他们甚至谈到了 64 位 AMD/Intel CPU 之间的实时迁移)。我该怎么办?
所以我刚买了一个 KVM vps,当我将它与我现有的 openvz vps 进行比较时,我发现它比 openvz vps 慢,当我检查处理器信息时,它的信息有点错误,所以我想知道公司是否可以控制共享 cpu不同 KVM 容器之间是否缓存?
在 kvm 上: cat /proc/cpuinfo
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
stepping : 1
microcode : 0x1
cpu MHz : 2199.996
cache size : 4096 KB
bogomips : 4399.99
Run Code Online (Sandbox Code Playgroud)
我在英特尔网站上查过这个 E5 处理器有大约 30 MB 的缓存。
在 openvz vps 上: cat /proc/cpuinfo
vendor_id : GenuineIntel
cpu family : 6
model : 63
model name : …Run Code Online (Sandbox Code Playgroud) 我了解到 CirrusCI 在其公共存储库的免费软件包中提供嵌套虚拟化,我正在尝试利用它来测试我的 Ansible 剧本。
不幸的是,libvirt 坚持认为 CI 环境不支持完全虚拟化。所有检查(我知道的)都证明了相反的情况,并且 qemu-kvm 在直接调用时可以正常工作。我几乎可以肯定问题出在我的主机操作系统配置上,而不是出在 CI 引擎上。我见过其他人出于他们的目的(Android 仿真、氧化还原测试)在 CirrusCI 上使用完全虚拟化。
我使用 Debian 10 作为主机系统,来自 DockerHub 的超薄映像,并安装了以下额外的软件包(--no-install-recommends):
bridge-utils libguestfs-tools python3-dev
coreutils libosinfo-bin python3-venv
cpu-checker libssl-dev qemu-kvm
curl libvirt-clients qemu-kvm
gcc libvirt-daemon qemu-utils
gpg libvirt-daemon-system systemd
gpg-agent linux-image-amd64 vagrant
iproute2 make vagrant-libvirt
kmod procps virt-goodies
libc-dev python3 virtinst
libffi-dev
Run Code Online (Sandbox Code Playgroud)
我可能缺少什么?为什么当 qemu-kvm 完美运行时,libvirt 会告诉没有 KVM?
Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: invalid argument: could not …Run Code Online (Sandbox Code Playgroud) 我有一个 .qcow2 图像,我可以轻松地将它移植到另一台计算机上。但我也想移植它的保存状态。它们存放在哪里?
我在 Manjaro/Arch。
我创建了一个 QEMU 虚拟机,打算安装 Ubuntu Server 20.04。主机是 Proxmox 6.x Debian 系统。虚拟机参数为:
注意:对于 Linux 5.x 来宾,这些是 VM 创建对话框中的所有 Proxmox 默认值。
一旦我启动了 VM,就会出现一个 Ubuntu 屏幕。然后,出现以下错误:
Initramfs unpacking failed: write error
Failed to execute /init (error -2)
Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.
Run Code Online (Sandbox Code Playgroud)