最近一直想给NAS直通一张SATA3.0扩展卡,但是买了几张尝试,直通后一直卡在“已启用/需要重新引导”,偶然的一次搜索发现可以将板载SATA控制器直接直通,我想了一下我的NRS上装的是一张M.2接口的主硬盘,便兴(bu)高(ji)采(hou)烈(guo)的折腾了起来…

开机,修改完设置后便开始重新引导ESXI一气呵成…然而从启动开始就非常缓慢,启动系统便花了3分钟…这时我感觉有些不对劲,进入系统控制台后果然,仅有的三台虚拟机全都是以红色感叹号的方式与我见面…我便赶紧进入设置页面赶紧取消直通,然而这并没有什么用,主硬盘无法访问已经无法保存设置了…

接着我们来看看是怎么做的吧:

  1. 启动Linux Live系统(任何Linux发行版也是一样的,只要是桌面版基本都带有预览功能)
  2. 运行Terminal,接下来的shell命令都在这个终端里执行
  3. 使用parted -l命令确认ESXi保存配置文件的分区(通常是/dev/sda5
  4. 挂载分区,要修改的文件就在分区根目录下
    mount /dev/sda5 /mnt
    ls -l /mnt/state.tgz
  5. 创建一个文件夹用来做文件修改
    mkdir ~/workspace && cd !$
    cp /mnt/state.tgz .
  6. 解压缩state.tgz文件
    tar xf state.tgz
    tar xf local.tgz
    ls -l ./etc/vmware/esx.conf
    注意:ESXi 6.5之前版本的配置文件为esxi.conf
  7. 修改esx.conf文件,将其中的passthru改为vmkernel即可取消直通设置,一般是直通设置地址栏的地址那一项,若你无法确定哪一项对应你的SATA控制器,就使用下面的命令将它们全部修改,日后再重新设置
    a) 使用下面的命令查看ESXi系统中被设置为直通的设备
    grep -w passthru ./etc/vmware/esx.conf
    b) 使用下面的命令更改ESXI系统中所有直通设备状态
    sed -i 's/passthru/vmkernel/' ./etc/vmware/esx.conf
    修改ESXi配置文件
  8. 删除旧的tgz文件
    rm local.tgz state.tgz
    注意:务必要删除旧的local.tgzstate.tgz文件,切不可图省事直接创建压缩包来“覆盖”原有的tgz文件!否则更新后的文件将导致ESXi启动失败(Check failed: installing file ./local.tgz (sandbox is local.tgz)),这是我踩的另一个坑!
    ESXi启动失败
  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 -f ./state.tgz /mnt/
    注意:如果要备份之前的state.tgz文件,需要创建一个文件夹才可以:mkdir -p /mnt/backup && cp /mnt/state.tgz /mnt/backup/
  11. 重启服务器
    reboot

重新启动后,你熟悉的虚拟机,你这些日子一来折腾的成果,就一个不少的回来啦!

声明:本文经本人实测后发布。参考“ESXi直通SATA控制器导致系统盘无法访问的解决办法”,有删改!