V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
shalingye
V2EX  ›  分享创造

将 VHDX 引入到文件存储的设想

  •  
  •   shalingye · 292 天前 · 1772 次点击
    这是一个创建于 292 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想探讨一下关于引入 VHDX 技术到文件存储,是否具有可行性?

    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 技术能否真正应用于文件存储?有哪些阻碍或者不足?这不是一个刚出现的技术,而是在很多年前就被应用于虚拟化的技术,具有相当的可靠性,但似乎从未推广到文件存储。

    笔者的思路和见识都有限,如果你有什么疑问或想法,可以写下你的思考。

    13 条回复    2023-07-23 13:07:40 +08:00
    Donahue
        1
    Donahue  
       292 天前
    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 把固态上需要更新的部分更新到机械
    Donahue
        2
    Donahue  
       292 天前
    @Donahue qemu-nfs -> qemu-nbd
    不过或许也可以开一个虚拟机用网络共享的形式把磁盘暴露出去,暂时不折腾这个了
    billlee
        3
    billlee  
       292 天前   ❤️ 3
    这些功能现代文件系统都有了
    shalingye
        4
    shalingye  
    OP
       292 天前
    @Donahue 你所说的权限问题和 VHDX 没有什么关系,因为它是作为硬盘级别而存在的。另外读写效率虽然会低一些,但由于 Win 似乎对 VHDX 有缓存优化,实际上损失很少。我所提到的不仅仅作为数据存储方面,还包括安全性、打包等,这些都有一些可取之处。
    shalingye
        5
    shalingye  
    OP
       292 天前
    @billlee 实际上只有还原点有类似的吧?另外的功能我或许是 VHDX 独有的,例如跨磁盘,或者说是跨介质、分层存储等。
    ryd994
        6
    ryd994  
       292 天前 via Android
    @shalingye 你说的这几样 zfs 全都有,功能更多的的还有 synology shr 和 unraid
    人家还有 cache 盘,special 盘(文件系统结构数据)的选项
    也就是说,你可以用小容量固态给大容量硬盘加速
    shalingye
        7
    shalingye  
    OP
       292 天前
    @ryd994 win 以外的我确实没了解过,晚点我去看看
    Donahue
        8
    Donahue  
       292 天前
    @shalingye 我是说 qcow2 格式在单独使用 guestmount 和 qemu-nbd 挂载的时候会遇到一些奇奇怪怪的问题,比较麻烦。简单一点的解决方案是用虚拟机挂载并共享出来~

    vhdx 方案就不清楚了,刚刚看到 windows 自带的管理器能够直接挂载 vhdx 文件,感觉可以试试
    shalingye
        9
    shalingye  
    OP
       292 天前 via Android
    @Donahue 那种应该是挂载驱动的问题,Windows 这边因为是微软原生支持的所以没有啥毛病
    nightwitch
        10
    nightwitch  
       292 天前 via Android
    Linux 里面你可以随便新建一个 100g 的空文件,然后格式化为想要的格式,然后挂载到系统上,就有一个 100G 的“硬盘”了,然后各种特性都带。swap 分区的一种实现方式就是这样的,用了几十年的技术了
    Licsber
        11
    Licsber  
       291 天前
    同样折腾了类似需求 不过最终放弃了 目前是文件尽量不打包(为了搜索效率)
    twl007
        12
    twl007  
       291 天前 via iPhone
    基于 filesystem 做 snapshot 不好么 感觉定时做 snapshot 也是一样的效果

    至于备份 感觉更多的是完整性吧 各种 raid 应该就能满足需求了

    真的备份到远端的话还是用用别的程序一个文件一个文件来比较好
    minamike
        13
    minamike  
       290 天前 via iPhone
    感觉和 macOS 的 Time Machine 有点像
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2101 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:21 · PVG 00:21 · LAX 09:21 · JFK 12:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.