como obter o ponto de montagem lvm (genérico)

0

Eu preciso escrever um script que irá verificar se um LVM existe no sistema ou não. Se um LVM existir, então ele executará algumas etapas, caso contrário, ele executará outras etapas.

Meu problema aqui é como encontrar uma abordagem genérica para encontrar o nome lvm e seu ponto de montagem. Eu tentei buscar o nome lv e o nome vg do comando lvdisplay e, em seguida, grep-lo da montagem.

LV_Name='sudo lvdisplay | sed -n '3,4p' | sed -n '1p' | awk '{print $3}''
VG_Name='sudo lvdisplay | sed -n '3,4p' | sed -n '2p' | awk '{print $3}''
echo -e "VG_Name is $VG_Name. \nLV_Name is $LV_Name".
lv_device_name='echo $VG_Name-$LV_Name'
echo "LVM device name is $lv_device_name"
mount_point='mount | grep $lv_device_name | awk '{print $3}''
if [ $? -eq 0 ]
  then
    echo "$mount_point is the mount point for $lv_device_name"
    else
    echo "No LVM found"
fi

mas agora o problema é que isso não é genérico, independentemente da plataforma * nix.

Este é o script específico do Ubuntu14.04 e aqui o ponto de montagem do lvm é /mnt/lvm com o nome lv sendo lvm_testing-lvnamefortest .

Na máquina Debian, o mesmo é /dev/mapper/deb--all--lvm01-usr on /usr , no entanto, o nome lvm retornado pelo comando acima é deb-all-lvm01-usr .

Existe algum comando genérico ou etapas que funcionem em todas as plataformas (como RHEL, CentOS, Ubuntu, Debian, etc.)?

    
por anurag 11.04.2016 / 06:55

1 resposta

2

Seu script é muito mais complicado do que precisa e tem alguns problemas:

  1. Você usa backticks em vez de $() .
  2. Seu script ignora todos, menos o primeiro volume lógico encontrado.
  3. Você assume que a falta de um ponto de montagem para um lvpath significa que não há volumes lógicos. Esta suposição é simplesmente errada.
  4. ambos lvs e lvdisplay já informam o nome do dispositivo no Caminho LV, não há necessidade de fazer suposições ou suposições sobre como ele pode ser nomeado.
  5. lvs tem opções de saída muito mais flexíveis do que lvdisplay ou vgdisplay .

Tente algo mais assim:

#! /bin/bash

lvcount=0

while read lvname vgname lvpath ; do
    lvcount=$((lvcount+1))

    printf "VG_Name is %s.\nLV_Name is %s.\n" "$vgname" "$lvname"

    echo "LVM Device name is $lvpath"

    mp=$(mount | grep "$lvpath" | awk '{print $3}')
    if [ -n "$mp" ] ; then
        echo "$mp is the mount point for $lvpath"
    else
        echo "$lvpath is not mounted."
    fi
    echo
done < <(lvs --no-headings -o lv_name,vg_name,lv_path)

echo "Found $lvcount logical volumes."
    
por 11.04.2016 / 09:00

Tags