ZFS 相当于 lvdisplay snap_percent

ZFS 相当于 lvdisplay snap_percent

我一直在使用 LVM 快照来备份 MySQL 数据库。

FLUSH TABLES WITH READ LOCK发出,然后lvcreate --snapshot --size 4G等等。由于数据库在快照处于活动状态时处于活动状态,因此snap_percent(用于跟踪与拍摄快照时文件系统原始状态的差异的快照存储量)开始增加。snap_percent每天都会对此进行监控,--size如果达到 80%,则会增加。

我的问题是,是否存在等效的统计数据或属性虚拟文件系统用于确定快照占用的空间占池中剩余空间的百分比?显然我不需要传递参数--sizezfs snapshot但是如何确定基于该快照的克隆是否接近池的限制。

希望这是有意义的,现在我读到它时它确实听起来像是一个复杂的问题。

答案1

ZFS 快照空间反映在文件系统的消耗中。您可以通过监控下面最合适的字段来获取所需的信息。

最后,您将看到文件系统的“可用”空间...看看“used”+“avail”是否小于“size”?:

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以显示相关属性。下面,我有一个 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

答案2

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,其中 2.8G 由快照使用,8.87 由实际文件系统(活动数据)使用。但是,每个快照旁边的已使用大小非常具有误导性。

如果你把快照已用列中的所有数字加起来,你会发现它们根本不接近 USEDSNAP 总数。这是因为 USED 值是多少独特的每个快照占用的空间。

例如:

如果我有一个名为“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

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

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

现在我创建一个新的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         -      -              -          -

现在我删除文件 B(在两个快照中都有):

 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 列是如何做的不是反映出变化?这是因为文件 B 被两个快照引用,并且由于它不是唯一的,所以它不会显示在任何特定快照的 USED 计数中。USEDSNAP 列反映出快照已使用该空间,但它不会将其与任何特定快照关联。

现在如果你要删除 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​​ 列将显示如果删除单个快照可以回收多少空间,但不会真正显示该快照保留了多少空间。

既然我已经说完了这些——

如果您计划仅保留任何特定数据集的一个快照,那么zfs 列表 -ro 空间命令应该会给你你所寻找的内容。

如果您要同时拥有多个快照,这些数据可能会产生误导。处理多个快照时,不要想当然地认为 USED 列有任何意义。此外,对于快照目录来说是一个糟糕的选择,因为它只显示快照引用的内容,而不是快照实际使用的空间。

zfs 手册页介绍了其中的一些内容,但不能很好地展示这些关系。

答案3

ZFS 中没有直接等效项。最接近的等效项是池中的可用空间,您可以从 获得zfs list。在 ZFS 上,快照可以增长,直到整个池的空间耗尽。

相关内容