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

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

lvpath=/dev/mapper/vg2-Music 

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

 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 из пути?

  • / sbin / cryptsetup не найден при загрузке
  • Как разбить раздел crypt_LUKS пополам с LVM?
  • Как восстановить контейнер LVM для большего физического раздела?
  • Что такое lvmetad и почему я хочу или должен его использовать?
  • Как изменить dm_crypt aes / 256 LVM-пароль после установки?
  • Понимание многолучевого распространения и точек монтирования
  • Открыть luks-зашифрованный раздел с виртуального диска LVU DomU, содержащего другой LVM
  • Как создать последовательный судебный образ из живой системы RHEL?
  • 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 не уникально, это не будет работать без особой осторожности.

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