我想探讨一下关于引入 VHDX 技术到文件存储,是否具有可行性?
经典的场景例如误删了某个文件,可以通过只读挂载之前的 VHDX 节点可以马上取回。
利用父子链机制将父盘和子盘放置在不同的物理磁盘、甚至是 SMB 、ISCSI 空间,在一定程度上类似于 JBOD 阵列的效果。这样就可以将所有介质利用起来,并且由于 VHDX 是作为文件而存在的,不需要重新格式化任何介质,属于一种弹性机制。
例如,利用父子链机制产生了 G1 、G2 、G3 、G4 ,4 个 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 技术能否真正应用于文件存储?有哪些阻碍或者不足?这不是一个刚出现的技术,而是在很多年前就被应用于虚拟化的技术,具有相当的可靠性,但似乎从未推广到文件存储。
笔者的思路和见识都有限,如果你有什么疑问或想法,可以写下你的思考。
1
Donahue 2023-07-21 20:48:03 +08:00
https://v2ex.com/t/957235#reply4
我想过用 qcow2 做储存,但是实践发现一些问题: 用 guestmount 挂载,会导致所有新建文件的权限都是 root, 即使我是用非 root 用户执行挂载命令 用 qemu-nfs 挂载,会有很严重的性能问题,100MB 的文件写入性能只有 100MB/s 左右. 然后修改一些参数"cache=unsafe, discard=on"可以提高写入速度到 2GB/s, 离原生 3GB/s 还有点距离,而且感觉 cache=unsafe 对数据安全也不好。 最后还是简单点,数据分别在固态硬盘一份,机械硬盘一份,机械硬盘是冷备份,平时不接电脑,每半年用 rclone 把固态上需要更新的部分更新到机械 |
2
Donahue 2023-07-21 20:49:23 +08:00
@Donahue qemu-nfs -> qemu-nbd
不过或许也可以开一个虚拟机用网络共享的形式把磁盘暴露出去,暂时不折腾这个了 |
3
billlee 2023-07-21 21:43:46 +08:00 3
这些功能现代文件系统都有了
|
4
shalingye OP @Donahue 你所说的权限问题和 VHDX 没有什么关系,因为它是作为硬盘级别而存在的。另外读写效率虽然会低一些,但由于 Win 似乎对 VHDX 有缓存优化,实际上损失很少。我所提到的不仅仅作为数据存储方面,还包括安全性、打包等,这些都有一些可取之处。
|
5
shalingye OP @billlee 实际上只有还原点有类似的吧?另外的功能我或许是 VHDX 独有的,例如跨磁盘,或者说是跨介质、分层存储等。
|
6
ryd994 2023-07-21 22:55:48 +08:00 via Android
@shalingye 你说的这几样 zfs 全都有,功能更多的的还有 synology shr 和 unraid
人家还有 cache 盘,special 盘(文件系统结构数据)的选项 也就是说,你可以用小容量固态给大容量硬盘加速 |
8
Donahue 2023-07-21 23:41:02 +08:00
@shalingye 我是说 qcow2 格式在单独使用 guestmount 和 qemu-nbd 挂载的时候会遇到一些奇奇怪怪的问题,比较麻烦。简单一点的解决方案是用虚拟机挂载并共享出来~
vhdx 方案就不清楚了,刚刚看到 windows 自带的管理器能够直接挂载 vhdx 文件,感觉可以试试 |
9
shalingye OP @Donahue 那种应该是挂载驱动的问题,Windows 这边因为是微软原生支持的所以没有啥毛病
|
10
nightwitch 2023-07-22 00:11:13 +08:00 via Android
Linux 里面你可以随便新建一个 100g 的空文件,然后格式化为想要的格式,然后挂载到系统上,就有一个 100G 的“硬盘”了,然后各种特性都带。swap 分区的一种实现方式就是这样的,用了几十年的技术了
|
11
Licsber 2023-07-22 00:55:04 +08:00
同样折腾了类似需求 不过最终放弃了 目前是文件尽量不打包(为了搜索效率)
|
12
twl007 2023-07-22 02:12:45 +08:00 via iPhone
基于 filesystem 做 snapshot 不好么 感觉定时做 snapshot 也是一样的效果
至于备份 感觉更多的是完整性吧 各种 raid 应该就能满足需求了 真的备份到远端的话还是用用别的程序一个文件一个文件来比较好 |
13
minamike 2023-07-23 13:07:40 +08:00 via iPhone
感觉和 macOS 的 Time Machine 有点像
|