【问题标题】:Get the name of snapshot from property using zfs get使用 zfs get 从属性中获取快照的名称
【发布时间】:2017-06-06 16:14:43
【问题描述】:

它想知道是否可以从任何属性中获取快照的名称。

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

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

【问题讨论】:

    标签: zfs


    【解决方案1】:

    是的,有可能。

    简答:

    使用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}'
        

    【讨论】:

    • 非常感谢,我真的不想要这个解决方案,但我对自己的解释很糟糕。根据您的解释,我可以做到我想要的:zfs get -Hpr -t snapshot -o name,value :uuid | awk '{if ($2 == "c98fdd32-8a76-4bcf-a509-d298291f85f5") print $1}' 我想使用属性的值来获取名称:uuid
    • @icvallejo 很高兴它有帮助。我了解您,但缺少我的解决方案(我忘记了您要过滤特定值并且没有再次阅读您的问题),对此感到抱歉。我会将您的评论添加到答案中。谢谢采纳!
    • 今天这是正确的做法,但仅供参考,还有一个新功能正在开发中,称为“通道程序”(slideshare.net/mobile/MatthewAhrens/openzfs-channel-programs),它允许您在单个原子操作中执行此操作.
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2018-10-07
    • 2019-01-24
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多