diff options
author | ramon <ramongomez@us.es> | 2014-09-23 11:48:41 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2014-09-23 11:48:41 +0000 |
commit | fd1846fe10d86fdc5df52e97536816c64ac33960 (patch) | |
tree | ecc0bfe90470d054ecd0994fb1fea5942eed45e0 | |
parent | 2851a935492a9b29c346f631c1409f0ef81402b9 (diff) |
#51: Integrar código del ticket:51 para detectar metadispositivos (LVM, RAID hardware y Multipath).
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4395 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-x | admin/Interface/getConfiguration | 5 | ||||
-rw-r--r-- | admin/WebConsole/includes/pintaParticiones.php | 13 | ||||
-rwxr-xr-x | client/engine/Disk.lib | 44 |
3 files changed, 45 insertions, 17 deletions
diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration index 2bfdaeeb..0979986d 100755 --- a/admin/Interface/getConfiguration +++ b/admin/Interface/getConfiguration @@ -17,6 +17,7 @@ for ((dsk=1; dsk<=$disks; dsk++)); do case "$ptt" in MSDOS) ptt=1 ;; GPT) ptt=2 ;; + LVM) ptt=3 ;; *) ptt=0 ;; esac # Información de disco (partición 0) @@ -31,8 +32,8 @@ for ((dsk=1; dsk<=$disks; dsk++)); do tam=$(ogGetPartitionSize $dsk $par 2>/dev/null) tam=${tam:-"0"} # Sistema operativo instalado - case "$cod" in - ""|82|8200|A502|BF02|EE) + case "$fsi" in + ""|EMPTY|CACHE|LINUX-SWAP|LINUX-LVM) soi="" ;; *) soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:) # Sistema de archivos para datos (sistema operativo "DATA") diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php index 33ab50da..210f4728 100644 --- a/admin/WebConsole/includes/pintaParticiones.php +++ b/admin/WebConsole/includes/pintaParticiones.php @@ -85,6 +85,8 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) break; case 2: $disktable[$tbKeys[$k]["numdisk"]] = "GPT"; break; + case 3: $disktable[$tbKeys[$k]["numdisk"]] = "LVM"; + break; default: $disktable[$tbKeys[$k]["numdisk"]] = ""; } } @@ -92,11 +94,16 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) echo'<tr height="16">'.chr(13); echo'<td align="center"> </td>'.chr(13); echo'<td align="center">'.$tbKeys[$k]["numpar"].'</td>'.chr(13); - if (is_numeric ($tbKeys[$k]["tipopar"])) { - echo '<td align="center"><em>'.sprintf("%02X",$tbKeys[$k]["tipopar"]).'</em></td>'.chr(13); + if ($disktable[$tbKeys[$k]["numdisk"]] == "LVM") { + echo '<td></td>'.chr(13); } else { - echo '<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13); + if (is_numeric ($tbKeys[$k]["tipopar"])) { + echo '<td align="center"><em>'.sprintf("%02X",$tbKeys[$k]["tipopar"]).'</em></td>'.chr(13); + } + else { + echo '<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13); + } } $filesys=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]); echo'<td align="center"> '.$filesys.' </td>'.chr(13); diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index cf389785..7897fc9c 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -430,11 +430,14 @@ return $OG_ERR_NOTFOUND #@version 1.0.5 - Comprobación correcta de parámetros para soportar valores > 9. #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2013-05-07 +#@version 1.0.6 - Soporta RAID hardware y Multipath. +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2014-09-23 #*/ ## function ogDiskToDev () { # Variables locales -local ALLDISKS VOLGROUPS DISK PART +local ALLDISKS MPATH VOLGROUPS DISK PART i # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -445,13 +448,23 @@ if [ "$*" == "help" ]; then return fi -# 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) +# Listar dispositivos de discos duros. +ALLDISKS=$(lsblk -n | awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}') + +# Listar volúmenes lógicos. VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}') ALLDISKS="$ALLDISKS $VOLGROUPS" +# Detectar caminos múltiples (ignorar mensaje si no está configurado Multipath). +if MPATH=$(multipath -l -v 1 2>/dev/null | awk '{printf "/dev/mapper/%s ",$1}'; exit ${PIPESTATUS[0]}); then + # Quitar de la lista los discos que forman parte de Multipath. + for i in $(multipath -ll | awk '$6=="ready" {printf "/dev/%s ",$3}'); do + ALLDISKS="${ALLDISKS//$i/}" + done + # Añadir caminos múltiples a los discos detectados. + ALLDISKS="$ALLDISKS $MPATH" +fi + # Mostrar salidas segun el número de parametros. case $# in 0) # Muestra todos los discos, separados por espacios. @@ -472,14 +485,21 @@ case $# in # Comprobar si es partición. if [ -b "$PART" ]; then echo "$PART" - elif [ -n "$VOLGROUPS" ]; then - # Comprobar si volumen lógico. /* (comentario Doxygen) - PART=$(lvscan -a 2>/dev/null | grep "'$DISK/" | awk -v n=$2 -F\' '{if (NR==n) print $2}') - [ -e "$PART" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $? - # (comentario Doxygen) */ - echo "$PART" else - ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $? + # Comprobar si RAID o Multipath (tener en cuenta enlace simbólico). + PART="${DISK}p$2" + if [ "$(stat -L -c "%A" "$PART" 2>/dev/null | cut -c1)" == "b" ]; then + echo "$PART" + elif [ -n "$VOLGROUPS" ]; then + # Comprobar si volumen lógico. /* (comentario Doxygen) + PART=$(lvscan -a 2>/dev/null | \ + awk -F\' -v n=$2 "\$2~/^${DISK//\//\\/}\// {if (NR==n) print \$2}") + [ -e "$PART" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $? + # (comentario Doxygen) */ + echo "$PART" + else + ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $? + fi fi ;; *) # Formato erroneo. |