2017-06-06 49 views
1

它想知道是否有可能從任何屬性獲取快照的名稱。使用zfs獲取屬性快照的名稱獲取

例如,我創建了一個名爲:uuid與價值c98fdd32-8a76-4bcf-a509-d298291f85f5

如果有可能得到使用屬性,其價值本快照的名稱屬性?

回答

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. 如果用遞歸調用它,沒有一個數據集,你會得到所有有效數據集:

    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}' 
      
+1

非常感謝你,我真的不想要這個解決方案,但我解釋自己很糟糕。有了你的解釋,我可以做到我想要的: 'zfs get -Hpr -t snapshot -o name,value:uuid | awk'{if($ 2 ==「c98fdd32-8a76-4bcf-a509-d298291f85f5」)​​print $ 1}'' 我想使用屬性值獲取名稱:uuid – icarbajo

+1

@icvallejo很高興幫助。我瞭解你,但我的解決方案缺乏(我忘了你想過濾一個具體的價值,並沒有再讀你的問題),對此抱歉。我會將你的評論添加到答案中。感謝接受! – user121391

+1

這是今天正確的方式,但是FYI還有一個名爲「頻道節目」的新功能(https://www.slideshare.net/mobile/MatthewAhrens/openzfs-channel-programs),它將允許你可以在單個原子操作中執行此操作。 – Dan