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

Get the name of snapshot from property using zfs get

想知道是否可以从任何 属性.

中获取快照的名称

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

是否可以使用 属性 及其值获取此快照的名称?

是的,有可能。

简答:

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

长answer/explanation:

  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 删除 headers 并使用 -p 将数字显示为精确值:

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

    • 如果您只想要一个特定的快照名称(为每一行打印第一个 column/name,其中第二个 column/value 是特定字符串):

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

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

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