Bas*_*asj 5 windows linux mac filesystems duplicate
是否有文件系统可以为用户高效且透明地处理数据重复?
例子:
C:\documents\2019\bigfile.csv(250 MB) C:\temp\bigfile.csv,磁盘上的已用空间仍然是 250 MB(而不是 500 MB!),写时复制样式bigfile.csv:磁盘上使用的空间可能是 251 MB(但仍然不是 500 MB)示例2:
myOSinstalldisk.iso我在磁盘上某处有一个文件如果操作系统自动将每个文件分割成 1 MB 大小的块,并保存它们的 SHA256 哈希值(对于每个 I/O 操作),那么这可以透明地工作。在示例 2 中,当保存myOSinstalldisk.iso到磁盘时,操作系统会注意到块已经在 FS 中(哈希表中已经存在 SHA256 哈希值),并且无需为此再次浪费磁盘空间。
Windows 上哪个 FS 支持此功能?有一些 Mac 版的吗?Linux?
另请参阅:在 Linux 上有效存储重复文件
PS:我不是在寻找Windows快捷方式,也不是符号链接,也不是连接点等(我已经知道并使用这个)
这样的 FS 将具有例如:
Chunk table
==========
SHA256 of the chunk Location on disk (sector)
2cb4b1431b84ec15... 3467634
d35ed83bb927e27e... 23789
8967d75f4bcd9cc4... 872372
b25c8d879ae23e18... 1265152
...
File table
==========
File Chunks
/home/user/file_a 8967d75f4bcd9cc4... b25c8d879ae23e18... 2cb4b1431b84ec15...
/home/user/file_b b25c8d879ae23e18... d35ed83bb927e27e...
Run Code Online (Sandbox Code Playgroud)
在这个(伪)示例中,我们看到了这一点file_a并file_b共享 1MB 的公共块。
当然,由于多种原因,这很棘手:假设我们有 2 个重复的文件file_a,并且file_b我们只是在 的开头附加 1 个字节file_b,那么每个块的 SHA256 哈希值将不同,因此被视为不同的数据...也这样FS 需要保留使用特定块的文件数量的计数器,以便知道何时不再需要它(垃圾收集器样式)等。
ZFS 支持带内基于块的重复数据删除。它是一个文件系统/LVM 混合体,对 Linux 和 FreeBSD 有良好的支持。ZFS 提供了很多令人惊叹的功能:基本上,从文件数据到文件系统元数据的所有内容都会进行校验和,因此可以立即检测到文件系统损坏,甚至可以使用 RAID-Z(由 ZFS 本身单独管理的 RAID)进行修复。
但要付出代价。首先,性能不如传统文件系统。ZFS 关注的是可靠性,而不是速度。其次,基本 ZFS 至少需要 1 GB RAM + 对于您希望进行重复数据删除的每 1 TB 存储,需要 1 GB RAM(有关可用块的信息必须存储在某处,以便高效进行重复数据删除)。重要的是它必须是 ECC RAM(用于服务器和 Apple 计算机,普通 PC 使用非 ECC),因为与传统文件系统不同,翻转位不仅会损坏数据 - 例如。元数据校验和损坏,它可能会不可挽回地损坏文件系统。ECC 通过确保 RAM 错误永远不会写入磁盘来修复此问题。