我一直在尝试通过刻录到 DVD 的安装程序映像对 VMware ESXi 5.0.0 update 1 进行交互式更新至 5.0.0 update 2。
第一次运行更新时,一切似乎都顺利。我选择了“升级 ESXi,保留 VMFS 数据存储”选项。
但是,安装程序崩溃,出现“意外错误”:“OSError:[Errno 39] 目录不为空”。它引用了 VMFS 卷根目录中的 $RECYCLE.BIN 目录,而该目录原本只包含 imgdb.tgz。使用维护控制台,我还发现 $RECYCLE.BIN 目录只包含 DESKTOP.INI,其内容与 Windows shell 扩展一致。
我怀疑这个文件是在我使用基于 Windows 的工具(单独启动)检查和管理主机安装到的 RAID 卷时意外出现的。无论如何,这个文件看起来不属于这里,而且似乎确实扰乱了更新,所以我只是通过管理控制台将其删除了。
然后我尝试再次进行更新,但这次安装程序没有提供“升级 ESXi,保留 VMFS 数据存储”选项。安装程序现在针对驱动器指示:
找到 ESX(i):否
(安装程序崩溃之前它曾说“是”。)
它可以让我从头开始重新安装 ESXi,同时保留数据存储,但是我过去遇到过诸如在重新导入虚拟机时 MAC 地址发生变化之类的问题,所以我不想走那条路。
我也尝试删除 $RECYCLE.BIN 目录本身但这没有任何改变。
主机仍然运行良好,但我需要安装更新 2 才能支持 Solaris 11.1。
任何信息或建议都将不胜感激!
谢谢,凯文
答案1
我也遇到了这个问题并且找到了解决办法。
解释
首先解释一下,这个问题是由于启动可以访问数据存储驱动器的 Windows 引起的,Windows 在每个分区中都会创建一个 $RECYCLE:BIN 文件夹,但 $ 符号会给 Linux 带来问题,所以我们需要将其删除。因此,如果您必须启动 Windows,我建议您在升级之前清理这些内容,或者最好在启动 Windows 之后清理它们。
解决根本原因
第一步是清理 $RECYCLING.BIN 文件夹。
- 启用 SSH 并连接到主机
- 跑步
cd /vmfs/volumes/
- 运行
ls -allh
此命令将列出所有卷 - 对每个卷运行以下命令,并记下哪些卷具有 $RECYCLING.BIN 文件夹
ls -allh [volume id]
(将 [volume id] 替换为之前列出的每个卷)
现在我们已经确定了哪些卷包含我们需要清理的文件夹。
- 使用导航到卷
cd [volume id]
- 我们首先将重命名文件夹以摆脱 $,运行
mv '$RECYCLING.BIN' REC
(包括单引号)(我认为这不是必需的,但我还是这样做了) - 现在我们删除文件夹
rm -rf REC
该文件夹现在应该消失了,我再次运行 ls 以确保该文件夹已消失但这是可选的,我还运行ls REC/
以确保在删除之前目录中没有其他任何内容。
完成升级
现在我们将处理实际完成升级的问题,因为我们已经基本上“刻录”了从 DVD 选项进行的升级,所以我们需要另一种方法,幸运的是,有几种升级方法。
- 首先,我们需要关闭你的虚拟机并将主机置于维护模式
- 如果之前没有启用 SSH
- 我们需要启用防火墙规则 httpclient,您可以通过 GUI 或命令执行此操作
esxcli network firewall ruleset set -e true -r httpClient
现在进行实际升级,有两种方法可以做到这一点,a.让主机下载所需的文件或b.从VMWare的站点下载升级zip并上传到主机(这需要您的MyVMWare帐户上的相应许可证)。
- 运行命令
esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p ESXi-6.5.0-4564106-standard
在这个命令中,我正在升级到 6.5,如果您要升级到较新的版本,那么您将需要知道配置文件名称,幸运的是,您可以从 VMWare 网站或 iso 映像中获取它,在磁盘的根目录中有一个名为 PROFILE.XML 的 XML 文件,如果您打开它,您将看到标签<name>
,这是磁盘上的版本,在命令的最后一部分替换它。
如果你从 ZIP 升级,则可以使用命令
esxcli software vib update -d /vmfs/volumes/DATASTORE/VMware-ESXi-6.0.0-2494585-depot.zip
- 现在重新启动,当主机重新启动时,你应该已经使用最新版本
- 最后从 GUI 或使用命令禁用 httpclient 防火墙规则
esxcli network firewall ruleset set -e false -r httpClient
,退出维护模式,并且不要忘记禁用 SSH
我知道这已经有 4 年了,但它仍然是 Google 上的顶级搜索结果之一,并且只有另一个相关结果,因此这适用于任何遇到的人。