前言
这周一直在重装笔记本的系统。因为公司搬家,也有了充足的时间可以把需要的内容一点一点装上,并配置上。啥?装个系统要一周?是的,确切地说,也用不了。不过如果集中时间来装的话,两到三天还是要的。这次连换硬盘等货,还是浪费了点时间。趁这周也就配置了一下家里的内网。带固定IP可以的家用内网环境搭好了,就有了折腾的基础基于OpenWrt的内网搭建。今天就是继网络环境之后的内容,安装虚拟机。之前关于安装虚拟机整理过一篇Hyper-V快速克隆虚拟机 。这次我们不用Hyper-V,转用esxi6.7。Hyper-V是基于本机的虚拟机搭建环境,更多的用途是用来支撑平时的使用和开发环境。这两种虚拟机环境我的选择思路主要如下:
- Hyper-V是运行在windows中的虚拟机环境,而esxi6.7是一个独立的虚拟机操作系统。在硬件的虚拟化效率上来说,esxi6.7无疑会更高一些。
- Hyper-V的虚拟机我主要是使用在随身携带的笔记本上。为了能够支撑足够的虚拟机运行,我已经把内存条插满,扩容到32G了(当年单条32G的DDR4还没出)。但是,我笔记本经常被携带到不通的网络环境中去。所以Hyper-V的网络我配置的是NAT网络。这种网络是很难让其它机器对这些虚拟机进行访问的。而独立的esxi服务器就不同。在家里,它的网络环境相对固定,他上面的一个一个的虚拟机在网络上就是独立的主机,通信起来非常方便。
- esxi6.7系统本身占用的资源比windows要小的多,毕竟是自己折腾,资源有限。
创建虚拟机
esxi创建虚拟机其实很简单。
在“虚拟机“界面中,点击“创建/注册虚拟机”,跟随想到创建一个虚拟机就好了。我创建的虚拟机叫ubuntu-prototype。这个时候虚拟机中是没有操作系统的,就相当于与你组装了一台新电脑,插上了一块新硬盘。
上传操作系统
是的,要上传操作系统。因为,我们需要给虚拟机的光驱加载操作系统的ISO文件,但是与Hyper-V不同的是,esxi是一个独立的服务器,你电脑上的ISO文件是不可以直接使用的。
打开“存储”菜单,点击“数据存储浏览器”。我这里只有一个硬盘分配给了esxi,叫datastore1。图中可以看到ubuntu-prototype目录,是刚才创建虚拟机时默认创建的目录。这里我们点击“创建目录”,创建一个叫package的目录,用来存储以后我们上传上来的软件包。然后,选中package目录,点击“上载”,选择你的ISO文件即可。
安装操作系统
编辑虚拟机
上传完操作系统后,我们回到“虚拟机”菜单中,选中我们创建的虚拟机,点击“编辑”。
- 在CD/DVD驱动器1中,选择“数据存储ISO文件”,病选中刚才我们上传的文件。记得勾选连接。
- 上面切换到“虚拟机选项”,点开“引导选项”,勾选“虚拟机下次引导时,强制进入BIOS设置画面”
点击“保存”按钮。
安装
打开电源,这时会默认进入BIOS。不过,因为虚拟机没有操作系统,所以我们没法通过ssh远程访问,点击页面中的画面,就可以直接操作虚拟机了。
在BIOS中,切换到BOOT,将光盘启动移动到第一位,保存退出。然后就会引导我们安装操作系统了。接下来安装的步骤参见我另一篇博客ubuntu操作系统安装机基本配置(20.04) 这里唯一需要注意的就是,为了保证该镜像被克隆后不会与其它机器IP冲突,我们保留网络的DHCP配置,在创建好克隆的虚拟机后再更改网络配置。
安装完成并重启后,之前我们连接的ISO会自动断开,不用操心。
ip可以直接在esxi的页面中看到,不用登录系统后去查。
克隆虚拟机
- 准备动作,关闭虚拟机电源。
- 创建新的虚拟机的文件夹,我这里是打算用它来装基础设施的 ,所以就叫ubuntu-foundation
- 复制.vmx(虚拟机)和.vmdk(虚拟磁盘)到新的文件夹中
- 在.vmx文件中点击右键,注册虚拟机
- 修改虚拟机名称和硬件信息,并启动虚拟机
- 启动虚拟机。这时会提示该虚拟机可能已被移动或者复制。选择我已复制。网卡将会被重新创建,从而不会重复。
修改IP及机器名
首先查询IP信息
ip addr
我查询到的信息如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:c7:2c:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.216/24 brd 192.168.31.255 scope global dynamic ens160
valid_lft 40719sec preferred_lft 40719sec
inet6 fe80::20c:29ff:fec7:2c63/64 scope link
valid_lft forever preferred_lft forever
第一个lo,对应的是127.0.0.1的IP,我们略过不看。第二个ens160对应的是我们的内网IP。
这时我们再打开网络配置文件
sudo vim /etc/netplan/00-installer-config.yaml
由于之前我们安装原型虚拟机时没有配置IP,使用的是动态IP,所以这里ens160下面我们可以看到只有dhcp的配置。完整文件如下:
# This is the network config written by 'subiquity'
network:
ethernets:
ens160:
dhcp4: true
version: 2
ens160就是我们上面查到的内网IP的网卡,我们要把动态IP改成静态IP。改完后如下:
# This is the network config written by 'subiquity'
network:
ethernets:
ens160:
addresses:
- 192.168.31.21/24
gateway4: 192.168.31.1
nameservers:
addresses: [114.114.114.114,8.8.8.8]
search: []
version: 2
文件中我们指定了IP,掩码位数,IPv4的网关和域名解析服务器地址。
执行命令
sudo netplan apply
使网络配置生效。需要注意的是,这个命令执行完了,由于IP地址变更了,所以你的连接也就断了,需要更换IP后重新连接。
修改主机名称:
sudo hostnamectl set-hostname nature.foundation
修改hosts文件
sudo vim /etc/hosts
我这里选择的是把127.0.1.1的host注释掉,其实也可以在原型系统中注释掉。
虚拟机调整
对于原型虚拟机来说,硬件配置其实是很不好调整的。
- 核心数和内存:这个是最好调整的,可以不关机增加核心数和内存,但是想要减少就必须要关机调整。
- 磁盘:这个即使我们对虚拟机的磁盘进行了调整,linux中挂载的磁盘大小也不会因此改变。
有鉴于此,原形虚拟机的配置我们基本使用最低配置(1核1G),磁盘大小我这里设置的是默认的16GB。后面需要,我们再调高配置或者挂载磁盘。
修改核心数及内存
这个很好调整,编辑虚拟机,修改并保存就可以了。不过,推荐核心数不要超过物理CPU的核心数,内存也尽量就低不就高。更高的虚拟机配置并不一定意味着更高的性能,但一定会占用更多的资源。
磁盘扩容
ubuntu默认会把大部分的磁盘都挂在在根下面。这样其实蛮好用的。但是,由于esxi会预先把分配的虚拟机的磁盘占用出来。也就是50G的虚拟机就真的占用50G,复制或者传输也是这么大。这样就很不方便。所以,我原型虚拟机选择了16G,需要的时候再进行扩容。
首先查看当前的磁盘状态
df -Th
结果如下
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 447M 0 447M 0% /dev
tmpfs tmpfs 99M 1.2M 97M 2% /run
/dev/sda2 ext4 16G 4.8G 11G 33% /
tmpfs tmpfs 491M 0 491M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/loop1 squashfs 62M 62M 0 100% /snap/core20/1270
/dev/loop2 squashfs 55M 55M 0 100% /snap/core18/1705
/dev/loop3 squashfs 73M 73M 0 100% /snap/lxd/22147
/dev/loop4 squashfs 69M 69M 0 100% /snap/lxd/14804
/dev/loop0 squashfs 56M 56M 0 100% /snap/core18/2253
/dev/loop5 squashfs 28M 28M 0 100% /snap/snapd/7264
/dev/loop6 squashfs 44M 44M 0 100% /snap/snapd/14295
tmpfs tmpfs 99M 0 99M 0% /run/user/1000
然后,关闭虚拟机,将磁盘从16G调整到20G,再开机。
sudo fdisk -l
这时信息中会出现一行红色字体的错误
GPT PMBR size mismatch (33554431 != 41943039) will be corrected by write.
如下指令,修复分区表
sudo parted -l
结果如下:
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 17.2GB 17.2GB ext4
输入指令追加磁盘
sudo parted /dev/sda
指令中的/dev/sda就是我们上面看到的Disk的信息,有21.5GB
输入命令 unit s 设置Size单位,方便追加输入
输入命令 p free 查看详情
这时我看到的信息如下:
Number Start End Size File system Name Flags
34s 2047s 2014s Free Space
1 2048s 4095s 2048s bios_grub
2 4096s 33552383s 33548288s ext4
33552384s 41943006s 8390623s Free Space
和之前parted -l查到的信息是可以对应上的,number为2的是我们现在要扩展容量的磁盘。
输入命令 resizepart 2 追加容量到sda2
确认后,需要输入追加磁盘到哪个位置。追加到的位置就是最后的Free Space的End的位置
输入命令 41943006s
再输入 p free 可以看到FreeSpace没有了
输入命令 q 退出
这个时候如果我们在用df查看/dev/sda2的大小,会发现它并没有改变。但是如果我们用fdisk -l查看,会发现扩容成功了。原因是fdisk查看的是磁盘的大小,而df查看的是文件系统的大小。所以需要执行如下指令,再查看df就对了。
sudo resize2fs /dev/sda2
需要注意,这里可能比实际的情况简化了很多。因为在这个系统里既没有物理卷也没有逻辑卷。
逻辑卷
在后来我安装ubuntu2204的时候,磁盘默认是被划分到一个LVM分区的,也就是逻辑卷。经过上述扩容操作的时候,我们会发现最后的resize2fs操作是没有效果的。因为,我们现在需要resize的是一个逻辑卷而非物理分区,所以应该使用如下指令:
sudo pvresize /dev/sda3
是的,我这一次的分区是sda3。这可以通过指令:sudo lsblk查看到。
然后执行如下指令:
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
该指令的意思是将剩余的空间100%分配到/dev/mapper/ubuntu–vg-ubuntu–lv中。而这个/dev/mapper/ubuntu–vg-ubuntu–lv的名字,是我们在df指令中看到的。上述指令就完成了LVM中的磁盘扩容,这时候再执行下述指令:
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
就可以看到df指令中被成功扩容了。这时候,文件系统就成功完成了扩容。