Intereting Posts
Не удается смонтировать разделы LVM2 Как получить последний день предыдущего месяца в UNIX (HPUX) Переместить содержимое папки на один уровень Сценарий оболочки и crontab, чтобы фиксировать размер файла, имя и дату в CSV-файле, а затем отправлять по электронной почте? Создание мастер-процесса и подключение подчиненных процессов Исправьте Numlock только для одной конкретной клавиатуры (оставив поведение других устройств нетронутым) использовать dhcp на eth0 с помощью командной строки Вносить записи пользователя в / etc / hosts постоянными Способ различать перемеженный вывод из двух фоновых процессов Не удалось добавить существующего пользователя в существующую группу в ubuntu Забудьте хэшированное исполняемое местоположение в интерактивной оболочке bash Файл resolv.conf + PXE + файлы кикстарта Экономия энергии в кластере linux Как вызвать процесс с определенным двоичным кодом java и всеми процессами, вызванными этим процессом? источники для профилирования частей ядра?

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

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