====== Gandi 的 HVM ====== ===== 1 - 什么是 HVM ? ===== Gandi 的虚拟化平台是从 [[http://wiki.xenproject.org/wiki/Paravirtualization_(PV)|XenPV]] (我们从 2008 年开始使用的虚拟化平台),迁移至 [[http://wiki.xen.org/wiki/Virtualization_Spectrum|PVHVM]] 与 [[http://www.linux-kvm.org/|KVM]] (硬体与软体虚拟化的混合云能提供效能提升与简易使用)。 现在提供给每一个人使用,Gandi 伺服器提供了典型的功能是架构在 HVM 上面的 -- 像是 [[https://www.gandi.net/hosting/iaas/livescaling|动态调整 CPU*, RAM 与 disk]] -- 还有一些新的功能: * 效能提升 * 可以使用 grub 来自订开机核心或自管核心 * 相容于任何支援 "virtio" 与 "ACPI events" 的系统 //* 请注意目前 HVM 平台无法在开机状态下调整移除 CPU。您需要停止虚拟机器后再移除。// 您现在可以建立或将旧的虚拟伺服器迁移到我们新的平台。 选择我们提供给您的开发版本与核心,或是建制安装您自己的系统。 这份文件会引导您如何开始。 使用 [[http://cli.gandi.net|Gandi CLI]] 让您更容易从命令列管理您的伺服器,但是从网页一样可以很开心的完成工作。 ===== 2 - 使用 HVM 建立一个新的虚拟机器 ===== 我们提供了三种符合 HVM 的 Linux 3.12 核心映像档。 要建立一个新的虚拟机器,只要输入以下指令(或是从网页上选择映像档进行建立): **Debian 7** $ gandi vm create --image="Debian 7 64 bits (HVM)" --hostname <自订一个名称> **Debian 8** $ gandi vm create --image="Debian 8 64 bits (HVM)" --hostname <自订一个名> **Ubuntu 14.04 LTS** $ gandi vm create --image="Ubuntu 14.04 64 bits LTS (HVM)" --hostname <自订一个名> 您的虚拟机器将会在我们的平台上自动产生。 如果您想要使用自订的核心与套件,请跳过下面的章节。 ===== 3 - 迁移现有的虚拟机器(VM) 到 HVM ===== 使用下列的指令来迁移您在我们 HVM 平台上的虚拟机器非常容易的。 底下将引导您完成 "gandi-hosting-vm2" 的套件安装(将会安装 ACPI 套件),依照您的系统调整一些设定档并且将内核换成 ''3.12-x86_64 (hvm)''。 我们建议您在迁移之前先 [[http://wiki.gandi.net/en/iaas/references/disk/snapshots|快照]] 您的系统 您需要在虚拟机器(VM)上使用 **root** 权限(或用 "sudo")来执行命令。为了安全起见,请依照下列指令进行 如果您目前使用 32 位元的系统,我们建议迁移后使用 GRUB(如下说明)或是可能的话请使用 64 位元系统取代现在的 ==== 3.1 - 迁移 Debian 7 或是 Ubuntu 14.04 虚拟机器 ==== === 3.1.1 - 安装相依套件 === 首先,连接到您的虚拟机器(范例中我们使用 "xenpv-server" 当作虚拟机器的名子) local $> gandi vm ssh xenpv-server 然后,请安装 "gandi-hosting-vm2" 套件: xenpv-server #> apt-get install gandi-hosting-vm2 === 3.1.2 - 编辑系统档案 === 复制贴上下列指令来修改 ''/etc/fstab'' 设定档: xenpv-server #> sed -i 's/xvda1/sda/' /etc/fstab **Ubuntu 的注意事项** 在 Ubuntu 上,你还需要修改 ''/etc/mtab'' 这个档案。您可以复制贴上下列指令来修改设定: xenpv-server #> sed -i 's/xvda1/sda/' /etc/mtab **Debian 7 的注意事项** 在 Debian 7 上复制与贴上下列的指令来移除 gandi-config 在 "/etc/inittab" 内的设定。''gandi-hosting-vm2'' 会在第一次开机时将新的设定自动修正。 xenpv-server #> sed -i '/^# console configuration by gandi-config$/,$d' /etc/inittab === 3.1.3 - 更新系统中的核心 === 一旦您在 Ubuntu 或 Debian 机器上修改好了设定。您可以升级系统核心到我们提供的 Linux 3.12 版本,它与 HVM 相容。假设您的系统硬碟叫做 ''xenpv-server-disk'',您可以用: local $> gandi disk update xenpv-server-disk --kernel "3.12-x86_64 (hvm)" --cmdline 'root=/dev/sda' === 3.1.4 - 停止然后重开 === 您现在可以停止并且重新启动虚拟机器然后他就会在我们的 HVM 平台上开始运作。 local $> gandi vm stop xenpv-server # 没有关闭电源无法迁移到新平台 local $> gandi vm start xenpv-server === 3.1.5 - 更新您的系统并且重新开机 === 最后,连接您的伺服器然后更新套件,请使用核心更新的方式: xenpv-server #> apt-get update xenpv-server #> apt-get upgrade xenpv-server #> reboot 到这边您应该可以在我们的 HVM 平台上顺利的执行您的虚拟机器了! ==== 3.2 - 迁移 CentOS, Fedora, Mageia 或 Mandriva 这类的虚拟机器 ==== === 3.2.1 - 安装相依套件 === 首先,连接到您的虚拟机器(范例中我们使用 "xenpv-server" 当作虚拟机器的名子) local $> gandi vm ssh xenpv-server 然后,请安装 "gandi-hosting-vm2" 套件: xenpv-server #> yum install gandi-hosting-vm2 或是 ''urpmi gandi-hosting-vm2'' 适用于 Mageia / Mandriva。 === 3.2.2 - 编辑系统档案 === 复制贴上下列指令来修改 ''/etc/fstab'' 设定档: xenpv-server #> sed -i 's/xvda1/sda/' /etc/fstab === 3.2.3 - 更新系统中的核心 Update the system disk's kernel === 一旦您在 Ubuntu 或 Debian 机器上修改好了设定。您可以升级系统核心到我们提供的 Linux 3.12 版本,它与 HVM 相容。假设您的系统碟叫做 ''xenpv-server-disk'',您可以执行: local $> gandi disk update xenpv-server-disk --kernel "3.12-x86_64 (hvm)" === 3.2.4 - 停止然后重开 === 您现在可以停止并且重新启动虚拟机器然后他就会在我们的 HVM 平台上开始运作。 local $> gandi vm stop xenpv-server # 没有关机无法迁移到新平台 local $> gandi vm start xenpv-server === 3.2.5 - 更新您的系统并且重新开机 === 最后,连接您的伺服器然后更新套件,请使用以下的更新方式: xenpv-server #> yum update xenpv-server #> reboot 如果您在 Mageia / Mandriva 上不是使用 "yum",请执行 ''urpmi --auto-select'' 来更新。 到这边您应该可以在我们的 HVM 平台上顺利的执行您的虚拟机器了! ==== 3.3 - 迁移其他发行版本 ==== 在我们提供给您内建的映像档之前您需要自行研究如何迁移您的发行版本到我们的 HVM 平台。我们建议您阅读上述的步骤研究如何将发行套件迁移。基本上,您需要做: - 安装 ''gandi-hosting-vm2'' 套件 - 在您的发行版本上安装等同于 ''acpid'' 与 ''acpi-support-base'' 对应套件(因为 ''gandi-hosting-vm2'' 相依性的关系) - 修改 ''/etc/fstab'', ''/etc/mtab'' 和/或是 ''/etc/inittab'' 设定档,或是等同功能的档案,修改成语上述相同设定的内容。 - 升级系统硬碟内的核心到 "3.12-x86_64 (hvm)",可以用 CLI 或是网页介面。 - 停止虚拟机器并且重新开机(不是软开机,要切断电源那种重开机) - 更新系统套件,然后重开机 如果您遇到了麻烦,请参考下面的故障排除与支援来尝试修正您的问题。 ===== 4 - 使用自订的核心 ===== 在我们的 HVM 平台上,您可以选择使用我们提供的映像档与核心,或是使用 GRUB 开启您自订的系统与核心 ==== 4.1 - 使用我们的 GRUB 来开启您自订的核心 ===== 我们发行的伺服器在系统硬碟中使用 grub ,平台将会使用硬碟他自己的 GRUB 来开机。 平台的 GRUB 会读取你的系统硬碟中特定位置的 GRUB 设定档来开机。 您系统中的 GRUB 设定档必须存在以下路径: ''/boot/grub/grub.cfg'' 您的系统硬碟中可以使用您自订的核心(核心或是发行套件不是由 Gandi 提供的),透过 GRUB 中的您指定的设定与资源来开启您自订的核心启动伺服器。 === 4.1.1 - 迁移一个现有的伺服器到 HVM 并使用 GRUB === 您可以使用上述的指令来迁移您的伺服器并使用 GRUB,但您会需要额外设定一下内核与设定档。 不一样的核心与增加额外的设定。 一定您安装好必要的套件并且编辑了系统档案,使用 "grub" 核心(取代 3.12 (hvm) kernel)。举例: local $> gandi disk update xenpv-server-disk --kernel grub local $> gandi vm stop xenpv-server local $> gandi vm start xenpv-server === 4.1.2 - Debian 与 GRUB 的范例 === 上述相关的 Debian 指令之外,在您变更您的核心之前,请依照下列步骤设定您的虚拟机器使用 GRUB 开机: hvm-server #> apt-get install grub2-common hvm-server #> apt-get install linux-image-amd64 hvm-server #> grub-mkconfig -o /boot/grub/grub.cfg local $> gandi disk update hvm-server-disk --kernel grub local $> gandi vm stop hvm-server local $> gandi vm start hvm-server === 4.1.3 - 迁移其他发行套件使用 GRUB === 每一种发行套件(或是同系列) 都有者一些特别的路径、套件或是设定档来使用 GRUB。通常,有一个非常重要的 GRUB 设定您需要加入设定档中来启用紧急终端机,还需要额外注意 GRUB 设定档的位置。 GRUB_CMDLINE_LINUX='console=ttyS0' ==== 4.2 使用 GRUB 执行 FreeBSD(自订核心范例) ==== 请用一个暂时的虚拟机器将 FreeBSD 安装在一个非系统硬碟中来安装 GRUB 设定档。然后建立一个新伺服器并指定这颗硬碟为系统开机碟。 首先,您需要准备自己的 FreeBSD 映像档。在 GNU/Linux 工作站上面,范例如下: local $> qemu-img create -f raw freebsd.raw 3G local $> kvm -hda freebsd.raw -cdrom freebsd.iso -boot d -curses "-curses" 选项需要复制贴上一些指令. 在 "Partitioning" 视窗,选择 "Shell", 然后输入: # newfs /dev/ada0 # cat << EOF > /tmp/bsdinstall_etc/fstab /dev/ada0 / ufs rw 1 1 EOF # exit 在 "网路设定(Network Configuration)" 视窗,不要设定任何网路介面。 在 "手动设定(Manual configuration)" 视窗, 开启一个 "Shell",然后输入: # mkdir /boot/grub # cat << EOF > /boot/grub/grub.cfg menuentry "FreeBSD" { insmod ufs2 set root=(hd0) kfreebsd /boot/loader } EOF # sed -i -e s/ada/da/ /etc/fstab # echo ifconfig_vtnet0=dhcp >> /etc/rc.conf # exit 然后,您可以将他加入伺服器中。 local $> gandi vm create --hostname freebsd-temp-config local $> gandi disk create --name freebsd-system --vm freebsd-temp-config local $> gandi vm ssh freebsd-temp-config freebsd-temp-config #> # copy your FreeBSD image to the server, then: freebsd-temp-config #> dd if=freebsd.raw of=/dev/ local $> gandi vm create --hostname freebsd local $> gandi disk update freebsd-system --kernel grub local $> gandi vm ssh freebsd freebsd #> uname -a > FreeBSD freebsd X.X-RELEASE FreeBSD X.X-RELEASE [...) 已知的问题 / 解决方式: - 需要手动增加 swap (swapon /dev/da1) - 需要安装 ''gandi-hosting-vm2'' - FreeBSD 预设的防火墙, PF, 在虚拟环境中有效能的问题。您可以使用 IPFW 取代,或是关闭网路介面的 TSO (''ifconfig_vtnet0="-tso DHCP"'') ==== 4.3 - 直接从硬碟开机 ==== 如果您的系统硬碟中有 MBR(主要开机磁区),您可以直接使用硬碟开机,这让您可以使用自己的开机引导程式,例如您可以使用裸机的方式开机。 如果您使用 GRUB 的话就能避免一些 MBRs,磁区与低阶的操作管理,**当您直接对硬碟进行操作时都必须格外小心**。 在 GRUB 提示命令时输入 "exit" 您将可以用硬碟开机 ==== 4.4 自订映像档的范例 ==== 首先,使用 HVM 上面的映像档建立一个虚拟机器: local $> gandi vm create --name temphvm --datacenter=LU --image="Debian 7 64 bits (HVM)" 然后,建立并挂载一个新的硬碟到虚拟机器上。您将设定这颗硬碟可以开机。 local $> gandi disk create --vm temphvm --name rawbootdisk 使用暂时的虚拟机器来复制您的开机映像档(譬如用 "dd")。 一个好了,卸载虚拟机器中的硬碟然后修改 kernel 为 "raw": local $> gandi disk detach rawbootdisk local $> gandi disk update rawbootdisk --kernel raw local $> gandi vm delete temphvm 最后,建立一个新的虚拟机器然后将这个硬碟设定为系统碟: local $> gandi vm create --datacenter LU --image rawbootdisk ===== 5 - 问题与帮助 ===== ==== 5.1 - 我的 VM 再也无法开机了 ==== 如果您的虚拟机器在迁移到 HVM 之后无法开机,您可以将核心回复到 3.10(或是其他不是 HVM 的核心)然后开机试看看,或是将系统硬碟挂载到另外一台电脑进行检查: - 卸载你虚拟机器的系统碟 (''$ gandi disk detach my_boot_disk'') - 建立一个新的暂时虚拟机器 (''$ gandi vm create --hostname temphvmfix'') - 在这台暂时的虚拟机器将您的系统硬碟挂载成非系统硬碟 (''$ gandi disk attach my_boot_disk --vm temphvmfix'') - 修正错误 - 从暂时的虚拟机器上卸载硬碟 (''$ gandi disk detach my_boot_disk'') - 在原本的虚拟机器上重新将硬碟挂载成系统碟 (''$ gandi disk attach my_boot_disk --vm my_original_vm'') - 恢复测试 ==== 5.2 - 支援 ==== 请 [[http://www.gandi.net/support/contact/|联络我们的支援团队]] 来回报您遇到的任何问题。 您可以加入 #gandi 在 freenode 上的频道来与我们的开发者与其他客户交流。