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

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 не уникально, это не будет работать без особой осторожности.

  • Почему метаданные LVM поддерживаются в / etc / lvm и не загружаются?
  • LVM Snapshot без копирования на запись
  • Почему существуют два разных значения для размера диска и как их согласовать с устройством-картографом и LVM?
  • LVM2 pvdisplay и vgdisplay не согласны
  • Перенести систему Fedora на другой компьютер
  • Могу ли я расширить раздел, который уже используется в качестве LVM PV?
  • Как заставить логический том LVM2 RAID5 охватывать дополнительный физический том?
  • Измените размер физического объема, resize2fs не будет работать с ним
  • Расширение корневого раздела с использованием нераспределенного пространства на двойной системе загрузки
  • Как уменьшить размер логического тома / fs aix?
  • Монтаж синологических дисков в ubuntu
  • Удаление / начало LVM и объединение в /
  • Linux и Unix - лучшая ОС в мире.