VHDX 可以为数据提供类似还原点的保护。
经典的场景例如误删了某个文件,可以通过只读挂载之前的 VHDX 节点可以马上取回。
VHDX 可以跨磁盘存储。
利用父子链机制将父盘和子盘放置在不同的物理磁盘、甚至是 SMB 、ISCSI 空间,在一定程度上类似于 JBOD 阵列的效果。这样就可以将所有介质利用起来,并且由于 VHDX 是作为文件而存在的,不需要重新格式化任何介质,属于一种弹性机制。
VHDX 利于备份。
例如,利用父子链机制产生了 G1 、G2 、G3 、G4 ,4 个 VHDX ,可以将这些 VHDX 文件分别保存到不同的存储介质中,例如云盘、冷备份等等。原始 VHDX 链条的任何一块 VHDX 出现丢失( VHDX 所在的物理磁盘损坏),都可以通过补全 VHDX 链条的方式取回数据。而每一个 VHDX 都仅仅包含所有数据的一部分(取决于建立该节点和下一个节点的时间间隔),例如一个完整的块或者扇区,因此除了第一个节点以外,都无法被单独打开使用,具有相对的安全性。
VHDX 有一定的抗病毒能力。
某些勒索病毒会把电脑上的文件加密,然后给你留下勒索信息。然而如果采用了 VHDX 技术存储,可以立即回到上一个节点取回所有文件,因为病毒所做的任何加密都只是对原有文件的修改,VHDX 仅仅是将这些修改保存到了最新的子节点里面。VHDX 文件序列(包括整条父子链,例如 G1~G4 )本身在挂载的时候是无法被修改的,具有系统内核级别的占用。
缺点:
缺点也是有的。例如读写效率相比原生硬盘较低。同时也会占用更多的 CPU 时间。此外,VHDX 还会占用少部分空间用于记录块分配表以及元数据。
VHDX 不具备任何压缩的能力,仅仅是将数据打包,提到这个就延伸出另一个用法:文件打包。使用 VHDX 来打包文件的好处在于,在传输大量数据的时候节约压缩和解压的时间,接收者仅仅只需要双击即可挂载 VHDX 文件为一个单独的盘符,然后访问里面的文件。VHDX 自从 Win8 开始已经得到了广泛支持,在 PC 市场普及很广,Linux 也有相对应的 VM 工具用于挂载。
相关软件
BOOTICE 是一个很好的软件,实现了很多 VHDX 的功能,但它利用的是系统的接口。另外,我已经完成了 VHDX Tools 的大部分开发,但由于界面还不太美观还需锤炼,所以并未发布。技术方面是根据微软的 VHDX 文档:MS-VHDX 自己实现的逻辑,大部分功能可以跨平台运行而无需依赖于 Powershell 接口。目前的功能主要是对 VHDX 进行管理,如果有需要的话后期会开发对文件存储相关的功能,例如创建完 VHDX 后顺便把文件系统也创建了,这样挂载完毕后就是一个可用的分区;对父子链的记录也有一定的必要。
一些问题
VHDX 技术能否真正应用于文件存储?有哪些阻碍或者不足?这不是一个刚出现的技术,而是在很多年前就被应用于虚拟化的技术,具有相当的可靠性,但似乎从未推广到文件存储。
笔者的思路和见识都有限,如果你有什么疑问或想法,可以写下你的思考。