我有一台带有 20G 磁盘(磁盘 1)的虚拟机ubuntu20.04
。我向 添加了另一块 50G 磁盘(磁盘 2)ubuntu20.04
。当 VMWare 让我命名新的 50G 磁盘时,我为其命名50G
以减少误读,因为默认名称以 等为后缀-001
,这使我总是混淆哪些 vmdk 文件与我的新磁盘设备匹配。
安装好两个磁盘后,我拍摄了快照state-original
。
对磁盘 2 进行一些修改后,我备份了带有字符串的 vmdk 文件,50G
因为我想在另一台虚拟机中使用新状态的磁盘 2,然后回滚到state-original
。
但是当我将磁盘 2 的备份 vmdk 文件添加到另一台虚拟机时ubuntu18.04
,我发现它的内容与状态相同state-original
。
我想知道发生了什么?对原始文件的更改会对备份文件生效吗?
一张图片使这个过程更清楚。1、2、3、4 表示我所做事情的顺序。
答案1
.vmdk
VMware Workstation 和 Player 对虚拟磁盘 ( ) 文件使用以下命名方案:
VIRTUAL_MACHINE_NAME-XXXXXX-sYYY.vmdk
其中VIRTUAL_MACHINE_NAME
是虚拟机的名称(创建时),XXXXXX
是增量磁盘编号,并YYY
标识“磁盘范围”(将虚拟磁盘拆分为多个文件时的磁盘片段)。
作为一个具体的例子,考虑以下一组.vmdk
文件:
Windows10.vmdk
Windows10-s001.vmdk
Windows10-s002.vmdk
Windows10-s003.vmdk
Windows10-000002.vmdk
Windows10-000002-s001.vmdk
Windows10-000002-s002.vmdk
Windows10-000002-s003.vmdk
这里我有一个名为“Windows10”的虚拟机的磁盘文件。这些文件的存在-s###
表明虚拟机使用分割磁盘,磁盘被分成 3 个部分。.vmdk
没有-s###
后缀的文件是磁盘描述符文件;它们包含分割磁盘的元数据,并且是非常小的文本文件。 Windows10.vmdk
是与文件相对应的磁盘描述符Windows10-s###.vmdk
。Windows10-000002.vmdk
是文件的磁盘描述符Windows10-000002-s###.vmdk
。(当然,如果您使用单片磁盘而不是分割磁盘,则不会有单独的磁盘描述符和磁盘范围文件;它们将合并为一个.vmdk
文件。)
的存在Windows10-000002.vmdk
表明已对虚拟机进行了快照。 Windows10.vmdk
(及其相应的范围)是根据磁盘;它存储拍摄快照时虚拟机磁盘的状态。 Windows10-00002.vmdk
(及其相应的磁盘范围)是增量磁盘存储来自前一个磁盘的更改(在本例中为基础磁盘,但如果您拍摄多个快照,则可能会出现增量磁盘链)。修改任何非叶磁盘都将损坏链中后面的所有磁盘,因此非叶磁盘应被视为不可变的。
当您将虚拟磁盘添加到另一台虚拟机时,您应该:
- 选择磁盘描述符文件,而不要选择磁盘范围(
-s###
)文件。 - 仅选择一个叶
.vmdk
文件。通常(但并非总是)这将是最高的增量磁盘编号。如果您有多个快照,您可以检查虚拟机设置 > 硬盘以查看当前正在写入的虚拟磁盘的文件名。