ZFS等价于lvdisplay snap_percent

我一直在使用LVM快照来备份MySQL数据库。 FLUSH TABLES WITH READ LOCK被发出,然后lvcreate --snapshot --size 4G等。由于数据库在快照处于活动状态时处于活动状态,因此snap_percent (用于跟踪文件系统原始状态的快照存储量拍摄快照的时间)开始增加。 这个snap_percent是每天都进行监控的,如果达到80%,这个--size就会增加。

我的问题是ZFS中是否有等效的统计信息或属性,用于确定快照消耗的空间量占池中剩余空间的百分比? 很明显,我不需要将--sizeparameter passing给zfs snapshot但是如何确定基于该快照的克隆是否接近池的限制。

希望这是有道理的,现在看来,这听起来像是一个复杂的问题。

ZFS快照空间反映在文件系统的消耗中。 你可以通过监视下面最合适的字段来得到你所要求的。

最后,你会看到你的文件系统的“有用”的空间…看看“使用”+“有效”小于“大小”?

 root@deore:~# df -h /volumes/vol1/LA_Specialty Filesystem size used avail capacity Mounted on vol1/LA_Specialty 800G 391G 254G 61% /volumes/vol1/LA_Specialty 

我已经筛选了zfs get all pool/filesystem的输出, zfs get all pool/filesystem下面的zfs get all pool/filesystem显示相关的属性。 下面,我有一个800GB的文件系统(配额),使用545GB。 391GB被引用 ,这就是真实数据的大小。 快照使用154GB。

 root@deore:/volumes# zfs get all vol1/LA_Specialty NAME PROPERTY VALUE SOURCE vol1/LA_Specialty type filesystem - vol1/LA_Specialty creation Sat Sep 24 18:44 2011 - vol1/LA_Specialty used 545G - vol1/LA_Specialty available 255G - vol1/LA_Specialty referenced 391G - vol1/LA_Specialty compressratio 2.96x - vol1/LA_Specialty quota 800G local vol1/LA_Specialty reservation none default vol1/LA_Specialty recordsize 16K local vol1/LA_Specialty mountpoint /volumes/vol1/LA_Specialty inherited from vol1 vol1/LA_Specialty usedbysnapshots 154G - vol1/LA_Specialty usedbydataset 391G - vol1/LA_Specialty usedbychildren 0 - vol1/LA_Specialty usedbyrefreservation 0 - 

然后查看快照…可以查看快照的个别大小以及它们引用的总数据大小。

 root@deore:/volumes# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT vol1/LA_Specialty@snap-daily-1-2013-09-07-020003 57.6G - 389G - vol1/LA_Specialty@snap-daily-1-2013-09-08-020003 1.95G - 391G - vol1/LA_Specialty@snap-daily-1-2013-09-09-020008 3.42G - 392G - vol1/LA_Specialty@snap-daily-1-2013-09-10-020003 3.05G - 391G - vol1/LA_Specialty@snap-daily-1-2013-09-11-020003 2.81G - 391G - vol1/LA_Specialty@snap-daily-1-2013-09-12-020004 2.65G - 391G - vol1/LA_Specialty@snap-daily-1-2013-09-13-020003 2.70G - 391G - vol1/LA_Specialty@snap-daily-1-2013-09-14-020003 25K - 391G - vol1/LA_Specialty@snap-daily-1-latest 25K - 391G - 

和快照目录的du列表…

 root@deore:/volumes/vol1/LA_Specialty/.zfs/snapshot# du -skh * 389G snap-daily-1-2013-09-07-020003 391G snap-daily-1-2013-09-08-020003 392G snap-daily-1-2013-09-09-020008 391G snap-daily-1-2013-09-10-020003 391G snap-daily-1-2013-09-11-020003 391G snap-daily-1-2013-09-12-020004 391G snap-daily-1-2013-09-13-020003 391G snap-daily-1-2013-09-14-020003 391G snap-daily-1-latest 

ZFS快照中有很多隐藏的数据。 一般我会推荐你

 zfs list -ro space 

其中显示的输出类似于:

 NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rootpool/export/home 6.37G 11.7G 2.80G 8.87G 0 0 rootpool/export/[email protected] - 134M - - - - rootpool/export/[email protected] - 320M - - - - rootpool/export/[email protected] - 251M - - - - rootpool/export/[email protected] - 1.02M - - - - rootpool/export/[email protected] - 1.04M - - - - rootpool/export/[email protected] - 850K - - - - rootpool/export/[email protected] - 747K - - - - rootpool/export/[email protected] - 326K - - - - rootpool/export/[email protected] - 454K - - - - rootpool/export/[email protected] - 319K - - - - 

这将告诉你,我在这个特定的数据集上使用了11.7G的TOTAL,2.8G被快照使用,8.87被实际的文件系统(活动数据)使用。 但是,每个快照旁边的USED大小是非常具有误导性的。

如果将快照使用的列中的所有数字相加,您将看到它们不会在USEDSNAP总数附近出现。 这是因为USED值是每个快照拥有多less独特空间。

例如:

如果我有一个名为“newpool”的池,它有2个1G文件(fileA和fileB):

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 11.0G 2.0G 0.00G 2.0G 0 0 

现在我记下:

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 11.0G 2.0G 0.00G 2.0G 0 0 newpool@snap1 11.0G 0.0G 0.00G 2.0G 0 0 

现在我删除1G文件(fileA)中的一个:

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 11.0G 2.0G 1.00G 1.0G 0 0 newpool@snap1 - 1.0G - - - - 

现在我创build一个新的1G文件(fileC):

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 10.0G 3.0G 1.00G 2.0G 0 0 newpool@snap1 - 1.0G - - - - 

现在我再次抓住它

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 10.0G 3.0G 1.00G 2.0G 0 0 newpool@snap1 - 1.0G - - - - newpool@snap2 - 0.0G - - - - 

现在我删除fileB(在两个快照中):

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 10.0G 3.0G 2.00G 1.0G 0 0 newpool@snap1 - 1.0G - - - - newpool@snap2 - 0.0G - - - - 

注意快照USED列没有反映这个变化? 这是因为fileB被两个快照引用,并且由于它不是唯一的,所以不会显示在任何特定快照的USED计数中。 USED​​SNAP专栏反映快照已经使用了该空间,但并未将其与任何特定的空间相关联。

现在,如果你要删除snap1:

  NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD newpool 11.0G 2.0G 1.00G 1.0G 0 0 newpool@snap2 - 1.0G - - - - 

现在,snap2显示已经使用了1.0G,因为该数据现在对于该快照是唯一的。

如果删除单个快照,则USED列将向您显示可以回收多less空间,但不会真正向您显示快照预留多less空间。

所以现在我已经说了所有这些 –

如果你打算只保留任何特定数据集的快照,那么zfs list -ro space命令应该给你你正在寻找的东西。

如果您要同时拥有多个快照,则这些数据可能会产生误导。 不要做那些很自然的事情,并且假定当处理多个快照时,USED列意味着什么。 另外, du是快照目录的一个不好的select,因为它只显示了快照引用的内容,而不是快照实际使用的空间。

zfs手册页经历了一些这样的情况,但是展示这些关系并不是很好。