diff options
author | ramon <ramongomez@us.es> | 2014-09-05 12:40:46 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2014-09-05 12:40:46 +0000 |
commit | 95e9664cc36cfcfff3b49ef0ec832905ed27e641 (patch) | |
tree | e7cec71a803028e691ed3a7ea2fbb346e35c11fc /client | |
parent | c632cca7921c44569c1eec0b1d56cbbe45166c62 (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-x | client/engine/Disk.lib | 71 |
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" } |