嗨,我目前正在使用 libvirt+kvm 设置一台新服务器。之后该服务器上应该有大约 5 台虚拟机在运行(+一些测试机器)。
存储放在使用 LVM 设置的 raid-5 设备上。KVM 现在在一些 LVM 逻辑卷上运行。
问题是:在虚拟机内部再次(第二次)使用 lvm 来分区空间有什么缺点吗? 因此它将是:硬盘-> Raid 控制器-> 物理服务器的 LVM-> 每个 VM 一个逻辑卷-> 每个 VM 内的 LVM-> 每个 VM 内的多个逻辑卷。
如果我想在虚拟机内使用动态分区,还有其他可能性吗?
谢谢
答案1
LVM 的性能开销很小,使用两次不会改变这一点。您的 raid-5 设备将比 lvm 产生更大的影响。
答案2
博客文章http://hyperthese.net/post/kvmized-debian-on-lvm/建议您在主机(物理服务器)上创建 LVM 逻辑卷并直接在其上创建文件系统,而无需创建分区,并且在创建虚拟机之前。
我尝试了一下,长话短说:它似乎有效,并且我能够扩大 LV 及其上的文件系统。
以下是我所做的事情的详细内容:
在主机上(运行 Ubuntu 10.04)为 VM 的 root、var 和 swap 创建 LVM 逻辑卷:
me@host:~$ sudo lvcreate -L4G -n test-root vg1
me@host:~$ sudo lvcreate -L20G -n test-var vg1
me@host:~$ sudo lvcreate -L2G -n test-swap vg1
在 LV 上创建文件系统和交换:
me@host:~$ sudo mkfs.ext3 /dev/mapper/vg1-test--root
me@host:~$ sudo mkfs.ext3 /dev/mapper/vg1-test--var
me@host:~$ sudo mkswap -f /dev/mapper/vg1-test--swap
创建虚拟机:
me@host:~$ sudo virt-install --name=test --ram=2048 --os-type=linux --os-variant=ubuntulucid --cdrom=ubuntu-server-10.04-lts-64bit.iso --disk path=/dev/mapper/vg1-test--root --disk path=/dev/mapper/vg1-test--var --disk path=/dev/mapper/vg1-test--swap --network bridge=br0 --vnc --noautoconsole
然后我使用 virt-viewer 连接到新的虚拟机,Ubuntu 安装程序就在那里等着我。我选择了“安装最小虚拟机”模式(F4 键)。
在分区阶段,我选择了手动分区。安装程序找到了虚拟磁盘 vda、vdb 和 vdc,并识别出前两个具有 ext3,最后一个具有交换分区。我选择了 ext3 分区,并被告知将它们用作 ext3 分区(默认为“不使用”),第一个分区的挂载点为“否,保留现有数据”,第二个分区的挂载点为 /。默认情况下,交换分区设置正确。然后我选择在第一个磁盘上安装 grub。
我让虚拟机正常运行。Fdisk 显示 vda 有一个空分区表,而 vdb 和 vdc 没有有效的分区表。我不知道有或没有分区表是否是个问题,关于这个问题有一些讨论https://unix.stackexchange.com/questions/5162/how-to-install-grub-to-a-whole-ext4-disk-without-partition-table。
最后我尝试调整 var 磁盘的大小。首先,在主机上:
me@host:~$ sudo lvextend -L24G /dev/vg1/test-var
然后我重新启动了虚拟机并调整了虚拟机上的文件系统大小:
me@test:~$ sudo resize2fs /dev/vdb
并且它的大小调整得很好。
我不知道这是不是个好办法,但目前看来还是有效的。有什么意见吗?
答案3
我认为,使用第二次 LVM 对性能不利,但除了网络文件系统,我想不出其他稳定的采用动态分区的解决方案(您可以尝试使用 fuse 或 btrfs 的 zfs,但它们还未投入生产)。
如果要将 LVM 保留在 VM 内部,则可以在主机上为每个 VM 上的每个分区创建一个 LV。
答案4
一般来说,使用更多部件意味着更多东西会被破坏。我建议你重新考虑一下你正在做的事情,这样 LVM 就不需要重复了。也许可以使用 OpenVZ 之类的东西来代替 KVM,OpenVZ 支持快速且动态地调整虚拟分区的大小。