使用zfs get从属性中获取快照的名称

时间:2017-06-06 16:14:44

标签: zfs

它想知道是否可以从任何财产获取快照的名称。

例如,我创建了一个名为:uuid的属性,其值为c98fdd32-8a76-4bcf-a509-d298291f85f5

如果可以使用属性及其值来获取此快照的名称?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

简答:

使用zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 == "c98fdd32-8a76-4bcf-a509-d298291f85f5") print $1}'

长答案/解释:

  1. 您可以查询任何数据集(文件系统,卷或快照)的任何ZFS属性:

    zfs get :uuid <dataset>
    
  2. 如果您在没有数据集的情况下使用-r递归调用它,您将获得所有有效数据集:

    zfs get -r :uuid
    
  3. 要将其仅限制为快照类型的数据集,请使用-t

    zfs get -r -t snapshot :uuid
    
  4. 然后,您只能使用-o显示所需的列,在本例中为名称和值列:

    zfs get -r -t snapshot -o name,value :uuid
    
  5. 要进一步处理数据,您需要使用-H删除标题,并使用-p将数字显示为完全值:

    zfs get -Hpr -t snapshot -o name,value :uuid
    
  6. 这包括所有值,甚至是未设置的值(-),因此您需要进一步过滤输出(例如使用awk):

    • 如果您只想要一个特定的快照名称(打印第二列/值为特定字符串的每一行的每一个第一列/名称):

       zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 == "c98fdd32-8a76-4bcf-a509-d298291f85f5") print $1}'
      
    • 如果您想要除空的所有结果(所有结果都没有-):

       zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 != "-") print $1}'
      
    • 如果您只想拥有基本名称,则可以进一步将第一列和第二列拆分为@(这是文件系统和快照名称之间的分隔符):

       zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 != "-") print $1}' | awk -F"@" '{print $1}'