前言
前两天觉得ESXi的硬盘太小,想迁移一下。从480G的硬盘迁移到了1.8T的硬盘,结果发现旧的VMFS分区不认识了,空白空间也无法使用。
研究了一下怎么创建VMFS分区并挂载为数据存储。
首先VMFS分区不支持直接扩展,只能把旧的扬了,然后重新创建新的VMFS。
其实最稳妥的做法是用一个小容量硬盘专门装ESXi,虚拟机操作系统和仓库盘单独挂载,这样就压根不需要迁移。
我这里是因为我这服务器板子自带的M.2只有一个插槽,而我刚好有个2T的固态,索性直接把ESXi和虚拟机操作系统装到同一个盘里。
案例软硬件信息
- ESXi 8.0U2
- 两个M.2硬盘,一个480G已经装有ESXi 8,另一个空的2T作为作为目标盘
- DiskGenius,推荐用正版
硬盘迁移
迁移过程比较简单,一笔带过
1.同步分区表
打开DiskGenius,选择ESXi原本所在的硬盘,右键备份分区表,保存分区表文件
打开迁移目标硬盘,右键选择还原分区表,然后点左上角保存更改
2.克隆分区
然后在顶部找到 工具 -> 克隆分区 ,源选原本硬盘,目标选新硬盘。注意分区的顺序和大小不要选错了。
注意:一定要选复制所有扇区,DiskGenius不认识ESXi的分区格式,选另外两个选项可能丢数据。
如果你克隆还没有结束DiskGenius就未响应卡死了,这是破解版的bug,建议买正版。
迁移完成以后把新硬盘插到ESXi主机上,应该可以直接开机。
接下来需要用到webUI管理界面和SSH控制台。
SSH用putty连接,账号密码和IP都和webUI管理界面一样。
处理VMFS分区
开机以后你会发现旧的VMFS分区不认识了,空白空间也无法使用。数据存储创建不了
提示"不存在具有可用空间的设备"
1.确认当前硬盘的分区状态
用SSH执行 ls /vmfs/devices/disks 可以查看所有已经挂载的硬盘,能看到类似这样的内容
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:1
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:2
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:3
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:4
t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:5
末尾不带冒号和数字的是整个硬盘
冒号和数字表示这个硬盘里的分区
在ESXi的webUI存储->设备这个界面,点一下物理硬盘,下面会显示“路径”,这个路径就是前面 ls /vmfs/devices/disks 查看的路径
因为ESXi的系统本质上是一个Linux,Linux里万物皆文件,物理设备也会挂载为文件来访问。
右键物理硬盘,编辑分区,界面里能看到这个盘里面有5个分区
1 EFI分区 100M
2 基本数据 4G
3 基本数据 4G
4 VMFSL 120G
5 VMFS 319G
还有空白未分区的空间 1.38T
1是EFI分区
2和3都是ESXi的系统分区
4是旧的VMFS分区,没有重要数据,我不想要了,把它删掉和后面的空白空间一起新建一个VMFS分区
5也是系统分区
接下来要去SSH里操作,webUI上不能直接操作。
2.删除旧的VMFS分区
这个指令里第一个引号里的参数是硬盘的完整路径,这个路径可以在ESXi的webUI
第二个参数是要删除的分区号
partedUtil delete "/vmfs/devices/disks/t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8" 4
3.确认分区删除情况
运行这个指令可以查看分区的状态,确认一下分区4是不是已经删掉了
partedUtil getptbl "/vmfs/devices/disks/t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8"
会输出这样的内容
gpt
243201 255 63 3907029168
1 64 204863 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 208896 8595455 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
2 8597504 16984063 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
3 16986112 268435455 4EB2EA3978554790A79EFAE495E21F8D vmfsl 0
这里不知道为什么分区5的物理位置放到前面去了,但不影响我使用。
原本4的位置和末尾是连着的
GPT是分区表的类型,现在一般都是GPT了
后面的内容是起始位置、结束位置、分区GUID
GUID这里有张表,ChatGPT提供的,建议根据自己的ESXi版本核对一下再用
| 分区用途 | GUID |
|---|---|
| EFI 系统分区 | C12A7328F81F11D2BA4B00A0C93EC93B |
| Microsoft 基本数据 | EBD0A0A2B9E5443387C068B6B72699C7 |
| VMFS | AA31E02A400F11DB9590000C2911D1B8 |
| VMFSL (ESX-OSDATA) | 4EB2EA3978554790A79EFAE495E21F8D |
4.查看可用位置
接下来执行这个指令查看硬盘可用位置
partedUtil getUsableSectors /vmfs/devices/disks/t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8
会输出
34 3907029134
ESXi创建分区的时候会确保分区之间没有交叉,两个分区之间有一定距离的安全间隔
这个34就是前面的几个分区之间预留的间隔,很明显分区表上34后面有一堆分区,第一个分区的起始位置都是64
所以为了保证安全性,我们创建的新分区也应该和最后一个分区保留安全间隔
新分区的起始位置=当前最后一个分区的末尾268435455+安全间隔,我打算用2048作为间隔,所以新分区起始位置为268437505
结束位置=getUsableSectors输出的可用位置,也就是3907029134
5.创建新分区
执行这个指令创建新分区
partedUtil add "/vmfs/devices/disks/t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8" \
gpt "4 268437505 3907029134 AA31E02A400F11DB9590000C2911D1B8 0"
4是分区号
268437505是起始位置,根据你的实际情况计算
3907029134是结束位置,根据你的实际情况填写
AA31E02A400F11DB9590000C2911D1B8是VMFS分区
0是特殊标记,固定写0即可
这时候在ESXi的管理界面已经可以看到分区了,但是数据存储还需要格式化以后才能用
6.格式化新的VMFS分区
执行这个指令
vmkfstools -C vmfs6 -S datastore "/vmfs/devices/disks/t10.NVMe____TOPMORE_Gemini__________________________00010000009743A8:4"
-C vmfs6是分区类型,对于ESXi 8而言一般都是这个格式,如果你不确定该用什么格式,可以通过webUI在其他硬盘里手动新建一个然后查看它的分区格式。
-S datastore是数据存储的名称
引号里面是需要创建成数据存储的分区
执行以后需要等待一会儿,成功以后会显示
Successfully created new volume: 68c4b221-6dbdf08e-4dcd-3c7c3f7deab9
这个 68c4b221-6dbdf08e-4dcd-3c7c3f7deab9 是UUID,能在webUI的存储->数据存储界面看到