Hyper-V 是由微软开发的一种一级超级监视器,可以在 Windows 机器上启用,也可以安装为独立的操作系统(例如 Hyper-V Server 2016)。Hyper-V 不仅可以运行 Windows,还可以运行 Linux 虚拟机。您可以在 Hyper-V 服务器上运行无限数量的 Linux 虚拟机,因为大多数 Linux 发行版是免费且开源的。在 Hyper-V 虚拟机上安装 Linux 与安装 Windows 相比有一些特点。
今天的博客文章将探讨如何使用 Ubuntu Linux 18 LTS(长期支持版)的示例在 Hyper-V 上安装 Linux。
在 Hyper-V 上运行 Linux 的原因
Linux 的受欢迎程度正在增长,这个操作系统经过时间考验。让我们看看可能会迫使您在 Hyper-V 上安装 Linux 的最常见原因:
- 您需要在 Hyper-V 虚拟环境中测试特定的 Linux 发行版。例如,最近发布了新的 Linux 版本,您希望在安装到物理服务器之前测试这个版本。
- 您想运行容器。Linux 具有出色的容器支持,这可能是在 Hyper-V 上安装 Linux 作为虚拟机的原因之一。
- 测试多平台软件或提供类似功能的软件。当开发人员使其应用程序能够在多个操作系统上运行时(例如,Windows、Linux 和 Solaris,比如 Oracle Database),这是一个很好的选择。您可以在 Linux 上安装适当的软件进行测试。如果实验成功,您可以在生产环境中安装 Linux 和支持的软件。
- 许可。这一点与前面的相关。Windows 需要付费,而 Linux 是免费的。如果您的 Windows 服务器没有 Datacenter Edition 许可证,您必须为安装在 Hyper-V 虚拟机上的每个 Windows 实例支付费用,该实例数量超过主机 Windows 系统版本中包含的 Windows 许可证数量。
- Linux 需要的硬件资源较少。Windows 是一个资源密集型操作系统,而 Linux 则是轻量级的。
- Linux 是安全的。用户应该意识到 Windows 系统容易受到各种有害病毒的攻击,而 Linux 用户可能会感觉安全,特别是如果他们的系统配置正确的话。即使您下载了病毒,您也需要费很大的力气才能在 Linux 上执行该病毒。例如,您需要配置文件权限。如果您使用 Linux,您的隐私将受到尊重。
- 像 bash 这样的 Linux shell 对于自动化任务是必不可少的。您可以使用正则表达式、脚本和其他技巧来管理 Linux。您管理 Linux,Linux 不会管理您。开发者社区是令人惊叹的 – 开发者喜欢 Linux。如果发现任何漏洞,它们总是会被迅速修复。
- 您想学习 Linux 并从 Windows 迁移到 Linux。
如果您想将您的物理服务器转换为 Hyper-V VMs,请使用转换器。将物理 Linux 机器转换为 Hyper-V 格式的 VM 可以分为两个步骤。使用 VMware vCenter Converter 将物理机器转换为 VMware VM,然后使用 Microsoft Virtual Machine Converter 将 VMware VM 转换为 Hyper-V VM。
开始之前
安装 Ubuntu Linux 被认为是今天博客文章的重点。如果您不需要 GUI(图形用户界面),您可以安装 Ubuntu Server。安装原则类似。Linux 发行版的数量很多,您可以选择任何您喜欢的发行版,并使用所解释的逻辑进行安装。不同 Linux 家族之间的一个主要区别是您需要使用不同的软件包管理器。软件包管理器旨在在 Linux 系统上安装、配置、升级和删除程序。
软件包管理器有助于解决以下任务:
- 下载软件包。当您输入安装特定所需软件包或应用程序的命令时,软件包会自动从最合适的软件库下载。软件包包括元数据,如软件版本、软件包构建的体系结构、校验和以使其他所需软件包正常工作等。
- 解决依赖关系。当您安装软件时,该软件可能需要其自己的适当包括库在内的软件包。手动查找、下载和安装所有这些包会消耗大量时间和精力。包管理器会告诉您存在依赖关系,并建议您自动安装所需的依赖包。
- 质量控制。存储在授权软件仓库中的软件包经过测试,以提供高质量、稳定性和无错误的特性。
- 遵守文件位置标准。Linux 包含大量文件和目录。有时,不同的 Linux 发行版使用不同的路径存储文件,以及使用不同的配置文件名称。包管理器允许您遵循标准,并将文件存储在每个 Linux 发行版所需的位置。
在选择要在 Hyper-V 上安装的 Linux 发行版之前,您可以熟悉有关 Linux 包管理器的信息。下表列出了一些最流行的 Linux 发行版和包管理器。
Linux发行版 | 使用的软件包管理器 |
Debian、Ubuntu、Kubuntu、Xubuntu、Lubuntu、Mint | APT(高级包装工具)、DPKG(Debian包管理系统) |
OpenSUSE、SLES(SUSE Linux企业服务器) | Zypper、YaST |
Red Hat、CentOS、Fedora | RPM(Red Hat包管理器)、YUM(Yellowdog更新程序修改版) |
Gentoo | Portage |
正如本博客文章开头所提到的,将演示在Hyper-V上安装Linux,以Ubuntu Linux为例。从官方网站下载Ubuntu 18 LTS的ISO镜像。
创建新的Hyper-V虚拟机
首先,确保在您的Windows机器上启用了Hyper-V角色(功能)(转到控制面板>程序和功能>打开或关闭Windows功能并验证“Hyper-V”附近的复选框是否被选中)。为了创建新的虚拟机,打开Hyper-V管理器,点击操作>新建>虚拟机。应该出现新虚拟机向导。
开始之前。此步骤无需配置。
指定名称和位置。输入您的虚拟机名称,例如Ubuntu18,并选择一个新建虚拟机的文件夹位置。尽量使用与系统卷C:不同的卷。在这种情况下,使用了D:盘上的一个目录(D:\Virtual\Hyper-V)。您可以手动输入路径,也可以通过单击浏览按钮选择位置。
指定生成。选择此虚拟机的生成——第一代或第二代。第一代在此示例中由于更好的兼容性而被选择。
分配内存。为您的带GUI的Ubuntu Linux机器指定至少1 GB的内存。您可以在创建虚拟机后编辑内存设置。勾选为此虚拟机使用动态内存复选框,以更合理地利用您的硬件内存资源。
配置网络。选择将您的虚拟机的虚拟网络适配器连接到的虚拟交换机。在这种情况下使用默认交换机。稍后,您可以创建和配置其他虚拟交换机,并将您的虚拟机连接到相应的网络。
连接虚拟硬盘。选择创建虚拟硬盘选项。默认情况下创建动态VHDX虚拟磁盘。输入虚拟磁盘名称(例如,Ubuntu18.vhdx),选择位置并设置虚拟磁盘的大小(至少16 GB)。
安装选项。选择从可启动的CD/DVD-ROM安装操作系统。选择图像文件 (.iso)并浏览之前下载的Ubuntu18安装镜像。
摘要。检查安装摘要中的设置,然后单击完成以创建新的虚拟机。
设置静态MAC地址
现在已创建新的空虚拟机,您可以编辑不同的虚拟机设置,例如MAC地址。特别是在Linux运行在Hyper-V上时,最好使用静态MAC地址,特别是如果您的Linux虚拟机需要在Hyper-V主机之间迁移。右键单击虚拟机名称,然后单击设置。在设置窗口中,选择您的网络适配器,并通过单击+图标展开网络适配器选项。单击高级功能,在窗口右部选择静态MAC地址。单击确定以保存更改。
在虚拟机上安装Ubuntu Linux
在Hyper-V管理器中,选择您的Ubuntu虚拟机,右键单击虚拟机名称,在上下文菜单中选择连接以打开VMConnect。或者,您还可以在选择虚拟机后,单击窗口菜单栏的操作 > 连接作为替代。
在VMConnect窗口中,单击启动按钮以启动虚拟机。虚拟机应该从ISO镜像加载。然后,您可以看到Ubuntu安装程序的图形用户界面。安装程序以向导模式提供多个配置步骤。
欢迎。在此屏幕上,选择您想要的语言(英语),然后点击安装Ubuntu。
键盘布局。选择您的键盘布局(例如,美式英语),然后点击继续。
更新和其他软件。您可以选择普通安装或最小安装。普通安装包括更广泛的已安装应用程序。
其他选项允许您在安装Ubuntu时下载更新,以及安装图形、Wi-Fi硬件和其他媒体格式的第三方软件。
安装类型。现在您应该准备一个用于安装Ubuntu的磁盘。您应该创建一个新的分区方案并格式化分区。
擦除磁盘并安装Ubuntu。此选项可用于自动对磁盘进行分区。如果您是第一次安装Ubuntu Linux,您可以选择此选项。
为安全性加密新的Ubuntu安装。在当前示例中,此选项将不可用。
在新的Ubuntu安装中使用LVM。LVM是逻辑卷管理器,它允许您使用抽象层并通过使用两个逻辑或物理磁盘(或在作为VM运行Linux的Hyper-V上使用两个虚拟磁盘的情况下)创建卷组。此外,如果您的卷组中没有可用的空闲空间,可以添加一个以上的磁盘到卷组并扩展您的卷组大小。这种方法增加了更多灵活性,对于文件服务器、数据库服务器等非常有用。LVM允许您在不关闭Linux机器的情况下即时执行卷组调整和大多数其他操作。
其他选项。通过选择此选项,您可以手动创建所需大小的分区,并将它们挂载到适当的目录。这个选项被熟练的用户广泛使用。
在Linux中,磁盘分区不像在Windows中那样以磁盘字母命名,例如C:或D:。在Linux中,磁盘被命名为/dev/sda,/dev/sdb,/dev/sdc等。如果磁盘命名为/dev/sda并且有三个分区,则分区的名称应为/dev/sda1,/dev/sda2和/dev/sda3。
sda表示SATADisk。很久以前,当使用IDE(并行ATA)磁盘时,hard disk设备的命名为/dev/hda,/dev/hdb等,并且分区相应地命名为/dev/hda1,/dev/hda2,/dev/hdb1。
磁盘分区被挂载到目录中,在这种情况下称为挂载点。Linux文件系统的主目录是由斜杠符号 / 命名的根目录。在表格中显示了Linux手动创建分区方案的建议。在Hyper-V上安装Linux时,您可以使用类似的分区方案。
挂载点 | 磁盘分区 | 建议大小 | 备注 |
/boot | /dev/sda1 | 500 MB – 1 GB | 包含引导加载程序,如GRUB |
/ | /dev/sda2 | 至少 12-20 GB | 最重要的分区,必需 |
/home | /dev/sda3 | 用于分离用户文件和系统文件 | |
swap | /dev/sda4 | 4-8 GB,取决于RAM的数量 | 交换分区用于与Windows交换文件相同的目的 |
/var/log/ | /dev/sdb1 | 为存储日志创建单独的分区不是必需的,但对服务器而言是建议的。如果您有大量写日志文件的应用程序,则磁盘可能会变满。操作系统和应用程序可能会因此崩溃。 |
请注意,如果使用MBR(主引导记录)分区方案,您只能创建4个分区。 GPT(GUID分区表)允许您创建多于4个分区。
点击立即安装继续。
将更改写入磁盘?会显示警告消息。点击继续应用新的磁盘分区方案。
您在哪里?选择您的地理位置和时区。应使用您所在地区的软件仓库以获得更好的可用性和下载速度。
你是谁?输入您的姓名,您计算机的名称(在这种情况下是VM的主机名),选择一个用户名并定义密码。如果需要,您可以选择自动登录的适当选项。默认情况下需要密码登录 – 这是最安全的选项,也是推荐的选项。点击继续开始安装过程和文件复制。
等待安装过程完成。您可以在文件复制时阅读有用的提示和操作系统说明。
安装完成。您需要重新启动计算机才能使用新的安装。点击立即重启。
重新启动Hyper-V Linux虚拟机后,您可以看到登录屏幕。选择您的用户名并输入密码以登录。查看窗口,该窗口演示了您已在Hyper-V上安装的新版本Ubuntu Linux的新功能。
配置Linux
你已经在Hyper-V虚拟机上安装了Ubuntu,但是Ubuntu和其他Linux一样,必须配置才能进一步舒适地使用。大多数设置可以在Linux控制台(终端)中配置。要打开终端,请点击左下角的九个点(显示应用程序),然后在弹出的菜单中点击终端图标。另一种打开终端的方法是右键单击桌面,然后在上下文菜单中点击打开终端或按Ctrl+Alt+T组合键。
现在你看到了一个精致的Ubuntu Linux终端窗口。请注意,Linux中的命令和文件名区分大小写。ReadMe.txt和readme.txt在Linux中是不同的文件名,而在Windows中这些文件名没有区别。
检查网络设置
安装net-tools以便通过以下命令检查网络配置:
sudo apt-get install net-tools
其中sudo允许你以root用户(替代用户)执行命令。
键入ifconfig来检查在Hyper-V虚拟机上运行的Ubuntu的网络配置。
A default virtual DHCP server connected to the default virtual switch has distributed the IP configuration for the virtual network adapter of the current Ubuntu Linux VM running on Hyper-V. The name of the virtual Ethernet adapter in Linux is eth0. The obtained IP address is 172.25.151.20, netmask is 255.255.255.240 and the default gateway is 172.25.151.31 in this case.
手动更改网络设置
通过DHCP获取IP地址很方便,但如果您计划将在Hyper-V上运行的Linux用作服务器,您应该手动配置网络设置。此外,如果您希望克隆用作服务器的Linux虚拟机,则更改IP地址和计算机名称至关重要。在重新配置Hyper-V虚拟交换机或将虚拟网络适配器连接到另一个虚拟交换机后,您可能还需要更改Linux虚拟机上的IP地址。让我们看看如何手动配置Linux虚拟机的网络设置。
更改诸如网络设置之类的系统设置需要root权限。在控制台中键入sudo -i以获取root权限(您应该输入密码)(在需要时按Ctrl+D退出root模式)。您可能会注意到命令行提示符中的$字符已更改为#字符。输入新的IP地址,然后重新加载网络接口:
ifconfig eth0 172.25.151.21 netmask 255.255.255.240
ifconfig eth0 down
ifconfig eth0 up
设置将应用直到重新启动计算机。
要永久设置静态IP地址,请使用从Ubuntu版本17开始在Ubuntu Linux中用于配置网络的netplan配置。在早期版本的Ubuntu和一些其他Linux发行版中,您可以通过编辑/etc/network/interfaces配置文件来编辑IP地址配置。让我们使用命令编辑.yaml文件,使用vim:
vim /etc/netplan/01-network-manager-all.yaml
在这种情况下,文件包含以下配置:
network:
version: 2 renderer: NetworkManager |
您可以通过编辑此文件更改IP地址、网络掩码、网关和DNS服务器。您应保留文件结构,包括空格字符的数量。
注意:网络掩码可以写成位数。
255.255.255.0 等于 11111111.11111111.11111111.00000000,是一个 24 位掩码(十进制格式中有 24 个 1,如您所见)。
255.255.255.240 等于 11111111.11111111.11111111.11110000,是一个 28 位掩码(十进制格式中有 28 个 1)。
IP 地址和网络掩码由 4 个八位组成。每个八位组(8 位)可以转换为十进制格式(请参阅下表)。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1+1+1+1+1+1+1+1=8 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | 128+64+32+16+8+4+2+1=255 |
您可以使用以下表格将网络掩码从一种格式转换为另一种格式,适用于可以分类为C类网络的网络。右列显示可连接到网络的最大主机数。
位数 | 网络掩码 | 主机数 |
/30 | 255.255.255.252 | 2 |
/29 | 255.255.255.248 | 6 |
/28 | 255.255.255.240 | 14 |
/27 | 255.255.255.224 | 30 |
/26 | 255.255.255.192 | 62 |
/25 | 255.255.255.128 | 126 |
/24 | 255.255.255.0 | 254 |
通过上述解释的逻辑,您可以类似地手动将任何掩码从一种格式转换为另一种格式。如果要计算可连接到网络的最大主机数,请使用以下公式:
2(32-m) – 2
其中m是用于网络掩码的位数。例如,您有一个/29网络,该网络的最大主机数为:
2(32-29) – 2 = 23 – 2 = 8 – 2 = 6
–2显示您必须排除网络地址和广播地址。(例如,对于192.168.1.0/24网络,您必须排除192.168.1.0和192.168.1.255地址)。不要忘记至少要使用一个IP地址作为默认网关,以便连接到其他网络。您也可以将您的网络划分为子网,但现在,让我们回到为在Hyper-V虚拟机上运行的Ubuntu配置网络。
将渲染器从NetworkManager更改为networkd,并类似于下面所示编辑您的Ubuntu网络配置。在添加空格字符以保留配置格式时要注意。
网络:
版本:2 渲染器:networkd 以太网: eth0: dhcp4:否 地址:[172.25.151.21/24] 网关4:192.168.151.17 名称服务器: 地址:[192.168.151.17,8.8.8.8] |
按Esc退出编辑模式进入导航模式在vim中。键入:wq然后按Enter以写入更改并退出文本编辑器。
注意。如果您有多个网络适配器(例如,eth0和eth1),请在.yaml文件的eth0:块下添加类似的eth1:块。
编辑命令后,请检查配置文件格式是否正确:
netplan try
如果一切都正确,请按Enter键保留这些设置。
如何在Ubuntu中更改主机名?
在更改之前,让我们检查当前主机名。
hostnamectl
如您所见,如下屏幕截图所示,Linux机器的当前主机名为Ubuntu-VM。设置新的VM-Ubuntu主机名:
hostnamectl set-hostname VM-Ubuntu
确保主机名现在已更改为/etc/hostmane文件中。
less /etc/hostname
您还应编辑/etc/hosts文件中的主机名。
vim /etc/hosts
vim 是一个强大的控制台文本编辑器,在 Windows PowerShell 中没有类似的工具。默认情况下,您处于导航模式。您可以通过按下 h(左)、L(右)、j(下)、k(上)或箭头键来进行导航。按 a 进入编辑模式,在光标后附加任何字符。如果要在光标所在位置插入字符而不是覆盖现有字符,请按 i。将 Ubuntu-VM 更改为 VM-Ubuntu,按 Esc 退出编辑模式以返回导航模式。
输入 :wq 以保存更改并退出文件。
使用 init 6 命令重新启动您的 Linux 机器以确保更改生效。
在 Ubuntu Linux 上配置 SSH 服务器
为了更方便,您应该通过 SSH 启用远程访问。SSH 服务器用于通过加密的 SSH(安全外壳)协议远程访问 Linux 控制台。为此,您应该在运行在 Hyper-V 上的 Ubuntu VM 上安装 SSH 服务器,并在作为 Hyper-V 主机的 Windows 机器上安装 SSH 客户端。
在您的 Ubuntu 机器上打开终端,并以 root 用户身份运行以下命令:
apt-get install -y openssh-server
SSH 服务器的配置存储在 sshd_config 文件中。编辑此文件以启用所需设置的 SSH 连接。
vim /etc/ssh/sshd_config
取消注释此行(删除 # 字符)
PasswordAuthentication yes
保存文件并退出。
重新启动SSH服务器守护程序(服务)。
/etc/init.d ssh stop
/etc/init.d ssh start
为您的Windows机器下载SSH客户端(例如,PuTTY)。在Windows机器上打开PuTTY,输入在Hyper-V上运行的Ubuntu虚拟机的IP地址,然后单击Open。
输入您的用户名和密码。现在您可以远程访问Ubuntu控制台。
在Linux虚拟机和Windows主机之间传输文件
与VMware不同,您不能在Hyper-V中的Windows主机和Linux客户机之间拖放文件。由于您已配置了SSH服务器,因此可以使用SFTP(安全文件传输协议)客户端(如WinSCP)从Ubuntu虚拟机传输文件到Hyper-V主机,反之亦然。WinSCP使用SSH进行安全连接,并且还可以使用SCP(安全复制协议)进行文件传输。
在您的Windows机器上运行WinSCP。选择SFTP作为文件协议,输入主机名或IP地址、用户名和密码。
登录后,您会看到一个带有两个面板的窗口 – 第一个面板显示Windows机器上的文件,第二个面板显示Linux机器上的文件。转到源和目标机器上的指定目录,选择文件和目录。将选定的对象拖放到面板之间以复制它们。
如何在Linux上安装Hyper-V集成服务?
自Ubuntu 12.04版本起,Hyper-V Linux集成服务已经内置在其中。如果您的Linux发行版不包含Hyper-V集成服务,您可以从Microsoft的网站下载它们。
您可以在运行在Hyper-V上的Ubuntu虚拟机中使用PowerShell检查启用了哪些集成服务。在Hyper-V主机上的PowerShell中键入以下命令:
get-vmintegrationservice -VMName “Ubuntu18”
您还可以在GUI中选择要为此虚拟机提供的Hyper-V服务。打开Hyper-V管理器,右键单击虚拟机名称,然后单击设置。在设置窗口中,在左窗格中选择集成服务,并选中所需服务附近的复选框(在此示例中必须启用Guest services)。
单击确定以保存更改。
您现在可以在PowerShell中重新检查已启用的服务(请参阅下面的屏幕截图)。
get-vmintegrationservice -VMName “Ubuntu18”
一旦在您的Ubuntu Linux上安装了Hyper-V集成服务,它们必须被激活。/etc/initramfs-tools/modules文件包含您希望包含在initramfs中的模块列表。
initramfs 是用于挂载根文件系统 (/) 的初始 RAM 文件系统。因此,初始根文件系统和 init 守护程序(Linux 中必须运行的第一个进程)可以驻留在内核内存缓存中(而不是像 initrd 文件系统那样驻留在内存盘上,后者作为固定大小的块设备,并且消耗更多内存用于缓存)。在 Linux 内核 2.6 之后,initrd 被 initramfs 取代,因为它具有灵活性、效率和简单性等优点。initramfs 是一个完整的目录集,你可以在根文件系统中看到,并且被压缩成一个 cpio 存档。
Linux 内核可以是单片式的和模块化的。在大多数情况下,模块化内核被使用。让我们启用加载必要的模块。
vim /etc/initramfs-tools/modules
编辑文件并添加这些字符串以启用加载适当的模块。
hv_vmbus
hv_storvsc hv_blkvsc hv_netvsc |
更新 initramfs:
update-initramfs -u
重新启动运行 Ubuntu 的 Hyper-V VM:
init 6
验证你的 Linux 内核已加载了与 Hyper-V 相关的模块。
lsmod | grep hv
调整 Linux 磁盘优化器
Linux具有I/O调度器模式,可通过默认方式优化磁盘I/O(输入/输出),特别适用于磁盘硬盘驱动器。Hyper-V具有自己的机制来优化虚拟磁盘I/O性能。使用两个磁盘优化器是不必要的,您可以禁用内置的Linux磁盘优化器。Linux内核允许您使用不同的I/O调度器,每个调度器使用不同的算法。在这种情况下,必须使用NOOP调度器。NOOP是使用先进先出(FIFO)概念进行排队的最简单的I/O调度器。这是在Hyper-V上运行Ubuntu所需的。
要编辑Linux内核使用的I/O调度器,请使用以下命令编辑grub配置文件:
vim /etc/default/grub
查找GRUB_CMDLINE_LINUX_DEFAULT字符串。在这种情况下,此字符串的显示如下:
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
编辑此字符串以获得以下视图:
GRUB_CMDLINE_LINUX_DEFAULT=”elevator=noop”
保存更改到此GRUB配置文件。
更新GRUB引导加载程序配置。
update-grub2
重新启动您的Ubuntu Hyper-V虚拟机。
init 6
结论
如果您从未使用过Linux,在Hyper-V上安装Ubuntu可能是打开Linux世界大门的第一步。创建新的虚拟机很简单,但安装完成后应进行一些手动配置。
在Hyper-V主机上运行Linux虚拟机允许您轻松克隆和迁移虚拟机。两台机器不能具有相同的主机名和IP地址,基本网络配置因此而被解释。Hyper-V Linux集成服务可以提高虚拟机的性能。
虽然操作系统正在虚拟机上运行,但Windows和Windows虚拟机都应该进行备份,以保护宝贵的数据。NAKIVO备份与复制可以以最佳方式备份您的Hyper-V虚拟机。