LVM2: получение имен lv и vg из пути (имя группы томов и имя логического тома)

Предположим, что мы имеем путь lv:

lvpath=/dev/mapper/vg2-Music 

Чем я разделяю lvdisplay -c с разрезом:

  • Разделить раздел в LVM?
  • Неопределенная переменная
  • LVM2 pvdisplay и vgdisplay не согласны
  • Какое устройство использует этот логический том?
  • Развертывание повторения LVM2?
  • тонко подготовленный корневой раздел в Centos 7
  •  vgname="$(lvdisplay -c "$lvpath" | cut -d ':' -f 2 )" lvname="$(basename "$(lvdisplay -c "$lvpath" | cut -d ':' -f 1 )" )" 

    результат:

     $ echo VG: $vgname LV: $lvname VG: vg2 LV: Music 

    вопрос:

    Есть ли более удобный способ сделать это?

    Могу ли я полагаться на lvdisplay -c , который всегда будет предоставлять путь в форме /dev/VGname/LVname ? (В случае /dev/mapper/VGname-LVname basename можно обменять с sed)

    Есть ли инструмент из пакета LVM2 для получения LVname из пути?

  • Не удается смонтировать разделы LVM2
  • Почему файловая система ext4 может быть сжата только тогда, когда она не установлена?
  • Логические тома не смонтированы с помощью dmsetup и нет таблицы
  • Преобразование однодискового LVM-тома в полосатый том на трех дисках
  • LVM2 не может разбудить приостановленный логический том
  • Почему существуют символические ссылки в / dev? (LVM)
  • 3 Solutions collect form web for “LVM2: получение имен lv и vg из пути (имя группы томов и имя логического тома)”

    Используйте lvs с опцией -o для настройки отображаемых полей.

     set $(lvs --noheadings -o lv_name,vg_name) lv_name=$1 vg_name=$2 

    Обратите внимание, что вы не можете просто написать lv_name=$(lvs --noheadings -o lv_name) потому что lvs помещает лишние пробелы вокруг значения. Фрагмент безопасен, поскольку имена томов не могут содержать специальные символы оболочки.

    Они отлично подходят для работы с LVM в сценариях bash.

    Название VG:
    Это хорошо работает для получения имени VG (имя группы томов) как одно значение без пробелов:

     sudo vgs --noheadings -o vg_name | tr -d ' ' 

    LV Название (имена):
    Для имен LV (имена логических томов) есть «обычно» больше, чем один И, вам обычно нужно ссылаться на него с помощью синтаксиса /dev/<vg_name>/<lv_name> . Не знаю, какой формат вывода вы хотите. Ниже приводится список наименований LV с каждым значением, разделенным новой строкой «\ n»:

     sudo lvscan | cut -d "'" -f 2 

    Или, если вы просто хотите, чтобы имена LV <lv_name> только <lv_name> :

     sudo lvs --noheadings -o lv_name | tr -d ' ' 

    PV Название (имена):
    Вы не спрашивали, но пока я нахожусь, так вы получите имена PV (имена физического объема):

     sudo pvs --noheadings -o pv_name | tr -d ' ' 

    Другие ответы верны. Что делать, если вам нужен путь LV от самого имени LV? Предположим, что имя LV уникально, т. Е. Других LV не существует ни в одном другом VG, у которого есть это имя. Например, «Мусик». Вы можете получить путь одним шагом:

     lvs --noheadings -o lv_path -S lv_name=Musik 

    Ваш выход будет представлять собой один токен (путь LV), который может использоваться в последующих командах LV.

    Если lv_name не уникально, это не будет работать без особой осторожности.

    Linux и Unix - лучшая ОС в мире.