ZFS文件系统的重复数据删除功能是一种从ZFS池/文件系统中删除冗余数据的方法。简单地说,如果你在ZFS池/文件系统中存储了很多文件,而其中一些文件是相同的,那么这些文件的副本将只保留在ZFS池/文件系统中。其余的将是对该文件副本的引用。这将在你的ZFS池/文件系统上节省大量的磁盘空间。
从技术上讲,当你在ZFS池/文件系统上复制/移动/创建新文件时,ZFS将把它们分成几块,并将这些几块与存储在ZFS池/文件系统上的现有几块(的文件)进行比较,看是否发现任何匹配。因此,即使文件的部分内容是匹配的,重复数据删除功能也可以节省你的ZFS池/文件系统的磁盘空间。
在这篇文章中,我将,告诉你如何在你的ZFS池/文件系统上启用重复数据删除功能。那么,让我们开始吧。
创建一个ZFS池
为了试验ZFS重复数据删除,我将在镜像配置中使用vdb和vdc存储设备创建一个新的ZFS池。如果你已经有一个用于测试重复数据删除的ZFS池,你可以跳过这一部分。
$ sudo lsblk -e7
要使用镜像配置中的vdb和vdc存储设备创建一个新的ZFS池pool1,运行以下命令。
$ sudo zpool create -f pool1 mirror /dev/vdb /dev/vdc
一个新的ZFS池pool1应该被创建,你可以在下面的屏幕截图中看到。
$ sudo zpool status
在ZFS池上启用重复数据删除功能。
在本节中,我将向你展示如何在你的ZFS池上启用重复数据删除功能。
你可以通过以下命令检查重复数据删除是否在你的ZFS池pool1上启用。
$ sudo zfs get dedup pool1
正如你所看到的,在默认情况下,重复数据删除没有被启用。
要在你的ZFS池上启用重复数据删除,请运行下面的命令。
$ sudo zfs set dedup=on pool1
重复数据删除应该在你的ZFS池pool1上启用,你可以在下面的截图中看到。
$ sudo zfs get dedup pool1
在ZFS文件系统上启用重复数据删除功能。
在本节中,我将向你展示如何在ZFS文件系统上启用重复数据删除功能。
首先,在你的ZFS池pool1上创建一个ZFS文件系统fs1,如下所示。
$ sudo zfs create pool1/fs1
正如你所看到的,一个新的ZFS文件系统fs1被创建了。
$ sudo zfs list
由于你已经在poolpool1上启用了重复数据删除,重复数据删除也在ZFS文件系统fs1上启用了(ZFS文件系统fs1从poolpool1上继承)。
$ sudo zfs get dedup pool1/fs1
由于ZFS文件系统fs1从ZFSpool pool1继承了重复数据删除**(dedup**)属性,如果你在ZFS poolpool1上禁用了重复数据删除,那么ZFS文件系统fs1的重复数据删除也应该被禁用。如果你不希望这样,你将不得不在你的ZFS文件系统fs1上启用重复数据删除功能。
你可以在你的ZFS文件系统fs1 上启用重复数据删除功能,方法如下。
$ sudo zfs set dedup=on pool1/fs1
正如你所看到的,重复数据删除已经为你的ZFS文件系统fs1启用。
测试ZFS重复数据删除。
为了使事情更简单,我将从ZFSpool1中销毁ZFS文件系统fs1。
$ sudo zfs destroy pool1/fs1
ZFS文件系统fs1应该被从poolpool1中删除。
我已经在我的电脑上下载了Arch Linux的ISO镜像。让我们把它复制到ZFSpool pool1上。
$ sudo cp -v Downloads/archlinux-2021.03.01-x86_64.iso /pool1/image1.iso
正如你所看到的,我第一次复制Arch Linux ISO镜像时,占用了ZFS poolpool1中大约740MB的磁盘空间。
另外,注意重复数据删除率**(DEDUP**)是1.00x。1.00x的重复数据删除率意味着所有的数据都是唯一的。所以,现在还没有重复数据。
让我们再把同样的Arch Linux ISO镜像复制到ZFS池pool1中。
正如你所看到的,尽管我们使用了两倍的磁盘空间,但只使用了740 MB的磁盘空间。
重复数据删除率**(DEDUP**)也增加到2.00倍。这意味着重复数据删除正在节省一半的磁盘空间。
$ sudo zpool list
尽管使用了大约740MB的物理磁盘空间,但在逻辑上,ZFS池pool1上使用了大约1.44GB的磁盘空间,你可以在下面的截图中看到。
$ sudo zfs list
让我们再把同一个文件复制到ZFSpool1上几次。
正如你所看到的,在同一文件被复制5次到ZFSpool pool1后,逻辑上该池使用了大约3.59GB的磁盘空间。
$ sudo zfs list
但是同一文件的5次拷贝只使用了物理存储设备的约739MB的磁盘空间。
重复数据删除率**(DEDUP**)约为5**(5.01x**)。所以,重复数据删除节省了ZFS池pool1的大约80%(1-1/DEDUP)的可用磁盘空间。
你存储在ZFS池/文件系统上的数据的重复数据删除率(DEDUP)越高,你通过重复数据删除节省的磁盘空间就越多。
ZFS重复数据删除的问题。
重复数据删除是一个非常好的功能,如果你存储在ZFS池/文件系统上的数据是冗余的(类似的文件被多次存储),那么它可以节省你的ZFS池/文件系统的大量磁盘空间。
如果你存储在ZFS池/文件系统上的数据没有太多的冗余(几乎是唯一的),那么重复数据删除对你没有任何好处。相反,你最终会浪费ZFS可以用于缓存和其他重要任务的内存。
为了使重复数据删除发挥作用,ZFS必须跟踪存储在你的ZFS池/文件系统上的数据块。为了做到这一点,ZFS在你的计算机内存(RAM)中创建一个重复数据删除表(DDT),并将你的ZFS池/文件系统的哈希数据块存储在那里。因此,当你试图在你的ZFS池/文件系统上复制/移动/创建一个新文件时,ZFS可以检查匹配的数据块,并使用重复数据删除来节省磁盘空间。
如果你不在你的ZFS池/文件系统上存储多余的数据,那么几乎不会发生重复数据删除,节省的磁盘空间可以忽略不计。无论重复数据删除是否节省磁盘空间,ZFS仍然需要在重复数据删除表(DDT)中跟踪你的ZFS池/文件系统的所有数据块。
所以,如果你有一个大的ZFS池/文件系统,ZFS将不得不使用大量的内存来存储重复数据删除表(DDT)。如果ZFS重复数据删除没有为你节省多少磁盘空间,那么所有的内存都被浪费了。这是重复数据删除的一个大问题。
另一个问题是CPU的高利用率。如果重复数据删除表(DDT)太大,ZFS也可能要做大量的比较操作,它可能会增加你电脑的CPU利用率。
如果你打算使用重复数据删除,你应该分析你的数据,了解重复数据删除对这些数据的作用,以及重复数据删除是否能为你节省成本。
你可以通过以下命令了解ZFS池pool1的重复数据删除表(DDT)正在使用多少内存。
$ sudo zpool status -D pool1
你可以看到,ZFSpool1的重复数据删除表(DDT)存储了5860个条目,每个条目使用324字节的内存。
DDT(pool1)使用的内存=5860个条目x每个条目324字节
= 1,898,640 bytes
= 1,854.14 KB
= 1.8107 MB
在ZFS池/文件系统上禁用重复数据删除功能。
一旦你在ZFS池/文件系统上启用重复数据删除功能,重复数据就会保持重复数据。即使你禁用了ZFS池/文件系统上的重复数据删除功能,你也无法摆脱重复数据。
但是有一个简单的方法可以从你的ZFS池/文件系统中移除重复数据删除。
i) 将你的ZFS池/文件系统的所有数据复制到另一个位置。
ii) 从你的ZFS池/文件系统中删除所有的数据。
iii) 禁用ZFS池/文件系统的重复数据删除功能。
iv) 将数据移回你的ZFS池/文件系统。
你可以用下面的命令禁用ZFS池pool1上的重复数据删除功能。
$ sudo zfs set dedup=off pool1
你可以用下面的命令在你的ZFS文件系统fs1(在pool1中创建)上禁用重复数据删除功能。
$ sudo zfs set dedup=off pool1/fs1
一旦所有重复数据删除和重复数据删除被禁用,重复数据删除表(DDT)应该是空的,如下图所示。这就是你如何验证你的ZFS池/文件系统上没有重复数据删除发生的方法。
$ sudo zpool status -D pool1
ZFS重复数据删除的使用案例。
ZFS重复数据删除有一些优点和缺点。但它确实有一些用途,在许多情况下可能是一个有效的解决方案。
例如:
i) 用户主目录:你可以对你的Linux服务器的用户主目录使用ZFS重复数据删除。大多数用户可能会在他们的家庭目录中存储几乎相似的数据。因此,重复数据删除在这里很有可能是有效的。
ii) 共享网络主机:你可以将ZFS重复数据删除用于共享主机WordPress和其他CMS网站。由于WordPress和其他CMS网站有很多类似的文件,ZFS重复数据删除在那里将非常有效。
iii) 自我托管的云:如果你使用ZFS重复数据删除来存储NextCloud/OwnCloud的用户数据,你可能会节省相当多的磁盘空间。
iv) 网络和应用程序开发:如果你是一个网络/应用程序开发人员,你很可能会与很多项目合作。你可能会在许多项目中使用相同的库(即Node模块、Python模块)。在这种情况下,ZFS重复数据删除可以有效地节省大量的磁盘空间。
总结
在这篇文章中,我已经讨论了ZFS重复数据删除是如何工作的,ZFS重复数据删除的优点和缺点,以及一些ZFS重复数据删除的使用案例。我已经向你展示了如何在你的ZFS池/文件系统上启用重复数据删除功能。
我还向你展示了如何检查你的ZFS池/文件系统的重复数据删除表(DDT)正在使用的内存量。我也向你展示了如何在你的ZFS池/文件系统上禁用重复数据删除功能。
今天的文章如何启用ZFS重复数据删除功能分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/17558.html