Получить имя снимка из свойства, используя zfs get

Хотелось бы узнать, возможно ли получить имя снимка из какого-либо свойства.

Например, я создал свойство под названием :uuid со значением c98fdd32-8a76-4bcf-a509-d298291f85f5

Если возможно получить имя этого снимка, используя свойство и его значение?

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в этом случае столбцы name и value:

    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}'
      
Другие вопросы по тегам