summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-09-05 12:40:46 +0000
committerramon <ramongomez@us.es>2014-09-05 12:40:46 +0000
commit95e9664cc36cfcfff3b49ef0ec832905ed27e641 (patch)
treee7cec71a803028e691ed3a7ea2fbb346e35c11fc /client
parentc632cca7921c44569c1eec0b1d56cbbe45166c62 (diff)
#51: Integrar código del ticket:51 en la librería {{{Disk}}}, con los siguientes cambios:
* Nuevo formato para la función {{{ogDevToDisk}}}: {{{ogDevToDisk path_device | LABEL="str_label" | UUID="str_uuid"}}}. * Funciones {{{ogGetDiskSize}}}, {{{ogGetPartitionsNumber}}} y {{{ogGetPartitionTableType}}} soportan volúmenes lógicos (tipo de tabla de particiones {{{LVM}}}). git-svn-id: https://opengnsys.es/svn/branches/version1.0@4378 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-xclient/engine/Disk.lib71
1 files changed, 55 insertions, 16 deletions
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index 88fb132b..cf389785 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Disk
#@class Disk
#@brief Funciones para gestión de discos y particiones.
-#@version 1.0.5
+#@version 1.0.6
#@warning License: GNU GPLv3+
#*/
@@ -351,41 +351,56 @@ esac
#/**
-# ogDevToDisk path_device
-#@brief Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo.
-#@param path_device Camino del fichero de dispositivo.
+# ogDevToDisk path_device | LABEL="str_label" | UUID="str_uuid"
+#@brief Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo o a la etiqueta o UUID del sistema de archivos asociado.
+#@param path_device Camino del fichero de dispositivo.
+#@param str_label etiqueta de sistema de archivos.
+#@param str_uuid UUID de sistema de archivos.
#@return int_ndisk (para dispositivo de disco)
#@return int_ndisk int_npartition (para dispositivo de partición).
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Dispositivo no detectado.
-#@note Requisitos: awk
+#@note Solo se acepta en cada llamada 1 de los 3 tipos de parámetros.
#@version 0.1 - Integracion para Opengnsys - EAC: DiskEAC() en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
#@version 0.9 - Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2009/07/20
+#@version 1.0.6 - Soporta parámetro con UIID o etiqueta.
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2014/07/13
#*/ ##
function ogDevToDisk ()
{
# Variables locales.
-local d n
+local DEV d n
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_device" \
- "$FUNCNAME /dev/sda => 1 1"
+ ogHelp "$FUNCNAME" "$FUNCNAME path_device | LABEL=str_label | UUID=str_uuid" \
+ "$FUNCNAME /dev/sda => 1" \
+ "$FUNCNAME /dev/sda1 => 1 1" \
+ "$FUNCNAME LABEL=CACHE => 1 4"
return
fi
# Error si no se recibe 1 parámetro.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Obtener dispositivo a partir de camino, etiqueta o UUID.
+DEV="$1"
+case "$DEV" in
+ LABEL=*) DEV=$(blkid -L "${1#*=}") ;;
+ UUID=*) DEV=$(blkid -U "${1#*=}") ;;
+esac
+
# Error si no es fichero de bloques.
-[ -b "$1" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
+[ -b "$DEV" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
# Procesa todos los discos para devolver su nº de orden y de partición.
n=1
for d in $(ogDiskToDev); do
- [ -n "$(echo $1 | grep $d)" ] && echo "$n ${1#$d}" && return
+ [ -n "$(echo $DEV | grep $d)" ] && echo "$n ${DEV#$d}" && return
n=$[n+1]
done
ogRaiseError $OG_ERR_NOTFOUND "$1"
@@ -430,7 +445,9 @@ if [ "$*" == "help" ]; then
return
fi
-# Listar dispositivo para los discos duros (tipos: 3=hd, 8=sd).
+# Nota: probar rendimiento del comando lsblk.
+#ALLDISKS=$(lsblk -n | awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}')
+# Listar dispositivo para los discos duros (tipos: 3=hd, 8=sd) y grupos de volúmenes.
ALLDISKS=$(awk '($1==3 || $1==8) && $4!~/[0-9]/ {printf "/dev/%s ",$4}' /proc/partitions)
VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}')
ALLDISKS="$ALLDISKS $VOLGROUPS"
@@ -484,11 +501,14 @@ esac
#@version 0.9.2 - Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/09/15
+#@version 1.0.6 - Soportar LVM.
+#@author Universidad de Huelva
+#@date 2014/09/04
#*/ ##
function ogGetDiskSize ()
{
# Variables locales.
-local DISK
+local DISK SIZE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -500,7 +520,13 @@ fi
# Obtener el tamaño del disco.
DISK="$(ogDiskToDev $1)" || return $?
-awk -v D=${DISK#/dev/} '{if ($4==D) {print $3}}' /proc/partitions
+SIZE=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3}}' /proc/partitions)
+# Si no, obtener tamaño del grupo de volúmenes.
+[ -z "$SIZE" ] && SIZE=$(vgs --noheadings --units=B -o dev_size $DISK 2>/dev/null | \
+ awk '{print $1/1024}')
+
+# Mostrar salida.
+[ -n "$SIZE" ] && echo "$SIZE"
}
@@ -727,6 +753,9 @@ esac
#@version 1.0.4 - Uso de /proc/partitions para detectar el numero de particiones
#@author Universidad de Huelva
#@date 2012/03/28
+#@version 1.0.6 - Soportar LVM.
+#@author Universidad de Huelva
+#@date 2014/09/04
#*/ ##
function ogGetPartitionsNumber ()
{
@@ -746,6 +775,7 @@ DISK=$(ogDiskToDev $1) 2>/dev/null
case "$(ogGetPartitionTableType $1)" in
GPT) grep -c "${DISK#/dev/}." /proc/partitions ;;
MSDOS) sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK" ;;
+ LVM) lvs --noheadings $DISK 2>/dev/null | wc -l ;;
esac
}
@@ -761,11 +791,14 @@ esac
#@version 1.0.4 - Primera versión para OpenGnSys
#@author Universidad de Huelva
#@date 2012/03/01
+#@version 1.0.6 - Soportar LVM.
+#@author Universidad de Huelva
+#@date 2014/09/04
#*/ ##
function ogGetPartitionTableType ()
{
# Variables locales.
-local DISK
+local DISK TYPE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -777,8 +810,14 @@ fi
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Sustituye n de disco por su dispositivo.
-DISK=`ogDiskToDev $1` || return $?
-parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}'
+DISK=$(ogDiskToDev $1) || return $?
+
+# Comprobar tabla de particiones.
+[ -b $DISK ] && TYPE=$(parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}')
+[ -d $DISK ] && vgs $DISK &>/dev/null && TYPE="LVM"
+
+# Mostrar salida.
+[ -n "$TYPE" ] && echo "$TYPE"
}