AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1497625
Accepted
xerostomus
xerostomus
Asked: 2023-12-20 21:20:50 +0800 CST2023-12-20 21:20:50 +0800 CST 2023-12-20 21:20:50 +0800 CST

ZFS 如何处理文件的冗余副本?

  • 772

我有包含旧增量备份的目录,它们充满了各种文件的冗余副本。我的计划是使用 ZFS 来处理文件校验和并防止冗余。

所以一个模型情况:

cd /poolname/zalohy
zfs list -p poolname
NAME        USED         AVAIL     REFER  MOUNTPOINT
poolname  995328  374734901248     98304  /poolname

for i in {0..10}; do echo {1..99999} >file$i.txt; done # I create eleven identical files of the size 588888 bytes.

zfs list -p poolname
NAME         USED         AVAIL     REFER  MOUNTPOINT
poolname  5677056  374730219520     98304  /poolname

374734901248 - 374730219520 = 4 681 728, i.e. cca 5MB.

我预计 11 个相同的文件(具有相同的校验和)将占用略多于 588888 字节的空间,因此减少了十倍。

哪里有问题。如何处理这种冗余?是否有比 ZFS 更好的文件系统来实现此目的?

非常感谢您的帮助。

backup
  • 2 2 个回答
  • 69 Views

2 个回答

  • Voted
  1. Best Answer
    Artur Meinild
    2023-12-20T22:29:25+08:002023-12-20T22:29:25+08:00

    一般来说

    这要求您的 ZFS 池(或文件系统)已配置为启用重复数据删除。

    来自OpenZFS 文档:

    重复数据删除

    重复数据删除是在块级别删除冗余数据、减少存储数据总量的过程。如果文件系统启用了dedup属性,则重复数据块将被同步删除。结果是仅存储唯一数据,并在文件之间共享公共组件。

    重复数据删除是一项非常消耗资源的操作。通常建议启用重复数据删除时,每 1 TiB 存储至少配备 1.25 GiB RAM。计算确切的要求在很大程度上取决于池中存储的数据类型。

    在设计不当的系统上启用重复数据删除可能会导致性能问题(I/O 和管理操作缓慢)。由于内存耗尽,它可能会导致导入池时出现问题。重复数据删除会消耗大量的处理能力 (CPU) 和内存,并产生额外的磁盘 I/O。

    在创建启用重复数据删除的池之前,请确保您已适当规划硬件要求并实施适当的恢复实践,例如定期备份。考虑使用压缩属性作为资源密集度较低的替代方案。

    默认情况下,重复数据删除处于禁用状态,因为如上所述,它可能会占用大量 CPU 和内存。

    与所有 ZFS 属性一样,该dedup属性可以在 ZFS 池或数据集(文件系统)级别设置,并由底层文件系统继承。

    在启用之前dedup,您应该考虑以下事项:

    • 确保您的数据真正受益于重复数据删除
    • 确保您的系统有足够的 CPU 和内存来支持该功能

    要检查您的池是否会受益dedup,您可以运行(其中tank是池名称):

    sudo zdb -S tank
    

    模拟-S统计dedup数据,并且仅适用于整个池。输出将是一个模拟的 DDT(重复数据删除表),并以一些统计信息结尾,例如:

    dedup = 1.20, compress = 1.28, copies = 1.03, dedup * compress / copies = 1.50
    

    根据经验,如果估计dedup比率高于 2,重复数据删除可能是节省空间的一个选项。在上面的示例中,由于dedup比率为 1.2,因此可能不值得。

    要检查dedup池的属性,请键入:

    zfs get dedup tank
    

    要为池设置重复数据删除,请键入:

    sudo zfs set dedup=on tank
    

    要仅为数据集 ( tank/home) 设置它,请键入:

    sudo zfs set dedup=on tank/home
    

    dedup在现有池上启用该功能后,只会对新创建的数据进行重复数据删除。

    compression=lz4正如文档中提到的,在池上设置该属性可能是更好的选择(lz4压缩对大多数系统几乎没有性能影响)。

    针对您的情况

    对于您的特定情况,我将创建一个仅用于备份的特定数据集(文件系统),并仅在此数据集上启用重复数据删除。

    例如,如果您创建 ZFS 数据集poolname/backup:

    sudo zfs create poolname/backup
    

    然后设置:

    sudo zfs set dedup=on poolname/backup
    

    通过这种方式,您可以测试它是否按预期方式工作。如果遇到问题,您可以随时将备份传输到普通的 ZFS 数据集而不dedup启用(但也可以使用压缩)。

    注意:一旦启用池或数据集的重复数据删除功能,就无法将其禁用。在这种情况下,只能备份数据,销毁数据集,然后将数据移动到另一个数据集而不进行重复数据删除。这就是为什么我永远不会建议在整个 Zpool 上启用重复数据删除。

    • 2
  2. HankB
    2023-12-22T05:52:27+08:002023-12-22T05:52:27+08:00

    Mastodon 上的另一个有用的用户刚刚发布了该命令的链接hardlink(https://manpages.debian.org/unstable/util-linux/hardlink.1.en.html),这听起来比我的程序更好地解决了您的问题写道(在对更长且明确的答案 WRT ZFS 的评论中提到。)

    在 Ubuntu 22.04 上,hardlink默认安装(作为软件包的一部分util-linux),在您的情况下,默认运行的命令是(如果目录/poolname/zalohy包含备份数据):

    hardlink /poolname/zalohy
    

    请参阅hardlink 手册页以获取更多信息。

    • 1

相关问题

  • NTFS 备份映像不会挂载

  • 如何备份/恢复我的 Empathy 日志?

  • 如何将 Ubuntu 放在非闪存外部 USB 硬盘驱动器上?

  • 备份工具比较

  • 如何使文件夹与外部 USB 硬盘保持同步?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve