Получить имя снимка из свойства, используя 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}'
Длинный ответ / объяснение:
Вы можете запросить любое свойство ZFS любого набора данных (файловая система, том или снимок):
zfs get :uuid <dataset>
Если вы называете это рекурсивно с
-r
без набора данных вы получите все действительные наборы данных:zfs get -r :uuid
Чтобы свести его только к наборам данных типа снимка, используйте
-t
:zfs get -r -t snapshot :uuid
Тогда вы можете отображать только те столбцы, которые вы хотите с
-o
в этом случае столбцы name и value:zfs get -r -t snapshot -o name,value :uuid
Для дальнейшей работы с данными вам нужно удалить заголовки с
-H
и отображать числа как точные значения с-p
:zfs get -Hpr -t snapshot -o name,value :uuid
Это включает в себя все значения, даже не установленные (
-
), поэтому вам необходимо дополнительно отфильтровать вывод (например, с помощью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}'