我想完全了解虚拟机快照的工作原理。尽管我已经研究过这个主题,但我似乎无法找到快照实际工作方式的“高级”概述。我的问题是:
示例场景:我有一个运行 KVM 的 Ubuntu 12.04 主机和一个 Ubuntu 来宾。虚拟机采用 RAW 格式。我使用virsh命令对其进行快照,
由于一些限制以及基于 Windows 的专用服务器的报价很少且价格昂贵,我考虑租用一台 Linux 服务器,并在该服务器上运行多个虚拟机。
我想过使用 KVM,但是在命令行中设置和运行一个新的 VM 并不是一件容易的事(并不难,只是点击几下)。我可以访问 OpenStack 集群,部署新机器真的很容易,所以我的同事也能做到。
问题是,现在我们只有一台租用的服务器,而这些服务器只有一个物理网络。我找到了一个脚本,可以在一台机器上设置所有 OpenStack 服务(https://github.com/ilearnstack/cloudgear),但是这样做有用吗?或者我应该直接坚持使用 KVM,因为无论如何我将在具有 5-10 个 VM 的第二台机器上最多只有 1 个,并且 OpenStack 开销太大?
或者有没有像virt-manager这样的在线工具?通过这种方式,创建和运行虚拟机也将得到简化。
KVM 主机服务器运行 CentOS 6.5,LVM 卷组“storage_pool”用作 KVM 的主要存储池。
使用 ext4 文件系统安装 Ubuntu 客户机并将整个 /dev/vda1 挂载为 /。这是来宾磁盘配置:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/storage_pool/kvmguest.img'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
Run Code Online (Sandbox Code Playgroud)
增加来宾磁盘大小的最佳方法是什么?VG 有很多可用空间。
我找到了一些例子,但大多数也在来宾内部使用 LVM,或者并不完全适用。据我了解,常见的方法是在同一个VG中创建一个更大的LV,关闭guest,传输数据,编辑配置以使用新的LV?
预先感谢您的任何建议或指示
我在单个真实服务器(带有 KVM 的 Ubuntu Server 14.04)上托管了一堆虚拟机(Ubuntu Server 14.04)。虚拟机的数量不断增加,我很快就会拥有超过 254 台。
去测试,
我/etc/network/interfaces将真实服务器的网络掩码从255.255.255.0更改为255.255.254.0。真实服务器的IP地址是192.168.1.30。
我做了类似的操作virsh net-edit default,将 的网络掩码更改virbr0为255.255.254.0。
我也将交换机的网络掩码更改255.255.254.0为。
我像这样更改了测试虚拟机的配置:
auto eth0
iface eth0 inet static
address 192.168.2.35
netmask 255.255.254.0
network 192.168.1.0
broadcast 192.168.2.255
gateway 192.168.1.1
dns-nameservers 192.168.1.13
dns-search example.com
Run Code Online (Sandbox Code Playgroud)这是目前的状态:
我无法192.168.2.35从真实服务器ping :它只是停留在“PING 192.168.2.35 (192.168.2.35) 56(84) bytes of data”。当停止 (Ctrl+C) 时,它会抱怨:“143 个数据包传输,0 个接收,100% 数据包丢失,时间 142134 毫秒”。
虚拟机192.168.2.35无法 ping 任何东西(无论是交换机、真实服务器还是 google.com),前两个都抛出“connect: Network is …
我刚开始玩 KVM,所以在这里学习了很多。我有一个来宾运行,最终通过 Virtio SCSI 和 Net 驱动程序 (Win2k3) 以我想要的方式设置了操作系统,并且对一切都感到非常满意。然后我关闭了系统并添加了第二个数据卷作为 Virtio。一旦我这样做了,它就会将我原来的“目标设备”从“VirtIO 磁盘 1”撞到“VirtIO 磁盘 2”,现在它不会启动,除非我手动 F12 并选择(现在是第二个)磁盘。为什么它让我的原始磁盘成为第二个,当它是第一个添加时?更重要的是,我如何重新排列它们?也许只是删除它们并以相反的顺序添加它们?似乎应该有一个配置选项或为此在 XML 文件中进行编辑。
我确实尝试编辑 vmname.xml 文件并找到了该选项。我按照我喜欢的顺序将它添加到每个磁盘设备,但是,它总是无法启动。就像它只会尝试第一个 HDD 并停在那里。它似乎忽略了 XMl 配置中的引导顺序参数。
我现在会继续删除并重新添加,但我很好奇,这不应该是不删除设备的可配置吗?
我正在运行 Ubuntu 14.04,它是最新的。我认为 libvirtd 是 1.2.2。任何其他可能有帮助的规格,请告诉我。谢谢您的帮助!格雷格
快速更新:我尝试删除两个磁盘,关闭 virt-manager,然后重新打开。然后我先添加了 datavol,然后添加了 OSVolume(应该是第一个磁盘),它确实坚持保持倒序!它没有用。
如果磁盘顺序向后,我如何让来宾启动?(无需手动引导至 F12 选项)
[编辑:来宾的 virsh dumpxml]
我看到引导顺序标签现在被删除了,因为我重新添加了磁盘。我希望这个磁盘是第一个:
/dev/zvol/dpool/vm/kvm/disk/alinos/osvol
<domain type='kvm' id='80'>
<name>alinos</name>
<uuid>a161efe4-245a-953b-89e3-04fa3b914f79</uuid>
<memory unit='KiB'>3145728</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>2</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='i686' machine='pc-i440fx-trusty'>hvm</type>
<boot dev='hd'/>
<bootmenu enable='yes'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>SandyBridge</model>
<vendor>Intel</vendor> …Run Code Online (Sandbox Code Playgroud) 所以我正在为 KVM 虚拟机运行一个开发服务器。我有一个在主机节点上本地运行的 DHCP 服务器,配置如下:
/etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;
subnet xxx.xxx.x.0 netmask 255.255.255.0 {
range xxx.xxx.x.2 xxx.xxx.x.127;
option routers xxx.xxx.x.1;
option broadcast-address xxx.xxx.x.255;
option domain-name-servers 8.8.8.8;
option netbios-name-servers 8.8.8.8;
default-lease-time 86400;
max-lease-time 86400;
option rfc3442-classless-static-routes 24, xxx, xxx, x, 0, 0, 0, 0, 0, 0, xxx, xxx, x, 1;
option ms-classless-static-routes 24, xxx, xxx, x, 0, 0, …Run Code Online (Sandbox Code Playgroud) 按照许多教程,他们要求您更改 /boot/grup/grup.conf 中的 grup 文件。但在 Centos7 中没有 /boot/grup/grup.conf
...
在内核中激活 Intel VT-d 通过将 intel_iommu=on 参数附加到 /boot/grub/grub.conf 文件中内核行的内核行来激活内核中的 Intel VT-d。下面的示例是一个经过修改的 grub.conf 文件,其中激活了 Intel VT-d。
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora Server (2.6.18-190.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-190.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet intel_iommu=on
initrd /initrd-2.6.18-190.el5.img
Run Code Online (Sandbox Code Playgroud)
?? 如何激活inter vt-d
我有一个当前在 Linode 的 Xen 服务器上的 linode。我看到我有资格升级到 KVM linode。
我担心的一件事是 Linode 的升级指南说块设备将从/dev/xvda命名方案更改为/dev/sda命名方案。
我的/etc/fstab是:
proc /proc proc defaults 0 0
/dev/xvda / ext3 noatime,errors=remount-ro 0 1
/dev/xvdb none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
所以我想我将不得不以某种方式结合升级来修改它。
如果我只是编辑/dev/xvda和/dev/xvdb条目/dev/sda,并/dev/sdb关闭和升级过吗?
我应该切换到UUID=声明设备的样式吗?(现在考虑一下,设备 UUID 会保持不变吗?)
我确实打开了 Linode 的支持票,他们说的是“在升级之前打开配置文件中的 Distro Helper,这应该会解决它”。这留下了它不会的机会,所以我更愿意主动做一件已知的好事。
相关地,我假设管理 UI 中的配置文件中的“根设备”选项(这是一个提供/dev/xvdN选项的下拉列表)将在您升级时正确映射/dev/xvda到/dev/sda等?
总而言之,我很想听听那些让他们的 linode 通过 Xen->KVM 转换的人的意见,看看这个问题(以及我不知道的其他问题)是如何解决的。
有没有办法允许非 sudo 用户访问 CentOS 7 中的 KVM QEMU 虚拟机?我想允许非 root 用户在没有 sudo 访问权限的情况下管理 KVM 来宾虚拟机。主要是,我希望用户能够运行 virsh 命令,例如:
virsh list --all
virsh start UUID
Run Code Online (Sandbox Code Playgroud)
我尝试将用户添加到 libvirt 组,但这没有用。我检查了 /etc/polkit-1/rules.d 中的策略套件规则,并且我也遵循了以下说明:
https://goldmann.pl/blog/2012/12/03/con ... t-manager/ https://major.io/2015/04/11/run-virsh-a ... ular-user/
这些都没有奏效。有没有办法做到这一点,如果有,怎么做?
我想知道 VPS 是否是每 3-7 天在晚上 03:00 - 04:00 时间(内核错误或其他)发生的崩溃的根本原因,或者它是一个节点托管虚拟服务器(后端问题)。
详细信息:带有 CentOS 7 的基于 KVM 的 VPS,由 VPS 提供商托管的 xfs,该提供商拥有后端和存储后端基础架构。
通常它以以下方式发生,运行kthreadd过程立即变为D-status(即不间断睡眠),然后我们得到如下消息:blocked for more than 120 seconds.和高LA:
May 21 03:08:01 vps root: root 2 0.0 0.0 0 0 ? S May18 0:00 [kthreadd]
May 21 03:10:01 vps root: root 2 0.0 0.0 0 0 ? S May18 0:00 [kthreadd]
May 21 03:12:01 vps root: root 2 0.0 0.0 0 0 ? S May18 0:00 [kthreadd]
May …