是否可以仅使用连接到两个虚拟机的 CSV 上的 Hyper-V 共享 VHDX 进行文件共享?
我正在我的环境中测试 SVHDX,但无法使其正常工作。我们已设置故障转移群集和由 SAN over FC 支持的 CSV,我已将 SVHDX 放在 CSV 上并将该磁盘连接到两个虚拟机。现在磁盘上存在不一致,因为我在 VM1 上保存了一些文件,但它们在 VM2 上不可见,并且 CHKDSK 报告错误。我甚至可以在共享磁盘上创建同名文件。
答案1
是的。您不能在多台计算机之间共享文件系统,除非文件系统明确设计为可以共享。因为计算机会缓存元信息并假定自己是所有者。
答案2
共享 VHDX 是块共享,而不是文件共享。
现在我们来离题一下,因为你并不是第一个问这个问题的人。磁盘是一种块设备。它通过响应“读取块 23971”和“写入块 1082”等命令来工作。文件系统是一种将数据存储到块设备的方法。当你写入文件时,文件系统代码会在磁盘上找到一些空闲块,并将数据写入其中。对于本讨论来说,也许更重要的是,它会将其他数据写入磁盘,记录文件的名称、文件存储在哪些块中、谁有权访问该文件等。
如果两台不同的机器使用同一个块设备,它们需要协调它们的操作,否则它们会互相干扰,各自都认为它们可以决定数据在磁盘上的存放位置以及如何记录数据的位置。
因此,如果您想共享磁盘,最常见的方法是将其交给一台计算机,让该计算机拥有该磁盘,并通过 NFS 或 SMB 等网络文件系统与其他计算机共享。所有其他计算机都通过网络请求数据。文件服务器拥有并管理该磁盘。客户端只能看到文件。所有者(文件服务器)看到映射到块上的文件。
不过,在少数情况下,您希望两台或多台计算机直接使用块设备(磁盘)。为此,您需要将这两台或多台计算机紧密连接在一起,以便它们能够协调操作。这称为“形成集群”。然后,您需要在磁盘上运行集群文件系统。在运行 Windows 时,如果没有任何第三方软件,集群文件系统的唯一选择是 CSVFS。在运行 Linux 或其他操作系统时,您还有其他选择。
再次强调,我建议使用文件服务器来完成您的任务。但共享 VHDX 的目的是允许虚拟机集群运行集群文件系统。
当您想要通过两个 VM 构建 SQL Server 集群时,这将非常有用(当 Windows 作为客户机时),这样 SQL 本身就具有高可用性。
或者,您可以使用共享 VHDX 构建多 VM Windows 文件服务器群集。您可能这样做是因为您希望即使其中一个物理主机发生故障,文件服务器群集仍可供其客户端使用。
如果没有共享 VHDX,如果您环境中的一台物理主机死机,这个假设的 SQL 或文件服务器群集将暂时脱离网络。如果主机本身是群集的,则一旦发生故障,VM 将在另一个节点上重新启动。但从客户端的角度来看会有一些停机时间。(使用 SQL Server,仍然会有一点停机时间,但客户端可以管理它。使用文件服务器群集,您可以让客户端(只要它们运行的是 SMB 3.0 或更高版本)体验自动故障转移并且不会断开连接。)