ESXi 切换硬盘直通后无法恢复的解决办法
起因:近日,准备了一块SATA固态硬盘,计划对现有的ESXI虚拟机上新增扩容。因为只增加一块固态,也不打算做raid,就打算把它当作单独的存储来用。在网上搜了一些方法,脑子一热,通过ESXI控制台程序,把硬盘改成直通了。发现不起效果,打算改回去,重起后,发现失败。原来的硬盘没了,数据存储也不显示了,主机上的虚机也无法打开了。天崩开局。。。。
恢复经历:
1、线下求助了许多大神,推荐重装ESXI系统,用备份文件重建虚机。(终级方案,暂不执行)
2、线上找了很多资料和方法,有说开启主机SSH,通过shell工具连接上,用命令行改配置文件。经过测试,重启后依然不生效。如果和我有相同经历的朋友,不要尝试了。
3、直接上解决方案,经测有效。
感谢博客园【董帅岭】,以下是参考链接:
ESXi 切换直通导致无法识别硬盘解决 - 豆腐IT - 博客园s在解决虚机挂载U盘的过程中(已经处理了:VMware中的虚机如何挂载U盘),怎么样都无法加载U盘,故进行了一次操作直通操作的过程中,不小心把所有的存储和控制器全部直通了,导致Esxi主机无法识别到自己的存储信息,然后就出现了后面的事情。进而所有的虚拟机都无法看到,现将处理过程逐一给大家解析,同时也感https://www.cnblogs.com/dsl146/p/15023129.html本来我是打算直接转载大神文章的,想到自己中间走的过程,想在几处关键点加些注释和说明,避免后续有用到的朋友走弯路。对于有Linux命令行操作经验的人,直接看上述链接就可以。以下,我对大神文章做些标记,重点提供给没有命令行经验的人参考。
什么是VMware直通?
VT-d 、DirectPath I/O,通过 DirectPath I/O,虚拟机可以使用 I/O 内存管理单元访问平台上的物理 PCI 功能,就是俗称的虚拟化直通,简单理解就是允许宿主机将某些硬件资源的管辖权直接移交给虚拟机,虚拟机会以直通独占的方式使用硬件,宿主机将不能再使用此硬件,利用效率几乎等同于将硬件插到了虚拟机的主板扩展槽里一样,最实用的目的是避免了虚拟化平台自身软件层转换带来的效能下降。通俗易懂,明白很重要。
为什么无法连接到存储还能开启SSH和登录VM宿主机?
ESXi从硬盘读取了程序和配置文件,将其载入内存并运行起来,才生效了直通设置。重点来了:当更改成直通后,ESXI就失去了对硬盘的访问能力,写入能力。可以理解为只能看,不能改。改了也没用,因为在内存里面运行。我想这就是为什么我们通过SSH命令行改了直通配置文件,重启后仍然无效的原因。
关于Esxi的一般有几个分区?
ESXi操作系统中通常会有9个分区。这些分区及其用途如下:
1、 /dev/sda1:ESXi-OS分区,包含ESXi操作系统和必要的系统文件。
2、 /dev/sda5:Scratch分区,用于存储ESXi主机的日志文件。
3、 /dev/sda6:VMFS数据存储分区,用于存储虚拟机的磁盘文件。
4、 /dev/sda7和/dev/sda8:都是用于存储ESXi主机的核心转储文件的分区(VMKCore分区和Core分区)。
5、 /dev/sda9:ATS分区,用于存储ESXi主机的ATS日志文件。
6、 /dev/sda10:LVM分区,用于存储ESXi主机的LVM元数据。
7、 /dev/sda11:LVM2_member分区,用于存储ESXi主机的LVM2元数据。
8、 /dev/sda3:BootBank分区,用于存储ESXi主机的引导文件。
这些分区在ESXi系统中扮演着重要的角色,确保系统能够高效、稳定地运行。需要注意的是,不同版本的ESXi可能会有一些差异,例如ESXi7.0相对于6.7版本,在系统分区的空间上有所增大。但总体来说,ESXi操作系统中通常包含上述9个分区。
感兴趣的,可以再去细细研究。
环境:我的esxi系统版本是6.7
操作步骤:
1、准备桌面版Linux系统,我下载的是ubuntu desktop版本。
https://ubuntu.com/download/desktop?ref=its-foss
下载完成之后 ,将ISO文件写入到U盘,这里需要准备一个至少8GB的U盘。写入方法,推荐使用UltraISO软件。
2.找到Terminal:使用制作好的U盘启动主机,进入ubuntu系统,点试用,不要安装系统。进到桌面后,找到并运行Terminal,接下来的shell命令都在这个终端里执行。注意:录入命令前,切换到管理员模式,输入:sudo -i
3.查看分区:使用parted -l(小写的L) 命令确认ESXi保存配置文件的分区(通常是/dev/sda5也可能sda6),如果该命令无效,也可以尝试其他命令:fdisk -l、lsblk等。
4.挂载分区,要修改的文件就在分区根目录下
mount /dev/sda5 /mnt 这个命令的作用是将设备 /dev/sda5 挂载到目录 /mnt 下
ls -l /mnt/state.tgz 这个命令查看当前目录下所有可见文件的详细属性
5.创建一个文件夹用来做文件修改
mkdir ~/test
cd ~/test
cp /mnt/state.tgz state.tgz
(cp这个命令的作用是将 /mnt/state.tgz 文件复制到当前工作目录下,并将复制的文件命名为 state.tgz)
6.解压缩state.tgz文件
tar xf state.tgz
tar xf local.tgz
ls -l ./etc/vmware/esx.conf 用于列出 /etc/vmware/esx.conf 文件的详细信息。
注意:ESXi 6.5之前版本的配置文件为esxi.conf。
7.修改esx.conf文件,将其中的passthru改为vmkernel即可取消直通设置
a) 使用下面的命令查看ESXi系统中被设置为直通的设备
grep -w passthru ./etc/vmware/esx.conf
b) 若你无法确定哪一项对应你的SATA控制器,就使用下面的命令将它们全部修改
sed -i 's/passthru/vmkernel/' ./etc/vmware/esx.conf
(sed是替换命令,将字符串passthru替换成vmkernel)
8.删除旧的tgz文件
rm local.tgz state.tgz
注意:务必要删除旧的local.tgz和state.tgz文件(前辈走过了路,要听话),切不可图省事直接创建压缩包来“覆盖”原有的tgz文件!否则更新后的文件将导致ESXi启动失败(Check failed: installing file ./local.tgz (sandbox is local.tgz)).
9.制作新的state.tgz文件
tar czf local.tgz etc
chmod 755 local.tgz
tar czf state.tgz local.tgz
chmod 755 state.tgz
10.替换原有的state.tgz文件
cp state.tgz /mnt/
11.重启,大功告成
reboot
总结:对于习惯于windows平台的用户,处理此类问题确实有些难度。幸好早年学过DOS命令行的,理解起来快一些。给广大网友们一条忠告,对于自己的正式环境,不要轻易做出改动。对于网上的解决方案可能产生的后果要充分理解确认后再操作。与君共勉!